在上篇文章中胰伍,我簡單介紹了使用IDA Pro靜態(tài)分析so文件鸿染。今天,我將介紹一下如何使用IDA Pro動(dòng)態(tài)調(diào)試so文件麻裳。
本文的使用的IDA Pro版本為6.5版本口蝠,下面介紹一下動(dòng)態(tài)調(diào)試so文件的流程:
(1)在IDA的安裝路徑中找到android_server文件。
(2)將android_server拷貝到手機(jī)的/data/local/tmp目錄下面津坑。
(3) 將手機(jī)插上電腦妙蔗,打開命令提示符,
先輸入”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。
如下圖所示:
(4)重新打開一個(gè)命令提示符穆役,
輸入”adb forward tcp:23946 tcp:23946”進(jìn)行tcp端口轉(zhuǎn)發(fā)
(5)adb root模式下執(zhí)行” am start -D -n com.example.testjniso/com.example.testjniso.MainActivity”
命令寸五,啟動(dòng)所要調(diào)試的Activity。
app會(huì)彈出”Waitting for debugger”對話框,如下圖所示:
(6)啟動(dòng)ida pro耿币,點(diǎn)擊”Debugger - > Attach -> Remote ArmLinux/Androiddebugger”梳杏,會(huì)看到以下對話框:
點(diǎn)擊”Debug options”按鈕,在”Suspend on process entry point”, ”Suspend on thread start/exit”, ”Suspend on library load/unload” 等選項(xiàng)的前面打上勾,如下圖所示:
點(diǎn)擊”ok”后會(huì)在以下對話框的hostname中填上”localhost”
在彈出的”Choose process to attach to”窗口中找到”com.example.testjniso”進(jìn)程淹接,選中該進(jìn)程十性,然后點(diǎn)擊”ok”按鈕。
(7)打開eclipse ddms在Devices窗口中可以看到以下內(nèi)容:
其中可以看到com.example.testjniso進(jìn)程的端口為8700塑悼。
(8)打開命令提示符劲适,輸入以下命令:jdb -connect com.sun.jdi.SocketAttach:port=8700,hostname=localhost
如下圖所示:
(9)點(diǎn)擊ida中的繼續(xù)執(zhí)行按鈕,下圖中的綠色三角形按鈕(或者按F9)厢蒜。
在ida彈出的”Add map”窗口中霞势,一律點(diǎn)擊”Cancle”按鈕。
(10)點(diǎn)擊app中的”點(diǎn)擊加載so文件”按鈕郭怪,確保so文件已經(jīng)加載到了手機(jī)內(nèi)存中支示。點(diǎn)擊ida中的”Debugger -> Debugger windows -> Module list ”。在”Modules”窗口中找到libTestJni.so
點(diǎn)擊ida中的暫停調(diào)試按鈕鄙才,暫停當(dāng)前的調(diào)試颂鸿,如下圖所示:
右擊libTestJniSo.so文件,在彈出的框中點(diǎn)擊”Jump to module base”,跳轉(zhuǎn)到libTestJniSo.so文件的起始地址攒庵。
按下Alt+T嘴纺,彈出查找對話框中輸入” Java_com_example_testjniso_MainActivity_helloFromJni”?如下圖所示:
點(diǎn)擊”ok”按鈕后,即可跳轉(zhuǎn)到?Java_com_example_testjniso_MainActivity_helloFromJni?函數(shù)所在的起始地址浓冒。
然后在地址處下斷點(diǎn):
再按F9重新開始調(diào)試栽渴,點(diǎn)擊app中的”點(diǎn)擊加載so文件”按鈕重新加載libTestJniSo.so,即可看到程序成功地停在了斷點(diǎn)處:
到此處就可以正常地調(diào)試so文件了稳懒。