Ida

非常にリモートのデバッグファイル内のIDAAndroid



Ida Android Remote Debugging Files



序文:

IDAは動的デバッグを使用するため、起動モードのデバッグをデバッグする方法は2つあります。デバッガーはstart jni_onloadをデバッグでき、コードinit_arrayはで、デバッグ特権をより早く取得できます。もう1つは、デバッガーをアタッチすることです。デバッガーをアタッチすることは、APPが既に稼働している場合の追加のデバッグであり、これら2つの方法をデバッグしてWindowsで起動し、追加のデバッグの概念は非常に似ています。次のことを実行する必要があります...



練習環境:Windows 10 + IDA Pro 7.0 + Nexus5( 4.4.4)

テキスト:



最初のデバッグ開始:

1.マナーランチャーをデバッグします(これは、ブレークダウン時にjni_onload、init_arrayの場合があります)

adb shell am start -D -n com.yaotong.crackme / .MainActivity



2.Android_serverを見つけるためのIDAdbgsrvディレクトリのメインディレクトリで、電話のデータ/ローカル/ tmp /ディレクトリにコピーされます

adb push(android_server directory)/ data / local / tmp

3. chmod実行権限を使用して、android_serverプログラムを変更し、以下を実行します。

adb shell chmod 755 / data / local / tmp / android_server

実行android_server

adbシェル

その

cd data / local / tmp

./android_server

4.新しいウィンドウのcmdを開きます ポート転送に転送プログラムを使用します。

adb forward tcp:23946 tcp:23946

5.5。 デバッグのオープンメソッド:

IDAを開き、メニュー[デバッガー]-> [接続]-> [リモートARMLinux / Androidデバッガー]を選択します

6.ホスト名は127.0.0.1またはlocahostに入力します(意味です)

ポートは自動的に23946を埋めます

7.APPの試運転を選択します

[OK]をクリックして、Enterデバッグインターフェイスを押します。今回は動的デバッグにはできないことに注意してください...

8. [イベント]ポップアップウィンドウで[デバッガ]-> [デバッガオプション]メニューをクリックし、[デバッガセットアップ]を選択します。 プロセスエントリを一時停止し、 スレッドの開始/終了時に一時停止し、 サスペンド ライブラリのロード/アンロード時に、[OK]をクリックして終了します。これにより、新しいスレッドを作成してロードするときに自動的に中断するようにプログラムを設定できます。

対応するプロセスによって取得されたDDMSポート番号を使用し、jdb -connect com.sun.jdi.SocketAttachを使用します:hostname = 127.0.0.1、port = XXXX(DDMSはポート番号を照会します。通常はddmsポート転送が8700の後です)

正常に実行された場合、アイコンのjdb -connectDDMSは緑色のバグに変わります...

接続されると、電話のIDAプレスF9「デバッガを待っています」プロンプトが自動的に消えます。今回は新しいスレッドで、またはロード時に壊れているはずです。

9.これで、IDAショートカットCTRL + Sを押して、デバッグ中かどうかを確認できます。F9でない場合は、ロードされているかどうかを確認します。既にロードされている場合は、ロードされるまで、その開始位置をメモしてから、別のida分析を開きます。したがって、ライブラリでJNI_ONLOADオフセットアドレスを見つけ、プロセス内のアドレスJNI_OnLoad実関数はso.start + JNI_OnLoad_Offsetです。

0x753030000 + 0x1B9C = 0x75304B9C(APPプロセスのJNI_OnLoadアドレス)

注意する必要があります:2つに同じ名前がある可能性があるため、ウィンドウの外にショートカットCTRL + Sを選択する必要があります。RXの権限を選択する必要があります。RXは通常スニペットであり、RWは通常データセグメントです。

10.実際のアドレスを指定するには、ショートカットキーを押してIDAのこのアドレスGにジャンプし、ブレークポイント関数エントリで完了したショートカットキーF2JNI_OnLoadを押します。ネイティブ関数がブレークポイントで直接機能し、ビューIDA静的関数アドレスで開かれ、動的ロードアップアドレスに変換された場合、Gへのブレークポイントのアドレスは次のようになります。

11.もう一度F9を押して、JNI_OnLoadを分解すると、一連の操作のデバッグが可能になります...


次に、2番目の追加のデバッグモードについて説明します。

1.android_serverをコピーします

#adb push ((のandroid_server目次) / data / local / tmp

2.実行権限を変更して実行する

#adb shell chmod 755 / data / local / tmp / android_server

#adbシェル

#その

#cdデータ/ローカル/ tmp

#。/ android_server

4.ポートフォワーディング

adb forward tcp:23946 tcp:23946

5.android_serverを起動します

ここで私はわずかな問題を見つけました、試運転の試運転後に終了します、android_serverは閉じていません、もう一度接続できる理由に立っていますが、ここで接続できません再びデバッグしています、android_serverを再起動する必要があります

次のように:(14061はpidです)

root @ xxxxx:/#ps | grep android_server

ルート1406113574 11180 9504 ffffffff 40183da0 S / data / local / tmp / android_server

root @ xxxxx:/#kill -s 9 14061

6 IDAを開き、メニュー[デバッガー]-> [接続]-> [リモートARMLinux / Androidデバッガー]を選択します

ホスト名は127.0.0.1またはlocahostに入力します(意味です)

ポートは自動的に23946を埋めます

デバッグするアプリを選択します

プロセスのアドレスを取得したら、ショートカットキーGを押してIDAのこのアドレスにジャンプし、ブレークポイント関数エントリで完了したショートカットキーF2JNI_OnLoadを押します。直接ブレークポイントの下にネイティブ関数が必要な場合は、静的ビューIDA関数アドレスで開き、動的にロードされるアドレスに変換すると、このアドレスへのGが機能しなくなります。

プログラムで指定された関数を実行すると、ブレークポイントがトリガーされ、デバッグ関数に到達できます。