1
直接讀取固件
這里以stm32單片機進行演示,如果MCU沒有做flash讀取或者熔斷保護,則可以通過jlink等燒寫工具直接讀取其Flash上的固件,操作如下:
01
打開J-Flash軟件并選擇創(chuàng)建一個新的工程,并點擊Start J-Flash:
02
選擇所對應的芯片類型,并點擊連接芯片,并顯示連接成功。
03
通過下面的選項路徑,即可讀取所選Flash區(qū)域或者所有Flash區(qū)域(Entire Chip)。
04
這樣便獲得了Flash上所有的固件數(shù)據(jù),也就是我們的bin文件內容,當然這也就是逆向的最重要素材。
05
最后把數(shù)據(jù)保存為bin文件、hex文件等等即可,當然當你換一塊芯片然后燒錄該程序也是可以運行的。
2
逆向固件程序
一談到逆向,估計各位小伙伴會聯(lián)想到各種黑客、破譯、非法等等情景,然而并非如此,世間萬事萬物都是雙刃的。
就像開一把鎖,當你學習了各種破解鎖的技巧,如果使用這些技巧來盜竊,當然屬于違法行為;但是當用來幫助破解犯罪現(xiàn)場,收集證據(jù)等等那這就大有作為的,當然本文旨在學習。
目前嵌入式行業(yè)比較流行的逆向工程技術有PCB抄板和芯片解密
PCB抄板一般都會使用到相關的工具和電氣測試等等,最終獲得原電路板的原理圖、BOM等等實現(xiàn)PCB的完整復制。
芯片解密一般是通過相應的技術把執(zhí)行程序(一般為機器碼)反匯編成匯編代碼,還可以更進一步反編譯成高級語言偽代碼(比如C代碼),便于逆向人員理解和修改。
1
前期準備
在上一小節(jié)中我們輕松獲得了芯片中的bin文件等,當然如果芯片有加密處理過,可能就需要更加先進的技術獲取芯片的內部數(shù)據(jù),這里就暫時不展開了,可以參考下面兩篇文章 :
【整理】一文帶你了解"單片機解密"技術
【MCU】用stm32的UID給固件加密(重點在加密)
今天我們主要是把前面獲取的bin文件逆向一下,并把原來的波特率9600修改為57600,原來9600效果如下:
2
逆向過程
逆向技術發(fā)展其實挺長一段時間了,當然為了方便各逆向愛好者的使用也誕生了非常多的開發(fā)工具,其中IDA Pro算是非常流行的逆向工具,所以這里就選用該工具進行逆向。
01
首先安裝IDA Pro逆向工具,網(wǎng)上搜索一下會有各種資源,然后點擊安裝,一路next基本上可以安裝好,安裝好以后便出現(xiàn)如下兩個頭像。
這里選擇32bit版本,并創(chuàng)建工程:
02
這里選擇上小節(jié)導出的bin文件,由于所使用的芯片為cortex-M3內核,這里選擇ARM Little-endian模式:
03
設置內核架構,這里可以通過查閱對應的內核介紹進行選擇。
04
然后設置bin文件對應的地址映射,由于bin文件是通過整片全部讀出,所以這里與該芯片的Flash起始地址和大小是一致的。
05
很輕松便進入了IDA的反匯編代碼,這樣就完成了從機器碼到匯編碼的逆向過程。
同時你還可以通過IDA的圖形調用試圖來看到各種調用關系等。
06
然后我們隨便找一個函數(shù)并使用F5,生成C偽代碼。
然后你再看看C源程序,驚人的相似!!
07
假如閑9600的波特率太慢,卻又苦于沒有源代碼修改燒錄,于是便可以逆向修改bin文件進行燒錄。
當然如果你對機器碼和匯編非常的熟悉,只需要找到對應的機器碼進行修改即可,然而找到對應的機器碼還是通過IDA工具來得比較直接且方便。
同時可以在反匯編view中使用C和D來進行機器碼和匯編的轉化:
如下通過使用D可以把匯編轉化為機器碼:
這里按下D,即可轉化為如下機器碼 :
同時切到Hex視圖,也可找到對應的機器碼:
08
以上便找到了修改的位置,僅僅只需要把該機器碼中的9600修改為57600即可,我們可以通過查找內核的指令集進行機器碼的編寫,并進行如下更改:
同樣,其對應的匯編視圖也發(fā)生了如下變化:
然后點擊如下圖所示菜單選項,從而把相應的修改更新到對應的bin文件中。
09
最后,當然是把修改以后的bin文件燒錄到單片機中進行測試,測試結果如下圖所示 :
波特率成功被修改為57600,整個過程到此結束,enjoy?。?/p>
責任編輯:lq
-
單片機
+關注
關注
6032文章
44517瀏覽量
633058 -
mcu
+關注
關注
146文章
16993瀏覽量
350318 -
STM32
+關注
關注
2266文章
10872瀏覽量
354826
原文標題:可怕,別人把我MCU固件給反匯編了!
文章出處:【微信號:gh_c472c2199c88,微信公眾號:嵌入式微處理器】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
相關推薦
評論