使用IDA動態調試android so文件時的幾個坑

1 ddms

一定要打開ddms,否則調試端口是關閉的,就無法在程序剛開始的暫停了。我之前不知道要打開ddms才能用jdb,還以爲android系統或者sdk出問題了,重裝好幾次。汗。

我遇到好幾次打開ddms會報錯:Could not open Selected VM debug port (8700)

此時,要netstat -ano | find "8700"   查看佔用端口的程序,一般是adb.exe結束它。只有佔用端口8700的程序爲javaw時候才正常。

2 adb push androidserver /data/local/tmp/

adb shell
su
chmod 777 /data/local/tmp/androidserver
/data/local/tmp/androidserver

這裏我們把ida的androidserver push到手機上,並以root身份執行。

3 adb forward tcp:23946 tcp:23946

將ida的調試端口進行轉發,這樣pc端的ida才能連接手機。

4 adb shell am start -D -n com.yaotong.crackme/.MainActivity

這裏我們以debug模式啓動程序。程序會出現waiting for debugger的調試界面。

5 ida attach target app

這時候我們啓動ida並attach這個app的進程。

6 suspend on libary loading

我們在debugger setup裏勾選 suspend on library load。然後點擊繼續。

此時一定要在ida中點擊運行!!!!!

7 jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8700

用jdb將app恢復執行。

8 add breakpoint at JNI_OnLoad

隨後程序會在加載libcrackme.so這個so文件的時候停住。這時候ida會出現找不到文件的提示,不用管他,點取消即可。隨後就能在modules中看到libcrackme.so這個so文件了,我們點進去,然後在JNI_OnLoad處下個斷點,然後點擊執行,程序就進入了JNI_OnLoad()這個函數。

PS:有時候你明明在一個函數中卻無法F5,這時候你需要先按一下”p”鍵,程序會將這段代碼作爲函數分析,然後再按一下”F5”,你就能夠看到反彙編的函數了。


步驟引自:

http://drops.wooyun.org/tips/6840



附上一篇文章:

Android逆向之動態調試總結

http://www.52pojie.cn/thread-293648-1-1.html

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