stm32逆向与安全科普,bin文件逆向反汇编
來源:阿莫論壇,作者:ilovepp
微信公眾號:芯片之家(ID:chiphome-dy)
首先你要有一個bin文件(bin文件的獲取方法不在此展開介紹,今后有機會可以專門開一個貼聊一聊)。本次實驗用到的bin文件??stm32_xwrtos.bin.zip?(6 KB)?是用ST官方CMSIS和外設庫編譯的跑在stm32f103c8t6上的bin文件,比較具有代表性。
燒錄文件下載:
鏈接:https://pan.baidu.com/s/1YiMkyqbdPxGOI_vwGtOlJw ?提取碼:yi56
工具準備:
安裝開源跨平臺逆向神器r2 https://github.com/radareorg/radare2 ,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兄分享的精彩文章!
請戳右下角,給我一點在看!
總結
以上是生活随笔為你收集整理的stm32逆向与安全科普,bin文件逆向反汇编的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【任务脚本】2020双十一活动小结,京东
- 下一篇: 【PC工具】开源绿色windows右键管