推薦一款採用 .NET 編寫的 反編譯到原始碼工具 Reko

張善友 發表於 2022-12-04
.Net

今天給大家介紹的是一款名叫Reko的開源反編譯工具,該工具採用C#開發,廣大研究人員可利用Reko來對機器碼進行反編譯處理。我們知道.NET 7 有了NativeAOT 的支援,採用NativeAOT 編譯的.NET程式 無法透過ILSpy 之類的傳統工具得到原始碼,這款Reko 可能是唯一一款可以把NativeAOT 編譯的程式真正得到原始碼的,當然你得首先會程式設計才行。編譯本質上是一個有損過程。 將高階原始碼程式轉換為低階機器程式碼可執行二進位制檔案時,諸如複雜資料型別和註釋之類的資訊會丟失。 有用的反編譯通常需要使用者的幫助。 使用者可以提供被編譯器丟棄的型別資訊,併為過程新增註釋或給出友好名稱。

Reko不僅包含核心反編譯引擎和後端程式碼分析模組,而且還提供了使用者友好的操作介面。目前,該工具提供了Windows GUI和ASP.NET後端。反編譯引擎需要從前端獲取使用者的輸入,可接受的輸入為單獨的可執行檔案或反編譯專案檔案。Reko專案檔案中還包含了程式碼檔案的額外資訊,來為研究人員的反編譯操作或格式化輸出提供幫助。在整個過程中,負責分析輸入程式碼的主要是反編譯引擎。

image

Reko的目標就是幫助使用者在最小化操作互動的情況下,幫助使用者完成對多種處理器架構和可執行檔案格式的反編譯處理。需要注意的是,很多軟體許可證會禁止他人對該軟體的機器碼進行反編譯或逆向分析,所以希望大家不要將本工具用於惡意目的。

專案地址:https://github.com/uxmal/reko 

工具下載和安裝:https://github.com/uxmal/reko/releases/tag/version-0.11.1

.NET 6 是跨平臺的,可以在你需要安裝的作業系統上安裝 .NET 6.0:https://dotnet.microsoft.com/zh-cn/download/dotnet/6.0 ,如果需要開發Reko,並使用VS 2022,則必須安裝VS的C#元件,如果在Mac,Linux平臺上推薦使用Rider 。

在windows 下載好MSI檔案之後,直接執行安裝程式即可。安裝完成後會在開始選單裡建立一個“Reko Decompiler”快捷方式,你可以直接點選圖示啟動Reko客戶端。

開啟GUI客戶端後,你可以參考GUI.md文件開始工作。

Reko開始於一個空專案。二進位制檔案的分析從將它新增到專案中(使用選單欄命令File > Open) 開始。Reko會嘗試確定這個檔案是什麼二進位制檔案格式。常見的格式,比如MS-DOS或EXE會被自動載入;它們的內部結構會被從頭到尾地分析載入(will be traversed),載入結果會在左側的專案概覽中中展現出來。

想了解Reko的各種特性,你可以讀 user’s guide.md | github。如果你對專案的內部工作原理感興趣,請看 reko wiki