讓你不加密!來,帶你複製別人的STM32程序自己用

沃愛單片機 發佈 2024-03-11T02:18:49.215775+00:00

那行,把你的板子給我,不用你的源碼,跟你把波特率改了!這裡以stm32單片機進行演示,如果MCU沒有做flash讀取或者熔斷保護,則可以通過jlink等燒寫工具直接讀取其Flash上的固件,操作如下:01、打開J-Flash軟體並選擇創建一個新的工程,並點擊Start J-Flash :

本文主要跟大家分享一個簡單逆向stm32固件程序的實例,為了讓大家在一款成熟的產品中去考慮加密這一塊的技術,不然分分鐘被別人copy!

1、情景再現

那行,把你的板子給我,不用你的源碼,跟你把波特率改了!

1、直接讀取固件

這裡以stm32單片機進行演示,如果MCU沒有做Flash讀取或者熔斷保護,則可以通過jlink等燒寫工具直接讀取其Flash上的固件,操作如下:

01、打開J-Flash軟體並選擇創建一個新的工程,並點擊Start J-Flash :


02、選擇所對應的晶片類型,並點擊連接晶片,並顯示連接成功。

03、通過下面的選項路徑,即可讀取所選Flash區域或者所有Flash區域(Entire Chip)。

04、這樣便獲得了Flash上所有的固件數據,也就是我們的bin文件內容,當然這也就是逆向的最重要素材。

05、最後把數據保存為bin文件、hex文件等等即可,當然當你換一塊晶片然後燒錄該程序也是可以運行的。

2、逆向固件程序


一談到逆向,估計各位小夥伴會聯想到各種黑客、破譯、非法等等情景,然而並非如此,世間萬事萬物都是雙刃的。

就像開一把鎖,當你學習了各種破解鎖的技巧,如果使用這些技巧來盜竊,當然屬於違法行為;但是當用來幫助破解犯罪現場,收集證據等等那這就大有作為的,當然本文旨在學習。

目前嵌入式行業比較流行的逆向工程技術有PCB抄板晶片解密

  • PCB抄板一般都會使用到相關的工具和電氣測試等等,最終獲得原電路板的原理圖、BOM等等實現PCB的完整複製。
  • 晶片解密一般是通過相應的技術把執行程序(一般為機器碼)反彙編成彙編代碼,還可以更進一步反編譯成高級語言偽代碼(比如C代碼),便於逆向人員理解和修改。
  • 1、前期準備

    在上一小節中我們輕鬆獲得了晶片中的bin文件等,當然如果晶片有加密處理過,可能就需要更加先進的技術獲取晶片的內部數據,這裡就暫時不展開了,

    今天我們主要是把前面獲取的bin文件逆向一下,並把原來的波特率9600修改為57600,原來9600效果如下:

    2、逆向過程

    逆向技術發展其實挺長一段時間了,當然為了方便各逆向愛好者的使用也誕生了非常多的開發工具,其中IDA Pro算是非常流行的逆向工具,所以這裡就選用該工具進行逆向。

    01

    首先安裝IDA Pro逆向工具,網上搜索一下會有各種資源,然後點擊安裝,一路next基本上可以安裝好,安裝好以後便出現如下兩個頭像。

    這裡選擇32bit版本,並創建工程:

    02

    這裡選擇上小節導出的bin文件,由於所使用的晶片為cortex-M3內核,這裡選擇ARM Little-endian模式:

    03、設置內核架構,這裡可以通過查閱對應的內核介紹進行選擇。

    04、然後設置bin文件對應的地址映射,由於bin文件是通過整片全部讀出,所以這裡與該晶片的Flash起始地址和大小是一致的。

    05、很輕鬆便進入了IDA的反彙編代碼,這樣就完成了從機器碼到彙編碼的逆向過程。

    同時你還可以通過IDA的圖形調用試圖來看到各種調用關係等。

    06、然後我們隨便找一個函數並使用F5,生成C偽代碼。

    然後你再看看C源程序,驚人的相似!!

    07

    假如閒9600的波特率太慢,卻又苦於沒有原始碼修改燒錄,於是便可以逆向修改bin文件進行燒錄。

    當然如果你對機器碼和彙編非常的熟悉,只需要找到對應的機器碼進行修改即可,然而找到對應的機器碼還是通過IDA工具來得比較直接且方便。

    同時可以在反彙編view中使用C和D來進行機器碼和彙編的轉化:

    如下通過使用D可以把彙編轉化為機器碼:

    這裡按下D,即可轉化為如下機器碼 :

    同時切到Hex視圖,也可找到對應的機器碼:

    08、以上便找到了修改的位置,僅僅只需要把該機器碼中的9600修改為57600即可,我們可以通過查找內核的指令集進行機器碼的編寫,並進行如下更改:

    同樣,其對應的彙編視圖也發生了如下變化:

    然後點擊如下圖所示菜單選項,從而把相應的修改更新到對應的bin文件中。

    09

    最後,當然是把修改以後的bin文件燒錄到單片機中進行測試,測試結果如下圖所示 :

    波特率成功被修改為57600,整個過程到此結束,enjoy!!

    2、結束語

    本文主要跟大家介紹了如何逆向一個MCU程序,當然還有很多高級的技巧有待挖掘,特別是IDA工具更是一款神器!上面bug菌也只是拋磚引玉,有感興趣的小夥伴可以多多交流!

    關鍵字: