日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

STM32F1x 逆向工程初步

發(fā)布時間:2024/4/19 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 STM32F1x 逆向工程初步 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

背景

終于難得閑暇和久違的激情 , 趕緊動手 , 這次也是初步的體驗(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/
    這里附上配置文件下載地址可以選擇不同的 mpu

  • Arm-none-edbi-*
    ARM 裸機(jī)使用的工具鏈 (注意是 none 不是 linux)
    這里主要提供調(diào)試 的 RunTime

  • gdb
    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)沙場 , 人手一個 , 縱橫江湖

動手

運(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ù)抓出來就好了

halt #執(zhí)行halt語句 (CPU 暫停)

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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。