嵌入式設備逆向所需的工具鏈
相關的應用程序或工具有:
UART(Universal Asynchronous Receiver Transmitter,通用異步收發器):
UBoot;
Depthcharge;
SPI (Serial Peripheral Interface,串行外設接口):
Flashrom;
I2C(Inter-Integrated Circuit,集成電路總線):
i2cdetect;
i2cdump;
JTAG (Joint Test Access Group,聯合測試接入組)
OpenOCD;
UrJTAG;
除了使用上述協議提取固件外,我們還將使用 Ghidra 分析二進制文件,其中我們將涵蓋以下內容:
將二進制塊加載到 Ghidra;
了解 Ghidra 的 FlatProgramAPI:Java / Python;
增強 Ghidra 的自動分析;
理解Ghidra中的內存映射;
PCode仿真;
本文回顧了在建立嵌入式系統逆向工程實驗室時所需要的一些工具。有兩個部分,一個是硬件工具,一個是軟件工具。閱讀完本文后,你應該知道為逆向工程嵌入式系統和固件映像建立一實驗環境需要什么。
讓我們介紹一下將要使用的一些工具。
硬件
為了連接和分析本文中的逆向目標,我們將使用以下工具:
樹莓派模型4;
FX2LA邏輯分析儀;
萬用表;
RD6006電源;
Breadboard Wire 跳線;
烙鐵;
Raspberry Pi
Raspberry Pi是一款基于linux的SBC(單板計算機),擁有多種外設。直到最近,對于許多嵌入式系統項目來說,Raspberry Pi 還是一種易于獲取的低成本解決方案。
它利用Broadcom BCM2711,四核Cortex-A72 (ARM v8) 64位SoC @ 1.5GHz,并且有多種型號可供選擇,可用外設,當然還有成本!Pi 最初是一個教育平臺,但制造商和黑客都喜歡這個平臺,并找到了很多方法來利用這個基于 Linux 的低成本 SBC。我發現 Raspberry Pi 在過去幾年中已成為我的首選多功能工具,這主要是由于它支持的接口數量,如下圖所示。

我們將使用這個平臺來插入和連接各種嵌入式系統總線和外設。除了包含許多嵌入式系統上的標準外設外,它還運行 Linux!這使我們能夠利用許多開源工具,甚至編寫我們的程序來與這些外設進行交互。我們可以這樣做,因為這些接口是通過 /dev/ 中的文件系統公開的。我們將是基于 Debian 的標準 Raspbian 映像,每一篇文章都將介紹如何配置Pi的相關接口。
電源:RD6006
在完成我們的目標時,我們需要從外部為它們提供動力。因此,無論我們是要為閃存芯片或微控制器等單個組件還是我們的整個平臺供電,我們都需要一個可調節的電源。
Riden 6006 是一款可變臺式電源,可根據你要使用的電源處理 6-70v 的輸入電壓。此電源要求你連接電源;對于我的臺式設置,我使用連接到 RIDEN 6006 背面的 12V / 3A 交流適配器,如下所示:

該電源具有十個可編程預設(電壓/電流設置),可通過 USB 或 WiFi 遠程控制。
以下 python 片段顯示了控制此電源是多么簡單。

使用連接WiFi的版本,移動應用程序可以遠程控制電源。需要以編程方式控制我們的電源,以防我們需要運行重復測試,我們循環電源到目標。第一部分中有一個示例:
Riden Link: Amazon
Riden Link: AliExpress
萬用表
萬用表是任何硬件實驗室的必備品,萬用表執行電子測量,例如:
電壓(交流和直流);
當前的;
電阻;
連續性;
不同的萬用表的成本和功能差異很大,選擇萬用表時需要注意的一些因素包括:
用于什么目的?
手動還是自動?
可用的測量方法是什么?
就我們的目的而言,我們不需要一個非常昂貴的萬用表,因為我們將主要測量連續性、電壓和電阻。需要注意的是,一些便宜的萬用表比其他萬用表需要更多的時間來測量,從而導致一些滯后。
邏輯分析儀
硬件黑客工具箱中另一個常用的工具是邏輯分析儀。邏輯分析儀捕獲并顯示數字電路中的電子信號。邏輯分析儀還可以解碼和分析這些信號,將數字數據流轉換為更易讀的格式。

雖然我是 Salaea 邏輯分析儀的忠實粉絲,但對于大多數愛好者來說,這些都是相對昂貴的。因此,我將為此系列使用低成本的 fxXXX 系列邏輯分析儀。人們可以以相當低的價格從 eBay 或亞馬遜購買這些分析儀。我們將與這些分析儀一起使用的軟件將是 PulseView 軟件套件。
在選擇邏輯分析儀時,有幾個因素需要考慮,我在下表中列出了這些因素。

對于我們將要研究的目標,24MHz的采樣率就足夠了。然而,對于專業使用,我建議使用Saleae或其他至少能夠達到100MHz的邏輯分析儀。
Saleae Logic Analyzer
FX2LA Logic Analyzer
這些邏輯分析儀由 PulseView / Sigrok 軟件支持,我們將在本文的示例中使用該軟件。
面包板或跳線
我們需要一種方法將我們的 Raspberry Pi 連接到我們的各種目標,這必然會用到面包板。面包板使我們無需焊接即可制作電子電路原型。在使用 Raspberry Pi 時,我非常喜歡下圖所示的機箱/面包板組合:

