root権奪取
いきなりだけど、もう役者はそろっているので、すぐに実行できる。
また、以下コマンドは、fi01さんの指南memo.txtよりコピペです。
もし記載することがfi01さんの思うところでなければすぐに削除しますので、
大変お手数ですがコメント頂けましたら幸いです。
では実行していく。
PCと端末を接続。
コマンドプロンプト(cmd)を起動。
以下コマンドは、順次cmdに打ち込んでいく。
fi01さんのmemo.txtも開いて見比べながら進めていくといいと思う。
busyboxを設置する。
※busyboxは何をするものなのかを調べるのも勉強の一つかと
cd C:\sh06e\sh06e_root_kit_v024\files
adb push busybox /data/local/tmp
adb shell chmod 755 /data/local/tmp/busybox
これでbusyboxの設置は完了。
cdはチェンジディレクトリ。自分の作業スペースを移動するということ。
adbのpushは文字通り端末にファイルを押し込むことw
端末の、/data/local/tmpってディレクトリにbusyboxってファイルを入れるって意味。
chmodは権限の変更。
AndroidはLinuxベースなので(のはずw)、権限を与えてやらないと動かない。
権限について自分で調べてみるといいと思う。
以下、細かい説明は省くので、順次cmdに打ち込んでいく。
(と言うか、知識無いので説明できない部分が多すぎるためw)
ここから、ちょっと複雑になっていくので気合を入れてw
(実際は****部分を自分のものに置き換えるだけなので簡単だけど、
詳しく説明を書こうとすると複雑に思えると言う罠w)
上のコマンドに続けて、
cd C:\sh06e\fake_SH-06E
adb install -r fake.apk
adb shell am start -D -a android.intent.action.MAIN -n com.mcafee.android.scanservice/android.app.Activity
adb jdwp
(adb shell am ~~の部分は、ブログのページの関係上、改行されちゃってるけど、
adb shell amから、.Activityまでが一行)
ここまで進むと、へんな数字が表示されると思う。
memo.txtでは、1個しか書かれていなかったが、自分は2個出てきた。なぜだ・・・w
その数字のうち、どれかが必要となる数字なので、とりあえずメモっておいたりすると吉。
(自分は4桁と5桁の数字が出てきたが、5桁のほうが目的の数字だった)
この数字は、先ほどadb installでインスコしたfake.apkのプロセスID。
自分の場合の2個出てきてしまってるのは、おかしいのだろうと思うけど^^;
まあ、こういうこともあるさ!w
メモったらまた続けて以下を打ち込んでいく。
下のコマンドの****は、さっきメモった数字を記入。
adb forward tcp:8600 jdwp:****
jdb -connect com.sun.jdi.SocketAttach:hostname=localhost,port=8600
threads
ここまで進むと、ズラッと文字列があわられるはず。
これはスレッドを表示している模様。
memo.txtと同じスレッド内容だったらOK。
もし自分のように複数プロセスIDが出てきてしまっていて、
とりあえず一つ****部分に入れてみて、出てきたスレッドが違う内容だったら、
記入したプロセスIDがほしいIDと違っていたと言うことなので、
もう一度adb forward ~~からやり直してみる(今度は別のプロセスIDで)。
以下のスレッド内容だったらOKということと、
また、赤字の部分の自分のcmdで表示されている文字列をメモしておく。
(<1>mainの部分の文字列)
(これはcmdに表示されているべき内容であって、打ち込むコマンドではないので注意)
> threads
グループsystem:
(java.lang.Thread)0xc141cc4fa8 <8> FinalizerWatchdogDaemonは条件を待機中です
(java.lang.Thread)0xc141cc4df8 <7> FinalizerDaemon は条件を待機中です
(java.lang.Thread)0xc141cc35b8 <6> ReferenceQueueDaemon は条件を待機中です
(java.lang.Thread)0xc141cc34c8 <5> Compiler は条件を待機中です
(java.lang.Thread)0xc141cc32e8 <3> Signal Catcher は条件を待機中です
(java.lang.Thread)0xc141cc3208 <2> GC は条件を待機中です
グループmain:
(java.lang.Thread)0xc1418bac10 <1> main は実行中です
(java.lang.Thread)0xc141cc82b0 <10> Binder_2 は実行中です
(java.lang.Thread)0xc141cc8110 <9> Binder_1 は実行中です
もう、何がなにやらわからないけど、、、w
とりあえず次に進んでみる。
また以下のコマンドを打ち込んでいく。
****部分は、上の赤字部分の自分のcmdで表示されている文字列を記入。
thread ****
すると、cmdの表示が、
<1> main[1]
となっているはず。
以下、<1> main[1]は打ち込む必要は無く、それに続いているコマンドのみ打ち込む。
次のコマンドを打ち込んでいく。
<1> main[1] stop in android.os.MessageQueue.next()
上にも書いたけど、
<1> main[1]は打ち込む必要は無い。stop部分から打ち込めばよい。
[1]とstopの間のスペースを忘れずに。
ここまで進んだら、cmdをもう一つ起動する。
そして、新しくcmdが立ち上がったら、そのcmdに次を打ち込む。
adb shell am start --activity-clear-task -a android.intent.action.MAIN -n com.mcafee.android.scanservice/android.app.Activity
長くて改行されちゃってるけど、一行。
そしてエンターを押すと、最初にコマンドを打っていたcmdが反応して、
なにやら動いたことがわかるはず。(※1)
そうなったら、再び
<1> main[1]が表示されているcmdに戻り、次のコマンドを打ち込んでみる。
<1> main[1] print java.lang.Runtime.getRuntime()
これも<1> main[1]部分は打ち込む必要なし。
すると、なにやら文字列が表示される。
java.lang.Runtime.getRuntime() = "java.lang.Runtime@****"
みたいに表示されたら成功。
(****部分は人それぞれ違う。)
もし、なにやらズラッと文字列が進み、さいごにnullって単語があったら失敗してる。
上の※1部分で、反応が見られない場合はnullになる。
(ブレークポイントで処理が中断されていないためだと思われ)
もしnullになってしまっていたら、
Ctrl+C(Ctrlとcの同時押し)とかで、<1> main[1]から抜けて、
adb shell pm uninstall com.mcafee.android.scanservice
で上でインスコしたfake.apkをアンインしてから、
一応SH-06E再起動した方が精神衛生的に安心かな?
それから、また
adb install -r fake.apk
からやり直し。
まあ、一度やった作業を繰り返すだけだから、こんどはサクサクいけるはず。
そんで、ちゃんと成功して、
java.lang.Runtime.getRuntime() = "java.lang.Runtime@****"
が表示されていたら、次のコマンドを打つ。
<1> main[1] print java.lang.Runtime.getRuntime().exec("chmod 666 /dev/msm_acdb")
これで、目的は達成されたはず。
一応、下のコマンドで/dev/msm_acdbの権限を確認する。
まだ<1> main[1]と表示されていると思うので、Ctrl+Cでスレッドを抜けて、
adb shell ls -l /dev/msm_acdb
これで権限が表示される。
ここで少しだけお勉強。
crw-rw-rw- system audio ~~~~
とか表示されていると思うけど、
crw-rw-rw- の rw-rw-rw- の部分が権限を表示している部分で、
例えば、全ての権限が許可されている場合、
rwxrwxrwxとなる。
よく見ると、rwxのくくりで、3つ並んでいるのがわかる。
左から順番に、所有者の権限、所属グループの権限、そのたユーザーの権限に分かれていて、
rは読み込み、wは書き込み、xは実行権となっている。
数字で表すことが出来て、rは4、wは2、xは1となり、
rwxだったら7(数字を足す)、rw-だったら6、r--だったら4と言うように表すことが出来る。
なので、rw-rw-rwは、666と言う数字で表せる。
よく見かける、
chmod 755 ~~~
ってのは、所有者に全権限(rwx)、所属グループに読み込みと実行(r-x)、そのたユーザーに読み込みと実行(r-x)を与えなさいと言うコマンド。
所有者、所属グループはどこでわかるかと言うと、
crw-rw-rw- system audio
の system audio の部分。
所有者はsystemで、グループはaudioと言うことだったはずw
とうぜん、権限変更は、所有者以上の権限をすでに持っていないと出来ない。
root奪取前の状態はその他ユーザーに属するわけで、権限が例えばrwxrwx---(770)の場合は全く手のつけられないフォルダやファイルと言うこと。
なので、神がsystem権限を奪う方法を見つけてくれて、その他一般ユーザーにご教授くださっているというわけなのです。
crw-rw-rw- system audio
を見るとわかるように、所有者がsystemなので、system権限を自分が持てば、そのファイルは自分が好きなように権限を変えられるってわけです。
一番上で、busyboxに権限755を与えているけど(chmod 755)これは端末にコピーしたbusyboxに、実行権(x)を与えている。
実際に adb shell ls -l /data/local/tmp/busyboxを打ってみると、
-rwxr-xr-x shell shell ~~~ busybox
見たいに出てくるはず。
xの実行権がちゃんとついていることがわかる。
ls コマンドは、よく使うので調べてみるといいと思う。
ちょっと長くなりすぎたけど、
以上で
/deb/msm_acdb
の権限は666に出来たので、ワンクリツールが使えるようになるってこと。
以下ワンクリツールを使っていくときの分岐(ユーザーが選択)でどちらを選択していくかを簡単に。
上で権限を取得後、ワンクリツールを立ち上げる。
sh06e_root_v024.batをダブルクリックで起動
コマンドプロンプトが起動する。
↓
07ですか?それ以外ですか?と聞かれるので、それ以外を選択。
(07だけど、07以外を選択してやる)
↓
↓エンターで進めていく
↓
sysetmイメージを作りますか?と聞かれるので、作るほうを選択。
↓
↓進めて行き、青空イメージのところでVpnFakerをインスコ
↓
再起動で終了。
再起動後、アプリ一覧に、SuperSUってアプリと、Vpndialogってアプリが表示されてればちゃんとroot取得できてるはず。
SuperSU起動して、suバイナリの更新をすませ、あとはrootedアプリを使ったり自分でゴニョゴニョすればいい。
ワンクリツールの使い方の部分は、相当はしょってるけど、
これが使えない人はいないはずなので、じゅうぶんかな?と思ってますw
誤字脱字、そもそも間違っている部分もあるかもしれません。
最初に書きましたが、自己責任で行いましょう。
長々と、無駄なこともいっぱい書いたけど、
自分としては精一杯わかりやすく書いたつもり。
説明が下手なので、わかりにくいって思う人がほとんどだと思うけど、
「こんなんじゃわかるか!ボケ!!!」
みたいな突っ込みはなしの方向でお願いしますw
ではでは、楽しいrooted生活を^^
我来搬运