1、工具介紹
IDA pro: 反匯編神器,可靜態分析和動態調試。
模擬機或者真機:運行要調試的程序。
樣本:阿里安全挑戰賽第二題:http://pan.baidu.com/s/1eS9EXIM
2、前期准備
2.1 安裝樣本程序
adb install AliCrackme_2.apk
2.2 上傳android_server文件
adb push android_server /data/local/tmp/
adb shell chmod 777 /data/local/tmp/android_server
3、調試步驟
3.1 開啟android_server,監聽23946端口,與IDA pro通信
adb shell /data/local/tmp/android_server
3.2 設置本地端口轉發
adb forward tcp:23946 tcp:23946
3.3 以調試模式啟動程序
adb shell am start -D -n com.yaotong.crackme/.MainActivity
3.4 啟動IDA pro,點擊Debugger->attach->Remote ARMLinux/Android debugger,輸入localhost,選擇要調試的進程即可。
3.5 附加程序成功后,選擇,Debugger option,勾選
suspend on process entry point
suspend on thread start/exit
suspend on library load/unload
三項,然后按f9運行調試程序,此時IDA pro 掛起
3.6 使用jdb恢復程序執行
jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8700
3.7 此時IDA pro斷在linker中,此時module中並沒有libcrackme.so,說明licrackme.so還沒有加載到內容中,只需要跟幾步f8,在寄存器中看到libcrackme.so加載進來了,就可以在module中找到,有兩種情況
1、如果IDA Pro能夠解析成功,雙擊module中的libcrackme.so就可以看到它export的函數,就可以右鍵下斷點了
2、如果IDA Pro解析失敗,需要再開一個IDA,查找到要下斷的函數地址,加上libcrackme.so加載到內存的地址即可(在init_array下斷只能使用這種方法)。
3.8 IDA Pro按F9幾次,直到斷在自己下斷的地方即可
3、總結
本章內容和調試原生程序有重復,就省略了一些內容。
另外還有一種so函數是在用戶操作的時候才能觸發,只需要下好斷點,用戶進行觸發即可