推薦一款采用 .NET 編寫的 反編譯到源碼工具 Reko

今天給大家介紹的是一款名叫Reko的開源反編譯工具,該工具采用C#開發,廣大研究人員可利用Reko來對機器碼進行反編譯處理。我們知道.NET 7 有了NativeAOT 的支持,采用NativeAOT 編譯的.NET程序 無法通過ILSpy 之類的傳統工具得到源碼,這款Reko 可能是唯一一款可以把NativeAOT 編譯的程序真正得到源碼的,當然你得首先會編程才行。編譯本質上是一個有損過程。將高級源代碼程序轉換為低級機器代碼可執行二進制文件時,諸如復雜數據類型和注釋之類的信息會丟失。有用的反編譯通常需要用戶的幫助。用戶可以提供被編譯器丟棄的類型信息,并為過程添加注釋或給出友好名稱。

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

5e12cda0287d409a1c69f91c93d49536.png

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。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/280602.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/280602.shtml
英文地址,請注明出處:http://en.pswp.cn/news/280602.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

并行傳輸數據和串行傳輸數據_為什么串行數據傳輸比并行數據傳輸快?

并行傳輸數據和串行傳輸數據SATA hard drive connections are faster than older PATA hard drive connections and the same can be said for external cabling standards, but this is counter-intuitive: why wouldn’t the parallel transmission be faster? SATA硬盤驅動…

得到某月的天數

Calendar timeCalendar.getInstance(); time.clear(); time.set(Calendar.YEAR,2018);//year年 time.set(Calendar.MONTH,1);//Calendar對象默認一月為0,month月 int daytime.getActualMaximum(Calendar.DAY_OF_MONTH);//本月份的天數 System.out.pri…

Django09:圖書管理系統筆記/choices用法/ MTV與MVC模型/多對多三種創建方式

圖書管理系統筆記 redirect括號內可以直接寫url 也可以直接寫別名 但如果別名需要參數,必須使用reverse解析。 choices用法 使用場景:能列舉完全的數據 #使用方法:xxx_choice #1. get.xxx_display #2. 如果超出范圍,則顯示原…

業務處理速度變慢?且看IT如何成為救世主

在日常生活的方方面面,我們似乎都在期待著一種即時的便利。比如,用手機購物、訂餐、繳費、預約掛號等等。而在企業中,時間與效率可不是一種休閑福利,而是一項重要的商業功能。我們有理由期待,當今史無前例的數字革命正…

微軟讓卡塔爾世界杯踏入元宇宙

遵守前一篇公眾號文章里的承諾,昨天盆盆在視頻號里錄制了一段5分鐘左右的短視頻,講了江森自控和微軟Azure,如何幫助卡塔爾世界杯打造基于元宇宙的數字體育館。Part.1歡迎掃碼關注我的視頻號(每天更新元宇宙、云計算和數字化的短視頻)。Part.2…

洛谷——P1305 新二叉樹(新建二叉樹以及遍歷)

題目描述輸入一串二叉樹,用遍歷前序打出。 輸入輸出格式輸入格式: 第一行為二叉樹的節點數n。(n \leq 26n≤26) 后面n行,每一個字母為節點,后兩個字母分別為其左右兒子。 空節點用*表示 輸出格式: 前序排列的二叉樹 輸…

插槽1單通道插槽2雙通道_相機雙存儲卡插槽有什么大不了的?

插槽1單通道插槽2雙通道If you paid any attention to the launch of Canon and Nikon’s first full frame mirrorless cameras—the EOS R, Z6, and Z7— you’d have noticed that some people were pretty unhappy that they only came with a single card slot—an SD slo…

python 垃圾回收詳解

原文:https://zhuanlan.zhihu.com/p/31150408 總綱策略和垃圾回收系統工作內容引用計數詳解標記-清除分代收集循環引用編程應用-常見方法ex 過程詳解使用建議觸發機制參考文獻Python垃圾回收機制--完美講解(Python vs Ruby)Python垃圾回收機制…

Django10:Ajax介紹/發送數據/SweetAlert

