導航:首頁 > 源碼編譯 > go二進制反編譯

go二進制反編譯

發布時間:2025-05-21 03:51:30

『壹』 GO delve(dlv)調試工具筆記及實操

本文詳細記錄了使用Linux下的delve調試工具在調試Go代碼時的常用操作和指令。通過這些工具和指令,無論是對應用進行調試還是追蹤源碼,都能獲得高效且精準的體驗。以下是一些關鍵點:

在使用Go版本1.16.8和delve版本1.7.2進行調試時,首先需要確保已正確安裝delve。

常見的dlv指令包括:

1. 斷點管理:通過`break`設置斷點,使用`toggle`進行斷點的啟用或禁用,`clear`或`clearall`用於刪除斷點。

2. 程序執行與調試:`attach`用於調試阻塞程序,例如HTTP伺服器;`exec`用於調試編譯後的可執行文件。

在調試時需注意,使用`-v`選項進行`go build`時,編譯器可能會進行優化,導致內聯函數在斷點調試時無法進入函數體。為避免這種情況,可使用`-gcflags "-N -l"`參數。

3. `test`指令用於調試單元測試,要求測試代碼在`GOPATH`路徑下。

4. `help`指令提供幫助信息,`debug`指令從主包的`main.go`開始調試,需確保相關包位於`GOPATH`內。

使用`case1`和`case2`進行`attach`和`exec`操作分別針對阻塞程序和可執行文件調試。`case3`和`case4`分別展示了幫助信息和從主包開始的調試。

`case5`中的`test`指令演示了如何調試單元測試。

在調試過程中,`case6`的`version`指令用於查看dlv版本,`case7`的`break`指令用於設置斷點,`case8`的`breakpoints`命令列印當前所有斷點狀態。

當斷點設置後,執行`case10`的`continue`命令將程序執行到下一個斷點,而`case11`的`toggle`命令則用於斷點的啟用或禁用。

斷點調試時,`case12`的`continue`命令可用於執行程序直至下一個斷點,而`case13`的`next`命令則用於執行一行代碼。`case14`的`restart`命令允許從主包開始重新執行程序,而`case15`的`step`命令則用於執行一行代碼,特別是當遇到函數調用時。

在遇到需要查看函數內部執行流程的情況,`case16`的`step-instruction`命令特別有用,它允許執行單個機器指令,特別是在對匯編代碼進行調試時。

當需要從當前函數返回,`case17`的`stepout`命令能夠幫助直接跳出當前函數。

使用`case18`的`args`命令可查看當前函數的輸入參數值,而`case19`的`display`命令則允許用戶監控變數在執行過程中的變化。

`case20`的`locals`命令用於列印當前函數的局部變數,有助於理解變數的初始狀態。`case21`的`print`命令則用於列印特定變數或表達式,進行簡單的測試。

`case22`的`set`命令允許用戶設置變數值,這對於調試邊界條件或追蹤代碼中的異常情況尤為重要。

`case23`的`vars`命令用於列印全局變數,適用於自己的全局變數或了解運行時的內部狀態。`case24`的`whatis`命令則用於查詢變數類型。

`case25`的`disassemble`命令用於反編譯代碼,適用於追蹤源碼邏輯或深入理解Go底層實現。反編譯過程中的常見問題和解決方法可以在特定的文檔或資源中找到。

`case26`的`exit`命令用於結束調試會話。

`case27`的`funcs`命令用於查看所有方法,方便追蹤特定包或方法的調用情況。

`case28`的`help`命令能夠提供任何指令的使用說明。

`case29`的`list`命令用於查看代碼執行位置,幫助用戶理解當前調試過程的上下文。

文章鼓勵調試者分享更多實用的dlv指令,以豐富調試工具的使用經驗和技巧。

『貳』 應該怎樣學習java順序是什麼

不知道Java 學習順序的話,我提供你一條學習線路圖!

按照視頻學習的過程中,學習方法也是很重要的!一定要記得勤記筆記,整理程思維導圖,方便後續復習方便。

第一部分:JavaSE:Java語言最基本的一套庫

學習JavaEE或JavaME之前,JavaSE是必學的。

* Java開發環境搭建

* Java基礎語法

* 面向對象

* 數組

* 異常

* 集合

* 線程

* IO流

* 反射機制

* 註解Annotation

* 網路編程

第二部分:資料庫 【MySQL + JDBC】

* 只要學習編程,資料庫是一定要學習的,是一門公共的學科。

* java、C、python、C#等程序員都需要學習資料庫。

* 資料庫產品很多: MySQL、Oracle、SqlServer、DB2......

* 我們動力節點資料庫課程包括:MySQL + Oracle

* Oracle:銀行、政府使用oracle的較多。

