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