ida导入jni头文件_IDA动态调试无法导入JNI文件的解决办法
前言:學習過程中遇到了,特此記錄一下。
樣本app鏈接在這里:
https://pan.baidu.com/s/1pVLBBuBKRzDzHlBClrBA2A?提取碼:?9tz8
它是 2015年阿里的一個反調試app,我是參考這篇文章來過反調試的:
https://blog.csdn.net/Viewz/article/details/97757862
這不是重點,樣本里的app是修改過后的,原始的可以在文章中獲取。
過反調試后就很簡單了,輸入密碼,與它內置的密碼一致就成功了。
靜態分析如果不提前知道密碼的話,會感覺毛都沒有,只有動態調試了。
怎么開啟動態調試請參考上一篇文章,我這就直接來到這里了。
雙擊進入這個函數,并按下F5:
然后 按下 CTRL + F9,導入JNI.h文件:
提示這個錯誤,那就按照它提示的來:
彈出框,繼續進行選擇,點擊OK即可:
這時,我們再次 按下 CTRL + F9,導入JNI.h文件:
然后,就報了20個錯誤,這種錯誤,小白的我也不知道怎么解決啊。
這時的我有三種選擇,
一. 更新IDA Pro版本,我現在的版本是 6.8的,說不定換成 IDA Pro 7.0就不會報錯了。
二. 谷歌該問題或者請教大佬,遇到報錯改怎么解決,不過可能找不到答案或者大佬沒遇見過,就尷尬了。
三. 自己摸索解決。搗鼓幾下,說不定就不報錯了。
我這里選擇了第三種方法,竟然OK了,操作如下:
1.選擇 View --> Open subviews --> Type libraries
2.彈出 warning,點擊OK即可。
3.單擊右鍵,選擇 Load type library
4.選擇第一個,單擊OK:
5.再次 按下 CTRL + F9,導入JNI.h文件:
發現竟然成功了。
切換偽C代碼,如圖分析:
圖中紅色框上面是干嘛的我不清楚,因為它沒有返回或者exit程序的代碼,可以不用去關心吧。將鼠標移動并點擊 while,并按下 Tab鍵,來到匯編代碼處:
設置斷點,并按下F9,手機app輸入 1234567890:
點擊輸入密碼后,發現IDA停在了斷點處:
因為下面有個cmp指令,所以看看 R2寄存器的值,它是一個內存地址,在內存中查看它的值:
是這樣的一串字符串,再看看R0寄存器的值所在地址的值:
這里就是剛才輸入的 “1234567890”了。這就比較清楚了,通過輸入的字符串與這個內置的字符串進行比較,相同就表示成功了,不同則失敗。
它這里沒有調用 庫函數 strcmp,而是通過單個字符的比較判斷,因此沒法爆破(當然也可以修改返回值進行爆破):
按下F8兩次后,R1和R3的內容:
"1"字符的ASCI值是 0x31,"a"字符的ASCI值是 0x61,確實是單個字符全部進行比較的。按下Tab鍵,可以看到 偽C代碼窗口:
動態調試時,可以通過修改 R1的值與R3一致,可以看到成功后的窗口:
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的ida导入jni头文件_IDA动态调试无法导入JNI文件的解决办法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java五子棋实训训心得,java五子棋
- 下一篇: java csv下载_java 生成cs