* MySQL:互聯網公司、一般企業使用MySQL較多。

* Oracle我們是提供視頻的。課堂上不講。

* 我們課堂上講MySQL。

* Java語言鏈接資料庫:JDBC

第三部分:WEB前端

* 系統結構:B/S【Browser/Server】 C/S【Client/Server】

* WEB是網站的意思。WEB前端是:網站當中的頁面。

* WEB前端程序是運行在瀏覽器當中的。

* HTML5 + CSS3 + JavaScript(JS)

* WEB前端也有很多框架:

- jQuery

- Bootstrap

- Vue

- NodeJS

- AugularJS

- RectJS

- LayUI

- EasyUI

.....

第四部分:JavaWEB

* Servlet

* JSP

* AJAX(是JavaScript的一部分語法,專門做頁面局部刷新)

第五部分:JavaWEB項目

* 做一個B/S結構的項目,將WEB前端和JavaWEB內容做一個整合練習。

* 其實到這里為止,所有的系統都可以做了。但是用的技術很Low。沒有用框架。

『叄』 Borland Delphi 6.0 - 7.0 編寫的EXE程序如何修改

推薦幾個工具試試!【Resource Hacker】Resource Hacker 可以用來:
1. 查看 Windows 32 位和 64 位可執行和相關文件的資源 (*.exe、*.dll、*.cpl、*.ocx、*.msstyles 等等),在已編譯和反編譯的格式下都可以。
2. 提取 (保存) 資源為文件 (*.res) 格式,可作為二進制,或作為反編譯過的資源腳本或圖像。
圖標、點陣圖、指針、菜單、對話、字元串表、消息表、加速器、Borland 窗體和版本信息資源都可以完整地反編譯為其各自的格式,不論是作為圖像還是作為 *.rc 文本文件都可以。
3. 修改 (替換) 可執行文件的資源。
圖像資源(圖標、指針和點陣圖)可以被相應的圖像文件(*.ico, *.cur, *.bmp)、*.res 文件、甚至是另一個 *.exe 文件所替換。
對話、菜單、字元串表、快捷鍵和消息表資源腳本(以及 Borland 窗體)可以通過使用內部資源腳本編輯器被編輯和重新編譯。
資源也可以被某個 *.res 文件所替換,只要替換的資源與其是同一類型並且有相同的名稱即可。
4. 添加 新的資源到可執行文件。
允許一個程序支持多種語言,或將自定義圖標或點陣圖(公司的標識等)添加到程序的對話中。
5. 刪除 資源。大多數編譯器添加了應用程序永遠都不會用到的資源到應用程序中。刪除這些不使用的資源可以減小應用程序的體積。下載地址: http://www.hanzify.org/?Go=Show::List&ID=2442 【DeDe V3.50.02 】 DeDe,著名的DELPHI反編譯工具,3.5版本,多語種(含中文)界面,支持到D7版本,反編譯結果雖然是匯編級,不過效果已經非常不錯了下載地址1: http://www.2ccc.com/article.asp?articleid=49下載地址2: http://down.csdn.net/source/1744006下載地址3: http://www.anqn.com/delphi/76/3331.shtml

『肆』 一次簡單的golang棧溢出

邏輯分析

通過IDA工具分析,確認為Golang語言編寫的簡易shell程序。動態運行後發現該程序需要證書才能正常運行。

逆向工程步驟開始,由於IDA反編譯功能在Golang中效果不佳,最佳策略是分析匯編代碼。Golang函數調用約定與標准約定有所不同,傳入參數的寄存器依次為:AX,BX,CX,DI,SI,R8,R9,R10,R11。

定位到報錯字元串"Cert Is A Must"出現的地址0x4C1FC0,該函數負責將報錯字元串從只讀數據段(rodata)移動到.data段(.bss)區域。通過字元串交叉引用,找到解析用戶輸入的函數,地址為0x4C1900。該函數會檢查全局變數qword_5D1128是否為0,以及輸入是否滿足特定條件,不滿足會觸發報錯。

使用gdb進行動態調試,將斷點設置在解析函數的開始,觀察到rax寄存器指向的是一個由空格分隔的字元串數組,rbx則是數組長度。因此,繞過報錯的關鍵在於輸入格式為"cert"加上任意字元串。

接著分析到"Missing parameter"錯誤,用戶輸入的第一部分為"cert"時,程序會判斷輸入長度是否大於3。輸入長度為4,進入右邊邏輯塊,檢查是否為"cert"還是"echo"。若輸入為"cert"且長度為3,會觸發"Missing parameter"報錯。

