STM32F1x 逆向工程初步
背景
終于難得閑暇和久違的激情 , 趕緊動手 , 這次也是初步的體驗(yàn) , 所以目的就是簡單的 dump 程序 , 和基本反匯編
工具集介紹
軟件部分
OpenOCD
Open On-Chip Debugger 著名的開源硬件調(diào)試器
支持多種的 調(diào)試器 (St-link)(jlink) 之類的符合JTAG標(biāo)準(zhǔn)的
支持多種 MPU 調(diào)試 只要是主流的都有(這次用到的 STM32F1x 默認(rèn)有了配置文件)http://openocd.zylin.com/
這里附上配置文件下載地址可以選擇不同的 mpuArm-none-edbi-*
ARM 裸機(jī)使用的工具鏈 (注意是 none 不是 linux)
這里主要提供調(diào)試 的 RunTimegdb
GDB, the GNU Project debugger 著名開源調(diào)試器
這里用于代替 OCD 的調(diào)試 , 畢竟還是專業(yè)許多
我們需要的功能雖然 OCD 就可以實(shí)現(xiàn) , 但是使用GDB 還是方便很多
硬件部分
由于也是初步嘗試 , 所以直接找了正點(diǎn)原子的 戰(zhàn)艦開發(fā)板
(我們要使用的就是 JTAG 調(diào)試口, 當(dāng)然開發(fā)板已經(jīng)接好了)
戰(zhàn)艦F1開發(fā)板 * 1
采用的 STM32F1X 系列的 MPU 這個型號很重要 , 這個就決定了我們要dump的地址
這樣才能 找到flash 和sram 等Jlink * 1
(當(dāng)然國產(chǎn)寨版)
這個就是淘寶貨 , 簡單暴力 , 久經(jīng)沙場 , 人手一個 , 縱橫江湖
動手
該接的先都接上 (電源 jlink blah..)
運(yùn)行OCD
openocd -f interface/jlink.cfg -f target/stm32f1x.cfg #注意不要反了這里的兩個 f 是指定的配置文件, 大眾器件 所以自帶的都有, 要是沒有的話就在上面給出的網(wǎng)址下載即可
(這個不是全路徑 是相對與 ocd 的安裝目錄 )
運(yùn)行之后 , 效果如圖
這樣顯示之后 , 說明調(diào)試器鏈接正常 , 且已經(jīng)進(jìn)入調(diào)試模式
OCD命令
OCD在 成功 介入JTAG之后 會返回一個 4444 的 tty控制臺 我們直接 telnet上去
telnet localhost 4444 #或者萬能 NC 也可以 #nc -t localhost 4444
這里就會返回一個 OCD 的調(diào)試會話
現(xiàn)在已經(jīng)控制CPU了(help 一大堆 不再贅述)
由于我們是要對固件進(jìn)行dump, 所以只要已經(jīng)運(yùn)行, 我們把內(nèi)存, 和flash 的數(shù)據(jù)抓出來就好了
GDB Attach
實(shí)際上直接使用OCD 可以達(dá)到效果, 不過使用GDB 輔助, 使得操作容易方便(可以TAB)
gdb #先運(yùn)行GDB (gdb) target remote localhost:3333
執(zhí)行完后 DGB attach 完成
(現(xiàn)在已經(jīng)拿到了 CPU 的shell 可以為所欲為了)
DUMP(重要)
終于到了最為核心的一步,就是firmware的dump操作
首先我們需要的最重要的 的東西就是內(nèi)存映射圖
這個就相當(dāng)于我們的 地圖一樣 告訴我們哪里有 什么數(shù)據(jù) , 哪里是什么東西
(這里就需要查看芯片手冊)
在手冊的第四節(jié) Memory Mapping中
(圖挺大 截取需要部分)
我們需要Dump的有
- Flash (裝代碼的你說呢)
- SRAM (運(yùn)行時候產(chǎn)生有趣的東西)
這樣我們查看映射圖可以得到信息
- flash的映射地址是 0x08000000 ~ 0x0807ffff (512KB)
- sram的映射地址是 0x20000000 ~ 0x2000ffff (64K)
所以下面我們在gdb 中 把他們dump出來就好
dump binary memory 32_sram.bin 0x20000000 0x2000ffff dump binary memory 32_flash.bin 0x08000000 0x0807ffff上述命令就是以二進(jìn)制形式 Dump 內(nèi)存 和 flash 的數(shù)據(jù)出來
查看文件 大小就是我們的存儲空間
到這里 本次 DUMP 完畢
后記
這里 只是逆向的初步,分析才是關(guān)鍵
得到 flash 和 sram 數(shù)據(jù)后 使用 IDA 進(jìn)行 操作 (這才是逆向)
總結(jié)
以上是生活随笔為你收集整理的STM32F1x 逆向工程初步的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 去掉控制台程序的黑框框
- 下一篇: gdb基本命令 与 技巧