Android逆向 ida動(dòng)態(tài)調(diào)試問(wèn)題

(1)在IDA的安裝路徑中找到android_server文件。

image

(2)將android_server拷貝到手機(jī)的/data/local/tmp目錄下面。

image

(3) 將手機(jī)插上電腦,打開(kāi)命令提示符,

先輸入”adb shell”,然后輸入”su root”獲取root權(quán)限。

接著輸入” chmod 777 /data/local/tmp/android_server” 給android_server加上相應(yīng)的權(quán)限。

接著輸入” /data/local/tmp/android_server”啟動(dòng)android_server。

如下圖所示:

image

(4)重新打開(kāi)一個(gè)命令提示符,

輸入”adb forward tcp:23946 tcp:23946”進(jìn)行tcp端口轉(zhuǎn)發(fā)

image

(5)adb root模式下執(zhí)行” am start -D -n com.example.testjniso/com.example.testjniso.MainActivity”

命令,啟動(dòng)所要調(diào)試的Activity。

image

app會(huì)彈出”Waitting for debugger”對(duì)話框,如下圖所示:

image

(6)啟動(dòng)ida pro,點(diǎn)擊”Debugger - > Attach -> Remote ArmLinux/Androiddebugger”,會(huì)看到以下對(duì)話框:

image

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

image

點(diǎn)擊”ok”后會(huì)在以下對(duì)話框的hostname中填上”localhost”

image

在彈出的”Choose process to attach to”窗口中找到”com.example.testjniso”進(jìn)程,選中該進(jìn)程,然后點(diǎn)擊”ok”按鈕。

image

(7)打開(kāi)eclipse ddms在Devices窗口中可以看到以下內(nèi)容:

image

其中可以看到com.example.testjniso進(jìn)程的端口為8700。

(8)打開(kāi)命令提示符,輸入以下命令:jdb -connect com.sun.jdi.SocketAttach:port=8700,hostname=localhost

如下圖所示:

image

(9)點(diǎn)擊ida中的繼續(xù)執(zhí)行按鈕,下圖中的綠色三角形按鈕(或者按F9)。

image

在ida彈出的”Add map”窗口中,一律點(diǎn)擊”Cancle”按鈕。

image

(10)點(diǎn)擊app中的”點(diǎn)擊加載so文件”按鈕,確保so文件已經(jīng)加載到了手機(jī)內(nèi)存中。點(diǎn)擊ida中的”Debugger -> Debugger windows -> Module list ”。在”Modules”窗口中找到libTestJni.so

image

點(diǎn)擊ida中的暫停調(diào)試按鈕,暫停當(dāng)前的調(diào)試,如下圖所示:

image

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

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

image

點(diǎn)擊”ok”按鈕后,即可跳轉(zhuǎn)到 Java_com_example_testjniso_MainActivity_helloFromJni 函數(shù)所在的起始地址。

然后在地址處下斷點(diǎn):

image

再按F9重新開(kāi)始調(diào)試,點(diǎn)擊app中的”點(diǎn)擊加載so文件”按鈕重新加載libTestJniSo.so,即可看到程序成功地停在了斷點(diǎn)處:

image

到此處就可以正常地調(diào)試so文件了。

作者:會(huì)飛的大象_
鏈接:http://www.itdecent.cn/p/d2d28920940c
來(lái)源:簡(jiǎn)書(shū)
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。

在android 5.0下,不能執(zhí)行android_server

Linker是什么?
Linker就是/system/lib/linker,它是進(jìn)程啟動(dòng)時(shí)第一個(gè)加載的模塊,它負(fù)責(zé)管理elf可執(zhí)行文件以及各個(gè)so文件的加載執(zhí)行,還參與了調(diào)試的一些東西。通俗地說(shuō),它是一個(gè)elf文件的解釋器。它可以加載elf可執(zhí)行文件及so動(dòng)態(tài)庫(kù)。

在android 5.0下,不能執(zhí)行android_server是因?yàn)閍ndroid5.0自帶的linker不支持加載非pie的elf文件,但如果自己實(shí)現(xiàn)一個(gè)可以加載pie的linker,不就可以解決這個(gè)問(wèn)題了嗎?對(duì)的,就是醬紫,補(bǔ)上自己的自定義linker在附件.

https://bbs.pediy.com/thread-206084.htm

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容