通過分析,發現輸入應為"cert"後面跟任意長度的字元串,長度至少為4。動態調試後發現輸入的第二部分長度應為9,並且與特定字元串"nAcDsMicN"匹配,才能通過驗證。若匹配,程序進入cert解析函數,將輸入的第三部分及其長度作為參數。

解析函數執行rc4和base64處理後,與字元串「JLIX8pbSvYZu/WaG」比較,相同則輸出成功提示,並將全局變數qword_5D1128賦值為1。通過分析得出,輸入第三部分應為"S33UAga1n@#!",輸入完整格式為"cert nAcDsMicN S33UAga1n@#!",將qword_5D1128賦值為1後,繞過cert驗證,實現正常交互。

分析匯編邏輯發現,除了ls、cat、whoami、cd、echo命令外,其他命令如chdir、ls -al、print等直接調用系統函數。其中,echo命令存在棧溢出漏洞,因為參數處理函數在0x4C1854附近,且參數存儲在棧上,與返回地址的距離僅為0x200多,從而可以構造payload進行ROP攻擊。

總結,遇到Golang逆向或pwn問題時,應首先閱讀匯編代碼,邊調試邊偽代碼,逐步理解程序邏輯,最終發現和利用漏洞。此過程展示了從報錯分析、函數調用、輸入格式到漏洞利用的完整流程。

『伍』 怎麼讓 IDA 的 F5 支持一種新指令集

在逆向工程領域,IDA Pro是廣受贊譽的反匯編和調試工具,它支持多種主流指令集,為開發者和安全研究人員提供了強大的分析能力。然而,某些特殊的指令集,如VMP指令集,可能不在IDA支持列表中。本文介紹一種方法,通過簡單步驟擴展IDA以支持新指令集,緩解新指令集無反編譯器的困境。方法並非原創,而是基於前輩的文章和材料總結,旨在幫助想在IDA中實現未知指令集反編譯的朋友。

對於IDA處理處理器模塊與Ghidra插件,IDA雖然允許用戶開發特定架構的處理器模塊,但無法利用其反編譯功能,且編寫特定架構處理器模塊的過程復雜,參考資料少。相比之下,Ghidra是一款優秀的開源反編譯器,用戶通過插件形式添加新指令的反編譯器。例如,已有插件實現Ghidra中反編譯WASM模塊。然而,編寫Ghidra插件仍是一項復雜任務,參考資料不多,不在本文限定的「IDA」范圍內。

WebAssembly(WASM)是一種流行底層指令集,主要運行在瀏覽器環境,也有在終端或嵌入式設備應用。一般開發者使用編譯型語言如C/C++、Rust、Go開發WASM上層程序,使用LLVM將其編譯為WASM模塊。因此,WASM的IDA反編譯方法具有代表性。目前,IDA Pro 8.4仍不支持WASM反編譯,但有資料表明,IDA Pro能夠反編譯WASM模塊。實現方法是使用wasm2c程序,將WASM模塊轉換為等價的C語言低級表示形式,使用GCC/CLANG編譯,最後使用IDA分析最終產物。這種方法通過將WASM轉換為C語言,使得IDA可以進行反編譯。

在IDA中實現新指令集反編譯時,wasm2c將WASM模塊轉換為等價的C語言形式,但這種形式的可讀性較差。因此,需要使用C語言編譯器優化編譯結果,以適應IDA的指令集識別。這種方法實現了讓IDA支持未知指令集的效果,但美中不足的是,wasm2c的轉換結果可能未將內存訪問以原生C語言形式表示,導致內存訪問在IDA反編譯結果中以函數形式呈現。對於這種情況,可以設計轉換器,將指令集以函數單位轉換為等價的C語言表示形式,從而快速實現未知指令集的IDA反編譯器。

以WASM反編譯為例,這種方法在實際應用中已經取得成功。例如,對QWB S5 VM指令集的直接轉換成x64匯編,並使用IDA進行反編譯,迅速發現了程序漏洞。這種轉換方法在短時間內使IDA支持未知指令集,代碼實現僅需3小時,代碼行數在300行左右。類似的實踐例子還包括棧機反編譯、控制流與正確性、復雜表達式處理等,展示了該方法在不同指令集上的應用效果。

綜上所述,通過將未知指令集轉換為IDA能夠識別的指令集,如x86或ARM,然後使用wasm2c轉換為C語言,最後通過C語言編譯器優化並使用IDA進行反編譯,可以實現讓IDA支持新指令集。這種方法適用於WASM等指令集的逆向,也能在其他小眾指令集上取得成功。盡管這種方法在短時間內可以實現初步探索逆向,但要開發成熟的反編譯器,仍需根據實際情況編寫Ghidra反編譯插件或從零開發反編譯。

『陸』 golang生成的二進制可以反編譯嗎

和C/C++編譯的程序一樣,都是機器碼,如果你能反編譯C的就能反編譯Go的。
可以反編譯成匯編

『柒』 如何反編譯一個MOD

第一部分 下載forge源碼+建立MOD開發環境。
(1)下載forge源碼
注意下載src鏈接的版本,不要搞錯。比如,forge-1.7.10-10.13.2.1230-src.zip(以src.zip結尾)

注意到有很多下載地址,每一行是一個版本,選擇適合自己的版本。
右邊Downloads列有幾個鏈接,其含義如下:
(a)Changelog——更改日誌。
(b)Installer——jar格式的安裝包,使用與所有平台(Win/Linux/Mac)
(c)installer-win——專屬於Windows的安裝包。
(d)javadoc——自動生成的java文檔。
(e)src—forge源代碼。
(f)universal——單純的jar庫,非安裝包。
(g)userdev——面向開放者。
(2)下載之後加壓縮到某個文件夾
只留下五個東西:gradle和src文件夾,build.gradle,gradlew和gradlew.bat。
其它的東西沒有用,可以刪除。
打開 Windows命令行,cd定位到剛才的文件。
運行:gradlew.bat setupDecompWorkspace --refresh-dependencies
等待forge反編譯完成。


第二部分,BON進行反混淆。
BON全名bearded-octo-nemesis,是由immibis開放的一個MOD反混淆工具。(immibis可是MOD屆大名鼎鼎的人,比如redlogic,Liquid XP,Advanced Machines等都是非常好用的模組)。
新建一個BON文件夾。
(1)下載userdev版本的forge。還是剛才上面那個地址,只不過這次下載userdev版本。
把下載到的文件放到BON文件夾。
(2)找到forge反編譯之後的文件。
這個文件在C:Users{username}目錄下的
.gradlecachesminecraft etminecraftforgeforge1.7.10-{forgeversion}
比如咱們這個例子就是,1.7.10-10.13.2.1230。把這個文件夾復制一份到BON文件夾。
(3)下載BON
下載到一個BON.jar文件,放到上面的文件夾內。
(4)運行。
雙擊BON.jar之後運行。

Forge userdev.jar:選擇(1)下載的文件。
FG cache folder:選擇(1)復制出來的文件夾。
然後在輸入文件位置選擇你想反混淆的代碼,再選擇要保持的輸出。
操作(operation)注意選擇:反混淆模組。
點擊Go按鈕,等待完成。
反混淆之後的代碼一般以deobf結尾。
比如StevesFactoryManagerA93.jar,反混淆之後就是StevesFactoryManagerA93.deobf.jar。
這時候就可以用jd-gui無障礙的查看代碼了。


第三步 反編譯成源代碼
如果覺得用jd-gui查看不方便的話,可以考慮用fernflower進行反編譯。
fernflower是MCP官方用來發編譯minecraft代碼的神器,雖然沒有jd-gui操作簡便,但是它反編譯代碼的質量非常高。又是官方搭配minecraft使用,是用來反編譯代碼的不二之選。
如何獲得fernflower?
fernflower的官方代碼池,然而需要編譯不方便使用。
這里提供另外兩個方法:
(1)伴隨MCP發布的版本。
去mcp官方網址下載,目前適用於1.7.10的是9.08版。
解壓縮之後,runtime/bin目錄下面,復制出來。
(2)forge提供的版本
去上面提到的.gradle/caches/minecraft目錄下,有一個fernflower-fixed.jar文件。
目前尚不知道,mcp和forge版本的有啥差別。
復制到一個位置之後,打開命令行
java -jar fernflower.jar [要反編譯的包] [保存位置]
反編譯之後的代碼,就可以用記事本直接查看。

閱讀全文

與go二進制反編譯相關的資料

熱點內容
戴爾12代伺服器什麼時間上市 瀏覽:222
編譯器調用第三方庫 瀏覽:86
雲直播需要雲伺服器嗎 瀏覽:248
如何把py文件封裝成app 瀏覽:527
中國手機怎麼用香港app 瀏覽:847
蘋果手機怎麼把軟體放文件夾 瀏覽:447
驗證java環境 瀏覽:686
好會計用不用加密狗 瀏覽:115
SCUM伺服器如何添加到最愛 瀏覽:902
普通安卓線盤是什麼 瀏覽:54
微信lbsphp 瀏覽:50
Pc加密機怎麼用 瀏覽:591
ubuntu1204命令行 瀏覽:68
高階函數python 瀏覽:803
醫保app上如何代繳 瀏覽:581
五十一單片機的復位什麼意思 瀏覽:648
自研伺服器是什麼意思 瀏覽:733
php中寫sql語句 瀏覽:976
java比php快多少 瀏覽:393
單片機rra編程什麼意思 瀏覽:288