動態調試SO之在.init_array段下斷點

動態調試SO之在.init_array段下斷點

                                                                                                                                                                                                       圖/文 0n1y3nd

前言

       由前面的分析可以知道,so被加載之後最開始執行的是init_array段的代碼。然後纔會去執行jni_onload
       那麼,在.init_array處斷下來便是很有必要的

前期準備

      android系統中位於/system/bin/的linker
      ida 6.4
      android_server
      mytestcm.apk

準備工作做好之後,下面正式開始調試

0×1

push android_server到tmp目錄下,給權限,然後以root身份執行。
adb forward端口轉發
IDA attach對應進程

0×2

新開一個IDA,載入linker
Shift+F12打開字符串窗口,搜索字符串:dlopen


定位到:



找到dlopen函數的偏移0xF30
動態調試的IDA中,G跳轉到:400D3000+F30=400D3F30處,下好斷點


搜索字符串:calling


定位到:


得到偏移:0×2720
來到動態調試的ida,G跳轉到:400D3000+2720=400D5720處,下斷點


往下:


400D574C   BLX   R4處就是調用init段代碼的地方!直接跟進就能看到

0×3

按F9運行
然後打開Eclipse或者ddms
執行 jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8700
程序就會斷在第一個斷點處,F9幾次就段在blx R4處
F7跟進就來到init段代碼處:


發佈了28 篇原創文章 · 獲贊 9 · 訪問量 18萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章