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