動態調試SO之在.init_array段下斷點
圖/文 0n1y3nd前言
由前面的分析可以知道,so被加載之後最開始執行的是init_array段的代碼。然後纔會去執行jni_onload那麼,在.init_array處斷下來便是很有必要的
前期準備
android系統中位於/system/bin/的linkerida 6.4
android_server
mytestcm.apk
準備工作做好之後,下面正式開始調試
0×1
push android_server到tmp目錄下,給權限,然後以root身份執行。adb forward端口轉發
IDA attach對應進程
0×2
新開一個IDA,載入linkerShift+F12打開字符串窗口,搜索字符串:dlopen
動態調試的IDA中,G跳轉到:400D3000+F30=400D3F30處,下好斷點
來到動態調試的ida,G跳轉到:400D3000+2720=400D5720處,下斷點
0×3
按F9運行然後打開Eclipse或者ddms
執行 jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8700
程序就會斷在第一個斷點處,F9幾次就段在blx R4處
F7跟進就來到init段代碼處: