Noch ein Golang-Binärparser für IDAPro
Englisch | 中文
HINWEIS:
Der neueste Master-Branch ist jetzt die Python3-Version. Der alte Master-Branch wurde in den Branch py2 geändert und wird vorübergehend nicht gewartet.
Anweisungen für den Python3-Branch
Diese Version wurde auf macOS/Windows, IDA7.4+ und Python3.8.x entwickelt und getestet. Falls es auf anderen Plattformen und Versionen Probleme gibt, können Sie gerne ein Issue oder einen Pull Request einreichen.
Zusätzlich ist zu beachten, dass IDA7.4 unter macOS standardmäßig Python3 verwendet, was dazu führen kann, dass von Ihnen selbst installierte Drittanbieter-Bibliotheken nicht geladen werden. Sie müssen zu dem von brew installierten Python wechseln. Spezifische Wechselmethoden finden Sie in diesem Skript.
Inspiriert von golang_loader_assist und jeb-golang-analyzer habe ich ein umfassenderes Go-Binärparsing-Tool für IDAPro geschrieben.
Hauptmerkmale:
- Lokalisieren und analysieren der firstmoduledata-Struktur in der Go-Binärdatei und Kommentare für jedes Feld erstellen;
- pclntab (PC Line Table) anhand der firstmoduledata lokalisieren und analysieren. Dann Funktionsnamen und Quellcodedateipfade in der pclntab finden, analysieren und wiederherstellen. Die Quellcodedateipfade werden im Ausgabefenster von IDAPro ausgegeben;
- Strings und String-Pointer parsen, Kommentare für jeden String erstellen und dref für jeden String-Pointer setzen;
- Gemäß firstmoduledata jeden type finden und parsen, Kommentare für jedes Attribut von type erstellen, was für Malware-Forscher sehr praktisch ist, um komplexe Typen oder Datenstrukturdefinitionen zu analysieren;
- itab (Interface Table) parsen.
Hilfreiche Informationen für die Reverse-Engineering-Arbeit an Go-Binärdateien:

Und es gibt zwei nützliche Funktionen in go_parser:
- Es funktioniert auch gut mit Binärdateien, die fehlerhafte Dateikopf-Informationen haben, insbesondere fehlerhafte Section-Header-Informationen;
- Alle oben genannten Funktionen sind gültig für Binärdateien, die mit buildmode=pie erstellt wurden.
Ein Parsing-Ergebnis einer Konfigurationsdatenstruktur in DDGMiner v5029 (MD5: 95199e8f1ab987cd8179a60834644663) wie folgt:

Und die Liste der benutzerdefinierten Quellcodedateipfade:

Projektdateien:
- go_parser.py : Einstiegsdatei, drücken Sie [Alt+F7] , wählen Sie diese Datei aus und führen Sie sie aus;
- common.py: Definition von allgemeinen Variablen und Funktionen;
- pclntbl.py: Analysieren der pclntab (PC Line Table);
- strings.py: Strings und String-Pointer parsen;
- moduldata.py: Analysieren von firstmoduledata;
- types_builder.py: Analysieren von types;
- itab.py: Analysieren von itab (Interface Table);
Zusätzlich parst str_ptr.py String-Pointer, indem Sie manuell die Start- und Endadresse der String-Pointer angeben.
Hinweis
- Dieses Tool ist in Python3 geschrieben und wurde auf IDA7.4+ getestet;
- Das String-Parsing-Modul wurde von golang_loader_assist übernommen, und ich habe die Funktion zum Parsen von String-Pointern hinzugefügt. Es unterstützt derzeit nur die x86-Architektur (32bit & 64bit).
Referenzen
- Analyse von Golang Executables
- Reverse Engineering von Go-Binärdateien wie ein Profi
- Rekonstruktion von Programmsemantik aus Go-Binärdateien.pdf
- Go二进制文件逆向分析从基础到进阶——综述
- Go二进制文件逆向分析从基础到进阶——MetaInfo、函数符号和源码文件路径列表
- Go二进制文件逆向分析从基础到进阶——数据类型
- Go二进制文件逆向分析从基础到进阶——itab与strings
- Go二进制文件逆向分析从基础到进阶——Tips与实战案例