android在JNI_OnLoad入口函數下斷點動態調試so庫

來源:互聯網
上載者:User

標籤:android   c   style   a   tar   http   

   一般來說,很多APK的校正代碼,都會在程式啟動並執行時候自動載入一些動態so庫,然後執行這些庫中的校正代碼。所以為了能夠通過程式的校正,我們必須在執行這些函數之前下斷點——理想的方法就是在JNI_OnLoad入口函數下斷點。

  在2.3.3模擬器中詳細步驟如下:

  ①在控制台輸入adb shell 進入手機,然後使用  am start -D -n 包名/類名,以等待調試的模式啟動APK應用;

    這裡需要說明的是 “包名/類名”的書寫方法:

# am start -n {包(package)名}/{包名}.{活動(activity)名稱}

程式的入口類可以從每個應用的AndroidManifest.xml的檔案中得到,以計算機(calculator)為例,它的

<manifest xmlns:android="http://schemas.android.com/apk/res/android" …

package="com.android.calculator2" …>…

由此計算機(calculator)的啟動方法為:# am start -n com.android.calculator2/com.android.calculator2.Calculator

對於HelloActivity這個樣本工程,AndroidManifest.xml如下所示:

 <manifest …

package="com.example.android.helloactivity" …>

由此它的啟動方法為:

# am start -n com.example.android.helloactivity/com.example.android.helloactivity.HelloActivity

 

  ②使用adb將IDA(我的是6.1)中的android_server 傳入手機的/data/local/tmp目錄中:

    adb push android_server  /data/local/tmp 

  #  再賦予許可權

   adb shell

   cd /data/local/tmp

   chmod 777 android_server

  #運行android_server

   ./android_server

  ③另起一個cmd視窗,使用命令 adb forward tcp:23946  tcp:23946 進行視窗轉寄

  ④啟動IDA主程式,點擊菜單 Debugger->Attach->Remote ArmLinux/Android debugger ,開啟偵錯工具對話方塊,在hostname一欄輸入localhost,

點擊ok,然後在IDA彈出的視窗中,選擇自己要附加的進程後點擊OK 即可。

  ⑤點擊菜單Debugger->Debugger Opitions 在彈出的Debugger setup視窗的Events中選擇 stop on thread start/exit 以及 stop on library load/unload,再點擊OK退出。通過此操作可以設定程式在建立新線程和載入so時自動中斷。

  ⑥通過DDMS擷取相應進程的連接埠號碼,然後使用jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8700(DDMS查詢到的連接埠號碼,一般都是8700);

  ⑦串連成功後,按F9後手機上的“waiting for debugger"提示會自動消失,這個時候應該已經斷在新線程,或者載入so處了。

  ⑧現在就可以在IDA中按下快速鍵CTRL + S來查看要調試的so是否已經載入了,如果沒有就F9,直到載入了為止;如果已經有了,就記下該so的start位置,然後另開一個ida分析.so庫,找到JNI_ONLOAD的位移地址,那麼該JNI_OnLoad函數在進程中的真真實位址就是so.start +  JNI_OnLoad_Offset。

    這裡需要說明的是:有可能在快速鍵CTRL + S跳出的視窗中有兩個同名的so,我們應當選擇許可權為RX的這個,RX一般是程式碼片段,RW一般是資料區段。

    得到真真實位址後,在IDA中按下快速鍵G跳轉到這個地址,然後按下快速鍵F2就完成在JNI_OnLoad函數入口處下斷點了。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.