轉載:芯片之家 來源 |?阿莫論壇,分享分析作者 | ilovepp
首先你要有一個bin文件(bin文件的個通過獲取方法不在此展開介紹,今后有機會可以專門開一個貼聊一聊)。代碼的工本次實驗用到的文件bin文件 stm32_xwrtos.bin.zip?(6 KB) 是用ST官方CMSIS和外設庫編譯的跑在stm32f103c8t6上的bin文件,比較具有代表性。分享分析
燒錄文件下載
工具準備:
安裝開源跨平臺逆向神器r2:
r2可運行在Windows、個通過Linux、代碼的工Mac等所有主流操作系統上(r2有多牛逼不在此展開介紹,文件今后有機會可以專門開一個貼聊一聊)。分享分析
實驗步驟:
1)輸入r2 -a arm -b 16 -m 0x08000000 stm32_xwrtos.bin 進入r2的個通過控制臺后,輸入e asm.cpu=cortex。代碼的工這一步是告訴r2以0x08000000為基址加載stm32_xwrtos.bin文件,并設置指令集為cortex系列的thumb。
2)輸入aaaa,運行自動化分析。
3)輸入pxw 268 @0x08000000 以小端四字節形式打印從0x08000000開始的268(268對應中斷向量表大小)個字節,同時打開ST官方的啟動文件startup_stm32f10x_md.s并找到.isr_vector段進行對照。
4)接著上一步,輸入fs notes,創建并切換到一個名為notes(可以是任意其他名字)的符號記事本;按照f flag=address的形式,對照.isr_vector段,向符號記事本中錄入感興趣的符號地址對應關系。注意如果address是函數地址則需要減1(因為thumb指令的要求,具體原因此處不展開);最后輸入af @flag形式的命令強制進行函數分析。
5) 輸入pdf @Reset_Handler,對Reset_Handler函數進行反匯編
輸入 VV 切換到流程圖視圖
通過閱讀匯編代碼,可以得到以下信息:
1.??data段的地址區間為0x20000000-0x20000028 bss段的地址區間為0x20000028-0x2000043C
2.??Reset_Handler用0x08002cbc開始的0x28字節初始化data段,用0填充bss段
3. 調用fcn.08001cc8函數 4. 調用fcn.08001734函數6)輸入pdf @fcn.08001cc8進行反匯編
發現對外設寄存器地址0x40021000的引用
通過查詢數據手冊,可判斷fcn.08001cc8函數應為系統初始化化函數SystemInit(),它初始化了時鐘。
7)根據經驗判斷fcn.0800173函數即為main函數
本篇主要作用是帶大家熟悉和習慣r2的基本使用,以及對逆向有個感性認識。后面有機會再給大家講述在逆向的基礎上介紹stm32上的棧溢出漏洞的挖掘與利用。
再次感謝ilovepp兄分享的精彩文章!
------------ END------------長按前往圖中包含的公眾號關注
免責聲明:本文內容由21ic獲得授權后發布,版權歸原作者所有,本平臺僅提供信息存儲服務。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯系我們,謝謝!