1. 程式人生 > >使用IDA動態除錯android so檔案時的幾個坑

使用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