焊臺
在某些示例中,可能需要焊接到我們的目標上。例如,有時我們需要直接焊接到組件上以對其進行測量/接口,而其他時候我們需要將所有部件都移除。
適合你烙鐵需要滿足以下條件:
你要焊接什么?
電路板;
汽車零部件;
布線;
你有多少可用的辦公桌/工作臺空間?
你需要返修臺嗎?
你會移除/添加 SMD/SMT 組件嗎?
如果你正在尋找一個低成本的焊臺,我推薦這個。它的溫度范圍可以從 392 到 896,并且可以通過操作臺控制。如果你要進行 SMD 返修和移除 BGA 設備,你將需要選擇具有熱風返修臺。
該視頻可以提供有關選擇合適工作站的更多信息。
其他硬件工具
到目前為止,我只列出了必需的工具。但是,許多其他工具和組件在你的硬件實驗室中可能會有所幫助,比如:
硅膠墊:
為探測設備/焊接提供安全的表面平臺;
顯微鏡:
印刷電路板;
FTDI越獄:
廣泛支持各種編程語言的硬件多功能工具;
示波器:
用于查看模擬信號,適用于調查無法按預期工作的神秘/麻煩的數據線,也用于收集功率跟蹤差分功率分析和電壓故障;
選擇示波器指南;
ChipWhisperer 平臺
用于電壓閃變和側通道分析,NewAE還提供了一系列優秀的教程和示例。
隨著你繼續研究和分析更多目標,你的硬件需求將會增長。本文介紹了遵循此特定示例所需的基本組件。
軟件工具
請記住,在逆向工程過程中,硬件通常只是第一個障礙。通常情況下,我們在硬件級別進行逆向工程,以增加對軟件級別組件的訪問。在本文中,我們將使用幾個軟件工具,并在下面重點介紹核心工具。
Ghidra
熟悉我背景的人都知道,Ghidra 已迅速成為我在軟件逆向領域的首選工具。
Ghidra 是 NSA 開發的 SRE(軟件逆向工程)工具套件。如果你熟悉 IDA-Pro、r2 或 Binary Ninja,那么你可能就熟悉 Ghidra。我們可以使用上面提到的任何工具對這個固件鏡像進行逆向工程。盡管如此,我還是選擇了 Ghidra,因為它是開源的,并且具有用于腳本和分析二進制文件的相對完整且記錄良好的 API。
使用 Ghidra 的好處有很多:
它是完全開源和免費的;
支持架構的大型庫;
適用于所有受支持架構的反匯編和反編譯工具;
用于擴展分析/插件開發的 Java/Python API;
當我們在整個系列中查看固件映像時,我們將使用 Ghidra。此外,在本文中,我們將學到以下知識:
將內存區域添加到固件映像;
使用自定義 ghidra 擴展增強自動分析;
模擬 Ghidra 的 PCode 以更好地了解固件行為;
我在寫了一篇關于設置開發環境來開發 Ghidra 模塊和腳本的文章。當我們查看從目標中提取的固件映像時,我們將使用此環境。
Binwalk
在我們將二進制或固件映像加載到 Ghidra 之前,我們需要回答幾個問題:
這個軟件是為什么架構編寫的?
此映像是壓縮的還是加密的?
此固件映像中是否嵌入了其他文件或文件系統?
Binwalk 可以幫助我們避開幾乎所有這些問題。Binwalk 是一種檢查二進制文件并搜索預定義文件格式的工具。其中一些格式包括:
適用于多個操作系統的可執行格式;
文件系統映像;
多媒體文件;

Binwalk 還可以生成熵圖,這在確定固件映像是加密還是壓縮時非常有用。當我們從目標中提取固件映像時,我們將使用 binwalk 執行我們的初始分析。binwalk 的輸出將幫助我們確定提取感興趣數據所需的后續步驟。

Kaitai Struct
一旦我們了解了給定二進制文件或固件映像的結構,我們可能需要編寫一個解析器來提取感興趣的數據。Kaitai struct 很快成為我編寫自定義二進制解析工具的首選工具。
Kaitai Struct 是一種聲明性語言,用于描述布局在文件或內存中的各種二進制數據結構:即二進制文件格式、網絡流數據包格式等。
其主要思想是,在Kaitai Struct語言中只描述一種特定的格式,然后可以將其編譯成一種受支持的編程語言中的源文件。此外,這些模塊將包含為解析器生成的代碼,該解析器可以從文件/流中讀取所描述的數據結構,并以易于理解的API訪問它。
我們可以使用 Kaitai struct 為二進制文件編寫模板,使用該模板,Kaitai 將為我們生成一個解析庫。該工具非常節省時間,并且支持多種輸出語言。下面是我為 ePOS RTOS 實現的自定義文件系統編寫的 Kaitai Struct 的一些示例應用程序。
Kaitai 模板;
自動生成的解析器;
使用自動生成的解析器;
Kaitai 還具有可以在本地運行的基于 Web 的 IDE。
你可以從kaitai.io了解更多關于Kaitai的信息并下載相關工具
Pulseview / SigRok
Pulseview 是 Sigrok 的前端軟件,我們將使用它來分析和查看我們使用邏輯分析儀捕獲的數據。此外,Pulseview 將對我們捕獲的流量應用各種協議解碼器,使我們能夠從捕獲中獲得更多含義,并使捕獲的輸出更具可讀性。例如,使用UART解碼器,我們可以這樣做:


我們還可以導出這些數據以進行進一步分析,編寫我們的插件,甚至以編程方式編寫如何收集信息的腳本。Pulseview 和 sigrok 也是完全開源的,并且有許多兼容的設備,包括一些版本的 Saleae Logic 分析儀,你可以在此處下載 Pulseview 軟件。
總結
本文列出的工具只是對嵌入式系統/固件進行逆向工程所需的一些工具。旨在從硬件和軟件的角度回顧嵌入式系統逆向工程的基礎知識。