root ������ü�����б����� Android ���ץ�����ˡ
�����γ�ȯ�Ը������ʰʳ��Ǥ� root ���¤�������뤿��θ����μ��ʤ��󶡤���Ƥ��ʤ��Τǡ�������ˡ��ʬ��õ������ˤ���ï�������󤷤�����ȥ졼������ˤ��褹�٤Ƥϼ�����Ǥ�Ǥ���櫓�Ǥ����������� root ���¤�ɬ�פȤ��륢�ץ�ϥޡ����åȤˤ⤢�줳��в�äƤ��ꡢ�Ĥޤ�Ϥ��η�˴ؤ�����������������Υȥ졼�ɥ��դ���Â�Ǥ��ʤ����������������������Ȥ������ȤǤ��礦��
���ξ������Τ⤤��������̣�֤����ΤǤ������Ȥ����ǡ����Ρ�root ���¤����Ѥ��륢�ץ�פȤ�����ΤϤɤ���äƽ񤱤Ф����ΤǤ��礦��Google �����γ�ȯ�Ը��������ϸ����˵ڤФ�������¾�Υ꥽�����ˤ⺣�ΤȤ����ۤȤ�ɤ�������˴ؤ������ϸ�������ޤ��󡣤����Ǻ���ϡ��ºݤ˼긵�Υ��ץ�� root ���¤Ǥμ¹Ԥ��б��������ߤ��̤������������Υ��ϥ���Ҳ𤷤����Ȼפ��ޤ���
�ɤ�������Τ���Ф�������
�ޤ�����root ���¤����Ѥ��륢�ץ�פ��ɤΤ褦�ʷ��Τ�ΤǤ��뤫�����餫�ˤ���ɬ�פ�����ޤ��͡� �����Ǥ�����Ȥʤ�դ��Ĥ�������ǧ���ʤ��餽����������Ƥߤޤ���
�� ���� 1. Android ���ץ�� uid �ˤĤ���
���� Android ���ץ�� uid �ϡ������ü���إ��󥹥ȡ��뤷�������ǥ����ƥ�ˤ�꼫ưŪ�˳�����Ƥ��ޤ������� uid ��ü���ˤ����ƥ��ץꤴ�Ȥ˸�Í�Ǥ��ʢ��ˡ����Τ褦�ʤ����ߤǤ��뤿�� Android �Ǥϥ����ƥब������Ƥ� uid �ʳ��ǥ��ץ��¹Ԥ��뤳�ȤϤǤ�����root �����ߤ�ü���Ǥ��äƤ⥤�󥹥ȡ��뤺�ߤΥ��ץꥱ����������Τ� root ���¤Ǽ¹Ԥ��뤳�ȤϤǤ��ޤ���
�ʢ����㳰�Ȥ��ƥ��ץ곫ȯ���� AndroidManifest.xml �Ǥ� sharedUserId ����ˤ��տ�Ū��ʣ���μ���ץ�� uid ��Í���뤳�Ȥ��Ǥ��ޤ�
�� ���� 2. "su" ���ޥ�ɤ� "Superuser" ���ץ�ˤĤ���
��Superuser�� �Ϥ��ζڤǤμ¼�ɸ��Ȥ�������Í̾�ʥ��ץꥱ�������ʤΤǤ�¿����������¸�ΤǤ��礦�� ü���� root ���� Andorid �� Linux �Ķ��� owner=root �����֤��� "su" ���ޥ�ɤ� setuid �ӥåȤ�Ω�Ƥ뤳�ȤǼ¸����ޤ����� �����Ǥ� ChainsDD (Adam Shanks) ��ˤ�� su ���ޥ�ɤΥХ��ʥ��Ʊ����Ʊ��γ�ȯ���� Android ���ץ�Ǥ��� Superuser �ȥڥ���Ƴ�����뤳�Ȥ�����Ū�Ǥ��������ȹ礻�ˤ�ꡢ�桼���ϥ��ץꤴ�Ȥ� root ������Ϳ�β��ݤ�����Ū�����ꤹ�뤳�Ȥ���ǽ�Ȥʤ�ޤ���
root ���¤����Ѥ��륢�ץ��񤯤���ˤϡ����� ��su + Superuser�� ���ȹ礻���ɤΤ褦�˵�ǽ���Ƥ���Τ������Τ����ߤ��İ����Ƥ���ɬ�פ�����Ǥ��礦�����פ�ʲ��˼����ޤ���
ChainsDD ��� su �ϡ������Υץ���������¹��׵�������ȡ����Υץ������� uid ��Ĵ�����׵ᤵ�줿���ޥ�ɥ饤��� uid �ξ�����Ȥ˽�ɤΥۥ磻�ȥꥹ�ȥǡ����١�����Ȳ񤹤롣��������쥳���ɤ�¸�ߤ���Ф��Υ쥳���ɤ� "allow", "deny" ��°���˱����ƸƤӸ�������׵����Ĥޤ��ϵ��ݤ��������쥳���ɤ��ʤ�����׵����켰�� action="com.noshufou.android.su.REQUEST" �Υ���ƥ�Ȥ��������ƥ����ƥ�إ֥����ɥ��㥹�Ȥ��롣
������Superuser �� Activity �Ȥ��Ƥμ����ʳ��˥֥����ɥ��㥹�ȥ쥷���ФȤ��Ƥμ����������Ƥ���åµï¿½Ö¥ï¿½ï¿½ï¿½ï¿½É¥ï¿½ï¿½ã¥¹ï¿½È¤ï¿½È¯ï¿½ï¿½ï¿½ï¿½ï¿½Ë¥ï¿½ï¿½ï¿½ï¿½Æ¥ï¿½Ë¤ï¿½ê¥ï¿½Ã¥ï¿½ï¿½ï¿½ï¿½ï¿½ë¡£ï¿½ï¿½ï¿½ï¿½ï¿½Æ¡ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½×¥ï¿½ï¿½ su �¹Բ��ݤ� GUI �ǥ桼���˳�ǧ�����η�̤�ۥ磻�ȥꥹ�Ȥ���¸�ܥ桼���������ץ��������̿��� su ���ޥ��¦�������롢�Ȥ��������ñ¤¤¤ò¤¹¤ë¡£
�� �Ĥޤꡢ����������Τ���Ф褵�����Ǥ�
�ʾ������ˤ�ȤŤ���root ���¤����Ѥ��륢�ץ��ȯ������α�դ��٤�����󤲤Ƥߤޤ���
a) root ���¤Ǽ¹ԤǤ���Τϥ��ץ����ΤǤϤʤ���Android �� Linux �Ķ���� "su" ���ޥ�ɷ�ͳ����������ץ������Ǥ���
b) ���Τ��ᡢroot ���¤�ɬ�פʽ����ϥ��ץ����Τ˵��Ҥ���ΤǤϤʤ���Android �� Linux �Ķ��ˤ����Ƽ¹Բ�ǽ����Ω�����¹Է����˵��Ҥ���ɬ�פ�����
c) ���ץ����Τϡ�ɬ�פʾ��̤Ǿåµï¿½Î¼Â¹Ô·ï¿½ï¿½ï¿½ï¿½ï¿½ "su" ���ޥ�ɷ�ͳ�Ǽ¹Ԥ��뤳�Ȥˤ�ä� root ���¤Ǥν����θ��̤�����
ï¿½åµ a) �ϡ��������ץ꤬ root ���¤Ǥμ¹Ԥ˵����Τ� Linux �Υ����뤽�Τ�ΤǤ��ä��ꡢ���뤤��ɸ��Ū�ʥ��ޥ�ɤε�ǽ���ϰϤǼ��ޤ���ˤ� b) �ǿ��줿�̤μ¹Է�����ɬ�פʤ��Ȥ������Ȥ��̣���Ƥ��ޤ�������ˤ��ƤϤޤ�ŵ��Ū����ϥ����ߥʥ륨�ߥ�졼�����ץ�Ǥ��礦��
ï¿½åµ b) �Ρּ¹Է����פϼ¹�ñ�̤Ȥ��Ƥϥ��ץ����Τ�����Ω����¸�ߤǤ����������ޤǤ�������Τ�ʸ̮�ΰ����Ǥ��뤿�ᥢ�ץ����Τ�ʪ��Ū�ˤ�ʬΥ������ɬ�פʾ��̤��ڤ�Ф��ƻ��ѤǤ���褦�˥꥽�������η��ǥ��ץ��������Ǥ������Ȥ������Ǥ��礦��
ï¿½åµ c) �ϡ�uid !=root �οƥץ������ʥ��ץ����Ρˤ� uid = root �λҥץ�������su ��ͳ�Υץ������ˤν���Ŭ�ڤ˶�Ĵ������ɬ�פ����뤳�Ȥ��̣���ޤ���¿���ξ�硢��������ϡ��ҥץ����������㤤���¤�ư����οƥץ������Ǥ��륢�ץ�¦��ô�����Ȥˤʤ�Ǥ��礦��
�ɤΤ褦�˺��Ф�������
��ɸ�Ȥ���ץ������η�������Ǥۤ����餫�ˤʤ�ޤ������������̤�ͤ������Τ�ΤϤ�������ץ�ʤΤǤ��Ȥϥ��ץ���׷�˱����Ƥ����Ť���Ԥ��Ф褤�Ǥ��礦���ʲ���������Ԥ���ǻ��ͤˤʤꤽ���ʥݥ���Ȥ򤤤��Ĥ������Ƥ����ޤ���
�� su ���ޥ�ɤμ¹Ԥ˴ؤ��뤳��
���ץ��⤫�� su ���ޥ�ɤ�¹Ԥ���ˤ� java.lang.Runtime ���饹�� exec �᥽�å�����Ȥ��Ȥ褤�Ǥ��礦��
Process process = Runtime.getRuntime().exec(cmdstr);
su ���ޥ�ɤ�¹Ԥ���ݤˤϥѥ�᡼���λ�������դ�ɬ�פǤ���
-c ���ץ�����Ȥ��� "su -c <cmd> [args]" �����ΤǼ¹��оݤΥץ������Ȥ��ΰ�����ޤȤ�ƻ��ꤹ�뤳�Ȥ��Ǥ��ޤ��������η����׵��Ԥä���硢Superuser �� "<cmd> [args]" �ΰ켰���׵ᥳ�ޥ�ɾ���Ȥ��ƽ�ɤΥۥ磻�ȥꥹ�Ȥص�Ͽ���ޤ���
�Ĥޤꡢ<cmd> ���Ϥ� [args] �����Ƥ����Ѥξ�硢Superuser �Ϥ������ٿ������׵�Ȥ��ƥ桼���˼¹Բ��ݤγ�ǧ��Ԥ�������ˡ������׵����Ƥ򿷵��Υ쥳���ɤȤ��ƥۥ磻�ȥꥹ�Ȥ��ɲä���Ȥ������ȤǤ���
Superuser �����Ū�˻Ȥ�����ˤ�������������򤱤�٤��Ǥ������ޥ�ɥ饤��Ȥ��Ƥ� "su -c <cmd>" �ޤǤλ����α�ᡢ[args] �˳��������������ӥץ��������̿����Ǽ����Ϥ����Ȥ�˾�ޤ����Ǥ��礦��
�̤���ˡ�Ȥ��ơ����ץ����ʤ��� "su" ��¹Ԥ��� uid=root �Υ�����ץ�������ư�������� stdin ���ȥ꡼��˥��ץ꤫�����Υ��ޥ��ʸ�����ñ¤¹ï¿½ï¿½ï¿½Ç¼Â¹Ô¤ï¿½ï¿½ï¿½ï¿½ï¿½È¤ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½â¤¢ï¿½ï¿½Þ¤ï¿½ï¿½ï¿½ï¿½ï¿½Android �������ޥ륦�����ζ��Ҥ����礷�ĤĤ��븽���ˤ����Ƥϡ����줬û��Ū�ʤ�ΤǤ��ä��Ȥ��Ƥ⡢��� root ������ץ�������ư������ͤ� �����˺������륢�ץ���Ȥ߹���������ò¤±¤ï¿½Ù¤ï¿½ï¿½ï¿½ï¿½â¤·ï¿½ï¿½Þ¤ï¿½ï¿½ï¿½
�� ����Ω�����¹Է����פγ�ȯ�ˤĤ���
����˵��Ҥ��� su ���ޥ�ɷ�ͳ�Ǽ¹Ԥ��� ��Ω�����¹Է��� �� Android OS �� Linux �Ķ����Ŭ�ڤ�ư������ƤǤ���г�ȯ�������ϲ��Ǥ�褤�ΤǤ����������餯��äȤ��ڤdzμ¤ʤΤ� C ����ǽ����òµ½Ò¤ï¿½ Android NDK ��Ȥäƥӥ�ɤ���Ȥ�����ˡ�Ǥ��礦�� NDK �ǥ�����ɥ���μ¹Է��������������ˡ�ˤĤ��Ƥϲ����ε����ʤɤ����ͤˤʤ�Ȼפ��ޤ���
�� ����Ω�����¹Է����פΥ��ץ�ؤ������������ڤ�Ф���
NDK ���Ǻ�������������ɥ�����μ¹Է����� ���� �ΤȤ��ꥢ�ץ����Τ�������Ǥ�����ɬ�פʻ��˥��ץ�¦�����ڤ�Ф��ƻ��Ѥ���Ȥ������������褤�Ǥ��礦��
���ץ�ؤ������ߤϡ�Eclipse ����оݥ��ץ�Υץ��������ȥĥ꡼��� [res] - [raw] �ˡ������¹Է����ե������꥽�����ǡ����Ȥ��ƥ��ԡ����ڡ����Ȥ���Τ���ñ�Ǥ�������� apk �ե�����˼¹Է�������������ޤ���
apk ������ڤ�Ф��ˤϲ��������ɤ����Τ� android.content.Context �� getResources �᥽�åɤ�Ȥ��ޤ������Υ����ɤ�ޤॽ�����ե�����������ˤ���ޤ����ڤ�Ф����¹Է����ˤ�ɬ���¹Ե��Ĥ���Ϳ���ޤ���
OutputStream os = new FileOutputStream(strOutputFileName); byte[] buf = new byte[1024]; InputStream is = mContext.getResources().openRawResource(nResourceId); int len = 0; while ((len = is.read(buf)) != -1) { os.write(buf, 0, len); } is.close(); os.close();
�ʤ�����raw�ץǡ����Ȥ��� apk ����������꥽�����ե�����Υǥե���Ȥν������ ��/data/data/[�ѥå�����̾]/files�� �Ȥ����ǥ��쥯�ȥ�Ǥ������Υǥ��쥯�ȥ�Υѥ��ϥ��ץ��⤫�鼡�Υ����ɤǼ������뤳�Ȥ��Ǥ��ޤ���
[context.]getFilesDir().getAbsolutePath() + File.separatorsu ���ޥ�ɤؼ¹Է����Υե�ѥ����Ϥ��ݤʤɤˤ��Υ����ɤ�Ȥ����Ȥˤʤ�Ǥ��礦��
�� �ץ��������̿��ˤĤ���
su ���ޥ�ɷ�ͳ�ǤҤȤ��ӵ�ư�����ץ��������������ץ�λҥץ������ǤϤ����ΤοƤȤϰۤʤ궯��� root ���¤�ư��Ƥ��ޤ�������Ǥ����̤ʻ��𤬤ʤ��¤�ϥ桼�����󥿡��ե����������Ǥ�ޤᡢ�ץ���������ΤΥ���ȥ�����Ϥ����ޤǤ�ƥץ������Ǥ��륢�ץ�¦��ô�����Ȥˤʤ�Ǥ��礦��
���Ȥ��лҶ��Ǥ��� root �ץ�������Ǥ�������������ľ��Ū�ʤ�Τǡ����ٸƤӽФ����餽�ν�λ���ԤĤ����Ǥ褤�褦�����ƤǤ���Х��ץ�¦�ϻҥץ������β�ư������ƻ뤹������ǻ�Â���Ǥ��礦��
��������¿���ξ�祷�ʥꥪ�Ϥ�ä�ʣ���ǡ������餯����Ǥ⥢�ץ�ϻҥץ�������λ�����뤿��λؼ�������ɬ�פ�����Ǥ��礦����Ƭ�˽񤤤��긵�Υ��ץ�ξ��⤽���Ǥ�����
��äȤ��ڤʹ�ޤ���ˡ�ϻҥץ������ؤΥ����ʥ������Ǥ�������ǰ�ʤ����� root �Υץ��������� root �Υץ�������Ŭ�ڤ˥����ʥ�����뤳�ȤϤǤ��ޤ���͡�����ʤ餳���Ǥϥץ��������̿��˲���Ȥ��Τ��褤������Ʊν�ȤΤ��Ȥ�Ǥ�����Ȥʤꡢ���Υ������Ǥμ��Ѿ�����������ݤ����Ǥⰷ���פ������Ǥ� UNIX �ɥᥤ�󥽥��åȤ�Ȥ��Τ��������������Ȥ����ä�����å¤ï¿½Þ¤ï¿½ï¿½ï¿½ï¿½ï¿½
���ץ꤫��ҥץ�����¦�˻ؼ������뤳�Ȥ���Ū�ʤΤǡ��ޤ��ҥץ�����¦�˥����е�ǽ�� C ����Ǽ����������˥��ץ�¦�˥��饤����ȵ�ǽ��������褦�Ȥ����Ȥ����� Java �Ǥ� UNIX �ɥᥤ�󥽥��åȤ����ݡ��Ȥ���Ƥ��ʤ����Ȥ��Τ�ޤ���������ϥץ�åȥե������¸���Ӥ�������߷פ˴�Ť���ΤǤ��礦��
��������Android SDK ���ȼ���ĥ�� UNIX �ɥᥤ�󥽥��åȤ��б����Ƥ��ޤ����ճ��Ȥ��Υ���ץ륳���ɤ���������ʤ��Τǥ��饤����ȤΥ�������򼨤��ޤ������㳰����������Ƥ��ޤ���
import android.net.LocalSocket; import android.net.LocalSocketAddress; �� public int SendUnixDomainSocketMessage(String sockpath, String msg) { LocalSocket lsock = new LocalSocket(); LocalSocketAddress endpoint = new LocalSocketAddress(sockpath, LocalSocketAddress.Namespace.FILESYSTEM); lsock.connect(endpoint); if (lsock != null && lsock.isConnected()) { OutputStream out = lsock.getOutputStream(); byte [] bytemsg = msg.getBytes(); out.write(bytemsg); out.flush(); lsock.shutdownOutput(); lsock.close(); } return 0; }
�� root �����ߴĶ���Ƚ��ˤĤ���
���Ȥ����줬 root ������ü���Ǥʤ���Хᥤ��ε�ǽ��̤����ʤ����ץ�Ǥ��ä��Ȥ��Ƥ⡢̵����ü���Ķ��Ǽ¹Ԥ����ݤ˰�̣�����Υ��顼��ȯ������Ȥ��ä����֤��򤱤�٤��Ǥ��礦��
�ޤ������ץ�ˤ�äƤ�ü���� root ������Ƥ��������ε�ǽ�����Ѳ�ǽ�Ȥ��������Ǥʤ���Ф��ε�ǽ��̵��������Ȥ��ä�������ɬ�פˤʤ���⤢��Ǥ��礦��
���Τ���ˤϸ��ߤ�ü���Ķ��� root �����ߤǤ��뤫�����Ǥʤ�����Ƚ���Ԥ�ɬ�פ�����ޤ��͡�
�ºݤˤϤ���Ϥʤ��ʤ����ο�������Ǥ�������˽�ʬ�ǤϤʤ���Τΰ�����μ������Τ�����ˡ�Ȥ��ơ���Superuser �����󥹥ȡ��뤵��Ƥ��뤫�ݤ���Ĵ�٤�פȤ�����������󤲤��ޤ������ꤵ�줿�ѥå�����̾���餽�Υ��ץ꤬���󥹥ȡ��뤺�ߤ������Ǥʤ����򿿵��ͤ��֤���������򼨤��ޤ���
Superuser �Υѥå�����̾�Ǥ��� "com.noshufou.android.su" ���Ϥ��Х��󥹥ȡ����Í̵���狼�롢�Ȥ����櫓�Ǥ��͡�
import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; �� public boolean AppIsInstalled(String PackageName) { PackageManager pm = mContext.getPackageManager(); try { ApplicationInfo ai = pm.getApplicationInfo(PackageName, 0); } catch (NameNotFoundException e) { return false; } return true; }
(tanabe)
�ȥ�å��Хå�URL
���ε����ؤΥ�����
�³��Τʤ�"su -v"�������¹Ԥ��ƳΤ����Ȥ��������⤽�����������Ȥ��Ƥ���ߤ����Ǥ���
�������ץ��������̿���Ȥ������ȥۥ磻�ȥꥹ�ȹ��ܤ��̤ˤʤäƤ��ޤ��ޤ��͡�
�������ܤλ��ȼԤ�ü���Ǥ�
"com.noshufou.android.su"���֥�å��ꥹ�Ȥ˺ܤäƤ���
�ѥå�����̾���Ѥ����н褷�Ƥ���桼���⤤�ޤ���
�־�˽�ʬ�ǤϤʤ���Τΰ�����μ������Τ���פȤ��ñ¤¤Ë¤Ê¤Ã¤Æ¤ï¿½ï¿½ï¿½Î¤ï¿½
��¸�Τ���Ȥϻפ��ޤ�����
���Ǥˤ������������⤢��Ȥ������Ȥǡ�
����Ŧ���̤�ͥåȾ�ε����ˤ� "su -v" ��Ȥ���ˡ�⻶�������ΤǤ�����-v ��������¸�Ǥ��뤳�Ȥ����ˤʤäƤ��ޤ������������� ChainsDD �Ǥ� su �Ǥ� stdout �˥С������������Ϥ��륪�ץ����Ȥ��Ƽ�������Ƥ��ޤ������⤷ Superuser �Ȥ�̵�ط����̤μ����� su �����֤���Ƥ������Ϥɤ��Ǥ��礦�����ξ�硢���ޥ�ɼ¹Ԥ��Ԥ��뤳�ȼ��Τ˥ꥹ�����ʤ��Ȥϸ����ڤ�ʤ��ΤǤ���͡�
�ʤ����Ƽ������ҤȤĵ󤲤�ȡ�Android SDK �˴ޤޤ�� Android ���ߥ�졼���� Linux �Ķ��ˤϺǽ餫�� su ���ޥ�ɤ����֤���Ƥ��ޤ��������� su �� -v �Ĥ��Ǽ¹Ԥ���� -v ��̵�뤵�쥪�ץ����ʤ��� su ��Ʊ����ư�Ȥʤ�ޤ���
�����ǡ����ε����Ǥ� ChainsDD �� su + Superuser �����֤��줿 root �����ߴĶ���ҤȤޤ��������åȤȤ������ꤷ�Ƥ��ꡢSuperuser �ȶ�Ĵ���뤿��ΥΥ��ϥ��ˤ⿨��Ƥ��ޤ������Τ��ᡢ��˰����Ȥϸ¤�ʤ����ޥ�ɤλ����Ȥ�����ˡ�ǤϤʤ���Superuser �Υ��󥹥ȡ���Í̵��Ƚ���Ԥ���ˡ�˸��ڤ��Ƥ���櫓�Ǥ�������ϡ��������ijμ¤˲�褹�뤳�Ȥ��ñ¤·¤ï¿½ï¿½ï¿½ï¿½ï¿½Î¤Ò¤È¤Ä¤ï¿½ï¿½È»×¤ï¿½ï¿½Þ¤ï¿½ï¿½ï¿½
���餤�����ޤ�����
�ꥹ���Ѥ��뤫��������Ȥ뤫�ޤ��ˡְ������ijμ¤˲�褹�뤳�Ȥ��񤷤�������Ǥ��͡