古詩詞大全網 - 個性簽名 - Android逆向 ida動態調試問題

Android逆向 ida動態調試問題

先輸入”adb shell”,然後輸入”su root”獲取root權限。

接著輸入” chmod 777 /data/local/tmp/android_server” 給android_server加上相應的權限。

接著輸入” /data/local/tmp/android_server”啟動android_server。

如下圖所示:

輸入”adb forward tcp:23946 tcp:23946”進行tcp端口轉發

命令,啟動所要調試的Activity。

app會彈出”Waitting for debugger”對話框,如下圖所示:

點擊”Debug options”按鈕,在”Suspend on process entry point”, ”Suspend on thread start/exit”, ”Suspend on library load/unload” 等選項的前面打上勾,如下圖所示:

點擊”ok”後會在以下對話框的hostname中填上”localhost”

在彈出的”Choose process to attach to”窗口中找到”com.example.testjniso”進程,選中該進程,然後點擊”ok”按鈕。

其中可以看到com.example.testjniso進程的端口為8700。

如下圖所示:

在ida彈出的”Add map”窗口中,壹律點擊”Cancle”按鈕。

點擊ida中的暫停調試按鈕,暫停當前的調試,如下圖所示:

右擊libTestJniSo.so文件,在彈出的框中點擊”Jump to module base”,跳轉到libTestJniSo.so文件的起始地址。

按下Alt+T,彈出查找對話框中輸入” Java_com_example_testjniso_MainActivity_helloFromJni” 如下圖所示:

點擊”ok”按鈕後,即可跳轉到 Java_com_example_testjniso_MainActivity_helloFromJni 函數所在的起始地址。

然後在地址處下斷點:

再按F9重新開始調試,點擊app中的”點擊加載so文件”按鈕重新加載libTestJniSo.so,即可看到程序成功地停在了斷點處:

到此處就可以正常地調試so文件了。

Linker是什麽?

Linker就是/system/lib/linker,它是進程啟動時第壹個加載的模塊,它負責管理elf可執行文件以及各個so文件的加載執行,還參與了調試的壹些東西。通俗地說,它是壹個elf文件的解釋器。它可以加載elf可執行文件及so動態庫。

在android 5.0下,不能執行android_server是因為android5.0自帶的linker不支持加載非pie的elf文件,但如果自己實現壹個可以加載pie的linker,不就可以解決這個問題了嗎?對的,就是醬紫,補上自己的自定義linker在附件.

/thread-206084.htm