ida 反编译 linux bin,使用IDA pro逆向ARM M系核心的Bin固件
物聯網和智能設備這兩年還是比較火的,我們的手中或多或少都有了幾個智能設備,比如手環,智能手表,或者門鎖什么之類的東西,但是同學們在做逆向的時候,卻有很多問題。要不然是根本拿不到固件,要不然是拿到了Bin之后看不懂,這篇文章帶大家手把手調教IDA pro,讓他逆向無符號的Bin文件。
一、意義
先說一下逆向固件的意義把,一般來說,這種小東西都會和外界有交互,藍牙,WIFI,網絡,4G,zigbee等等,我們逆向出他的協議就可以發現其中的安全問題。比如如果你逆向了一個手環的協議,發現它沒有做身份驗證或者驗證不嚴謹,就可以批量的影響手環,或者你搞定了一個網絡協議,可能發現一個網絡的暴露服務,對云平臺發起攻擊,等等。
我們當然可以從APP上入手去搞,但是這幾年,隨著APP加固的大面積使用,難度系數正在上升,而硬件上,特別是M系的MCU,為了成本,運算速度和功耗,很少有使用加密一類防御手段的。STM32系列可以使用設置RDP位的方式鎖死固件讀取,但是這樣搞了之后,程序也就沒有辦法升級了,同時也帶來了開發和調試時間上的消耗,面對整分奪秒的市場,使用的還是很少的。(實際上即便是開了防御也是有方法搞的。)
二、通過文件結構使IDA正確反匯編
在開始搞之前,我們先了解一下文件的結構。
大家熟悉的windows或者linux下的可執行文件,里面會包含一些函數信息,也會包含加載基址,段,架構等信息,但是嵌入式設備為了減小flash的占用,這一切統統沒有。所以拖進IDA中之后是這個樣子的。
IDA會問你,他是什么架構的。
我們可以通過查詢芯片信息的方式或得到架構的信息(ARM架構當然是ARM啊),選擇使用ARM小端序進行反匯編。
確定進入之后,IDA還會問你一些信息。
IDA會問你,RAM的位置,ROM的位置和加載基址。由于我們什么都不知道,直接按OK進入,等我們拿到了一些信息之后回來改。
進去之后是這個樣子的,先別慌,我們還要改一個東西。
M系使用的是ARM的Thumb指令集,所以需要先改為Thumb指令集匯編。按ALT+g,把里面T的值改為0x1.
之后就成了這個樣子:
我們先在0x00000000的位置按d,改變IDA的顯示位數,到DCB。在0x00000004的位置也一樣。
這個時候就要對整個ARM M核心的啟動流程有熟悉了,首先,0x00000000位置的值作為棧的SP指針,之后把0x00000004位置的值寫入PC指針,也就是芯片上電之后開始的位置。
這個時候,就看出加載基質的作用了,由于加載基地址不明確,我們跳不到0x10001065中去。
我們可以在每個0x2對齊的位置去按C(因為Thumb指令是0x2對齊的),讓IDA Pro強行反匯編。
按了幾個之后,就會發現整個調用的架構逐漸清晰起來了。
這時候,會發現一些位置的地址是紅色的,表示超出索引:
可以看出這兩句使用BX的絕對跳轉,加載基地址不會小于0x10000000,實際上就是0x10000000.具體加載基址的確定,還是需要研究人員對硬件和架構的熟悉,有很大程度是猜和試的成分。
比如上面的兩句話,實際上就是0x00000004地址上的值跳轉過來的,0x10001065和0x10001064相差0x1,這是一個歷史遺留問題,但是不會產生影響,CPU會自動糾偏。憑借此就可以得出加載基址的位置。
去年KCON,有一個議題就是講如何自動尋找加載地址,利用的就是固件中一些絕對的加載位置,有興趣大家可以看一下。
確定了加載地址,我們重新載入之后,就可以看見正常的調用關系了。
之后在還是按照上面的方法,進行操作,由于加載地址是正確的,就可以識別出很多的函數調用關系,我們按C強制讓ida pro匯編的地方也會少很多。
里面還會發現一些紅色的地址,這就要參考硬件的芯片手冊確定意義了。
有一些函數是硬件中斷處理函數,由硬件觸發,與主線沒有調用關系,所以還是會發現一些沒有反匯編的代碼,手動按C匯編一下就行了。
但是其中的函數沒有名字,是這個樣子的,很難受:
怎么辦呢?由于硬件的底層函數大部分都是標準函數,由芯片廠商提供,因此可以自己搭建一個和目標相同的開發環境,編譯一個函數比較全的固件,之后使用bindiff進行函數查找。
我們先寫一個函數比較多的程序,之后編譯,得到axf文件,使用ida進行反編譯
axf文件是有很多輔助信息的,拖入之后ida pro直接可以識別。
反匯編之后,代碼結構和函數名可以直接顯示出來:
這個時候直接關閉,保存反匯編的結果
打開目標bin文件,恢復出函數結構之后,打開bindiff,加載之前保存的axf文件的反匯編結果。
加載之后:
可以看到函數名的對應關系:
我們也可以簡單看一下bindiff的匹配原理是什么,每個匹配的函數,bindiff都會給一個匹配理由。
這樣我們就可以使用IDA PRO繼續進一步的分析了,希望這篇文章拋磚引玉,可以讓大家的研究出更多好玩的東西。
今天下載的NSA剛發布的ghidra 9.0,逆向ARM M也是同一個套路,只不過操作的鍵位不同。效果如下:
還算可以。
但是他的diff功能更傾向于查找不同點,我暫時還沒找到構建函數名索引,目前還是IDA Pro比較好用。
轉載請注明:轉自看雪學院
更多閱讀:
總結
以上是生活随笔為你收集整理的ida 反编译 linux bin,使用IDA pro逆向ARM M系核心的Bin固件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux 网卡配置不一致,linux环
- 下一篇: linux 备份mysql并上传_Lin