將IDAPro根目錄下dbgsrv 目錄下的android_server(模擬器用android_x86_server,這里還是用真機好點)文件push 到安卓設備(比如/data/local/tmp/目錄)下,權限改為777,並運行
端口轉發adb forward tcp:23946 tcp:23946
安卓設備安裝並運行程序
IDA打開對應設備的so文件(arm, armv7, x86什么的)的Debugger -> Selecte Debugger -> Remote ARM Linux/Android Debugger -> OK, Debugger -> Process options -> HostName改成127.0.0.1,端口改成上面對應的 -> OK,Debugger -> Attach to process,從列表中選出對應的進程(沒有root權限的機器好像顯示不出來)
在對應代碼行下斷點,F9運行即可進行動態調試,右邊的寄存器面板可以直接修改寄存器的值
其他一些需要注意的:
- init_array先於JNI_OnLoad會在so加載的時候就開始執行
- 導出表沒有的函數有可能是在通過JNI_OnLoad動態注冊的, 查找動態注冊的方法是打開segment視圖, .data.rel.ro.local段中放置的即為動態注冊的函數(從上往下分別是函數名, 函數簽名, 函數地址)