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