tl;dr
- ホストPCのポートにNoxPlayer上のAndroidのadb_serverがforwardされており、adb connectで接続できる。
- lldb/gdbするにはadbでport forwardする。
- Root化起動を有効にすれば手軽に任意のプロセスにattachできる
モチベ
NoxPlayerはroot化起動が簡単に出来るのでReverseEngineeringの道具にできるのではないか。
rootでlldb-serverを起動したら任意のアプリ/プロセスをデバッグできるのでは→できた
手順
Noxのセットアップ
adbのセットアップ
NoxPlayerのadbポート番号を確認する。
一台目が62001でそれ以降は62025から連番でふるらしい
https://news.mynavi.jp/article/androidnow-148/
adbコマンドで使うポート番号ですが、筆者の環境で調べたところ、インスタンス「Nox」は62001、インスタンス「Nox_1」が62025、「Nox_2」が62026となっていて、ポート番号62025から順に割り当てられるようです。
adb connectする
$ adb connect localhost:62025
$ adb devices
で表示されていればOK
lldbのセットアップ
ホストPCにlldbを入れておく。
WSL(Bash for Windows)に入れるのが楽ちん。
https://apt.llvm.org/
$ sudo apt-get install lldb-12
android用lldb-serverを入手する
https://developer.android.com/studio/?hl=ja#downloads
から android-studio-ide-XXX.XXXXXXX-windows.zip
をDLする。
インストールする必要はない。
lldb-serverを抽出する
zipから android-studio/bin/lldb/android/armeabi/lldb-server
を展開して保存しておく
NoxPlayerのAndroid5は32bitARMなのでそれに合わせたlldb-serverを使う。
ホストPCからlldb-serverをNoxPlayer向けにadb pushする
$ adb push <保存したパス>\lldb-server /data/local/tmp
パーミッションを実行可能にしておく。
$ adb shell chmod 777 /data/local/tmp/lldb-server
注意: NoxPlayerのadb shellは初めからrootなので注意すること
NoxPlayer上でlldb-serverを起動して接続する
adb shell "cd /data/local/tmp && ./lldb-server platform --listen *:5039"
サーバー起動してポート5039で待ち受け
ターミナルは開いたままにしておく。
ホストPCでポートフォワーディングの設定をしておく
$ adb forward tcp:1234 tcp:1234
でホストの5039をNoxPlayer上の5039にフォワードする
lldbを使ってデバッグする
ホストPCでlldbを起動してconnect
$ lldb
(lldb) platform select remote-android
(lldb) platform connect connect://localhost:5039
lldbで遊ぶ
(lldb) platform process list
psとは異なり、アプリ名が解決されないのでみにくい。
(lldb) attach 4795
ブラウザ()にattachしてみる。
rootでなければdebuggableじゃないアプリはattachできないはず。
attachできればあとは何でもできる
(lldb) thread list
参考URL