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