Ajax 異步提交 局部刷新 發送方式 1. 瀏覽器輸入url,按enter get 2.a標簽href屬性 get 3.form表單 get/post 4. ajax get/post ajax 不是編程語言&#xf…

物聯網數據終端演進之道

智能手機的普及在最近幾年掀起了一股取代企業數據終端的風潮,但正如筆者在一年前便提到過 的,“智能手機難以在企業級應用中得以普及”,這種觀點最好的佐證便是時至今日,由于安全性與管理合規的需要,個人計算機用于企業…

mac 不能連接wi-fi_如何阻止Mac自動連接到Wi-Fi網絡

mac 不能連接wi-fiYour Mac automatically reconnects to Wi-Fi networks you’ve previously connected to. Starting with macOS High Sierra, you can now tell your Mac not to automatically connect to certain Wi-FI networks. Your Mac will remember the Wi-Fi networ…

“玩轉課堂”基本構想

1、項目背景隨著互聯網科技的高速發展,人們的生活、學習和工作中的許多事情都可以借助互聯網來完成,并且反響良好。作為學生,我們切身體會到,能夠使用網絡平臺來進行學習可以節約時間、并且十分方便;而在老師的角度&am…

SQLServer之分離數據庫

分離數據庫注意事項 要求具有 db_owner 固定數據庫角色中的成員資格。 可以分離數據庫的數據和事務日志文件,然后將它們重新附加到同一或其他 SQL Server實例。 如果要將數據庫更改到同一計算機的不同 SQL Server 實例或要移動數據庫,分離和附加數據庫會…

django11:自動序列化/批量插入數據/分頁器

自動序列化 借助serializers幫你自動完成序列化 from app01 import models from django.core import serializers def ab_se(request):user_queryset models.Userinfo.objects.all()#原始方法user_list []for user_obj in user_queryset:user_list.append({username:user_o…

羅漢塔最少步驟_如何以最少的步驟壓縮和密碼保護文件?

羅漢塔最少步驟If you have a large batch of files to compress and you want to add password protection to each of them, what is the simplest or quickest way to do so? Today’s SuperUser Q&A post has the answer to a curious reader’s question. 如果要壓縮…

IoTSharp中使用X509加密MQTT通訊并實現設備鑒權

IoTSharp支持MQTT協議通過 TLS 1.2 加密通訊, 并可以通過X509證書進行設備認證登錄。基本配置在 appsettings.Production.json中需要 指定域名, 并設置EnableTls為true"MqttBroker":{"DomainName":"http://demo.iotsharp.net:2…

IBM希望其“裁剪”過的Swift能夠引誘你使用BlueMix云

現在所有人都可以使用了——微軟頂尖的工程師表示,“呼吸新鮮的空氣吧!” 據Stack Overflow的估計,Swift在最受歡迎的編程語言中排名第二,該語言已經出現在了IBM的BlueMix云平臺之上,供所有人使用。 她從今年二月份開始…

物理層、數據鏈路層、介質訪問控制子層

物理層 物理層定義了比特作為信號在信道上發送時相關的電氣、時序和其它接口,物理層是構建網絡的基礎。數據通信理論基礎:改變諸如電壓或者電流等某種物理特性的方法可用來在電線上傳輸信息,如果用一個以時間t為自變量的單值函數 f(t) 來表示…

如何批量刪除指定的GitHub Repos

正常情況下,如果需要刪除GitHub上不需要的repos,手動刪除的操作有點繁瑣。如果只要刪除一個還能接受,手動刪除多個repos就有點浪費時間了。其實我們可以通過GitHub的API接口來批量刪除不需要的repos。 將要刪除的repos按照username\repos-nam…

django12:form 組件/渲染標簽/數據校驗/鉤子函數/

基本用法 from django import forms# 自己寫一個類 class RegForm(forms.Form):username forms.CharField(min_length3,max_length8, label"用戶名")password forms.CharField(min_length3,max_length8,label"密碼")emailforms.EmailField() 1.校驗數據為…