用IDA PRO + QEMU動(dòng)態(tài)調(diào)試STM32固件
網(wǎng)站:bbs.21ic.com
知己知彼百戰(zhàn)不殆,了解下敵人都是什么套路,有助于更好的保護(hù)自己的程序。
閑著沒(méi)事調(diào)試下老毛子孔雀石SDR的固件,由于我沒(méi)硬件只能用QEMU
作者產(chǎn)品資料網(wǎng)盤(pán)
https://yadi.sk/d/4ZgsrswxYClG1Q
安裝支持STM32的 xPack QEMU Arm
安裝方法如下,有詳細(xì)說(shuō)明不再重復(fù)。
https://xpack.github.io/qemu-arm/
打開(kāi)IDA 的debugger菜單設(shè)置一下調(diào)試
qemu 運(yùn)行參數(shù)
設(shè)置本機(jī)IP
運(yùn)行可以連接了
通過(guò)比較新版和舊版固件很容易就找到了密碼表地址0x80392d8
找哪個(gè)程序調(diào)用了這個(gè)表,發(fā)現(xiàn)是一個(gè)校驗(yàn)程序
向上找哪里調(diào)用的
我們又找到了讀STM32ID的程序,通過(guò)分析上面兩個(gè)是生成校驗(yàn)數(shù)組的。
往下看sub_800DB54是原來(lái)的ID號(hào)生成密碼的程序
下面一些是對(duì)生成密碼簡(jiǎn)單移位的程序,但是有上百行,人工看比較麻煩,所以運(yùn)行動(dòng)態(tài)調(diào)試
在0x800e270設(shè)個(gè)斷點(diǎn)
運(yùn)行以前的算號(hào)器生成本機(jī)密碼
把IDA動(dòng)態(tài)調(diào)試寄存器R6和R7改成 0XA52FF277和0XBC8FB975
0X800E3CC設(shè)個(gè)斷點(diǎn),運(yùn)行看結(jié)果
運(yùn)行
結(jié)果R0和R1 0x75b98fbc 0x77f22fa5
在下面函數(shù)里面設(shè)置個(gè)斷點(diǎn)接著運(yùn)行
這個(gè)不用調(diào)試肉眼就可以看出來(lái),通過(guò)和密碼表比較,密碼表里面有就向R6+0x814地址寫(xiě)0XFA,沒(méi)有就寫(xiě)0X58。
到這里已經(jīng)知道怎么和密碼表比較了
看固件BIN文件時(shí)候看到結(jié)尾有數(shù)據(jù),這很不正常,看哪里調(diào)用看到兩個(gè)對(duì)整個(gè)FLASH的校驗(yàn)程序
由于QEMU不支持STM32H7所以沒(méi)辦法運(yùn)行整個(gè)程序,要是有硬件插上JILINK很容易就能知道哪個(gè)程序校驗(yàn)整個(gè)固件,靜態(tài)不容易看到哪里進(jìn)行校驗(yàn)。
人家作者開(kāi)發(fā)的東西,有人**了還賣和作者原價(jià)騙人
要是有硬件我一定研究如何去掉保護(hù)免費(fèi)放出固件,讓搞**的沒(méi)把法賺錢(qián),但是沒(méi)硬件就沒(méi)辦法了。
由于我沒(méi)硬件沒(méi)辦法驗(yàn)證和調(diào)試,隨便改改不知道能不能去掉保護(hù)。
0800DED4 由原來(lái)str r4, [r6, # 0x814]改成str r7, [r6, # 0x814]0800DD66由原來(lái)str r0, [r3]改成str r2, [r3]0800DC90和0800DC92由原來(lái)ldr r2, [r4]cmp r2, r3改成str r3, [r4]cmp r3, r3
免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場(chǎng),如有問(wèn)題,請(qǐng)聯(lián)系我們,謝謝!