Yet Another Golang binary parser per IDAPro
English | 中文
NOTA:
Ora il ramo master più recente è la versione Python3. Il vecchio ramo master è stato rinominato in py2, e temporaneamente non mantenuto.
Istruzioni per il ramo Python3
Questa versione è sviluppata e testata su macOS/Windows, IDA7.4+ e Python3.8.x,
Se ci sono problemi su altre piattaforme e versioni, siete invitati a segnalare un issue o inviare Pull Request.
Inoltre, va notato che IDA7.4 su macOS utilizza Python3 installato di default, il che potrebbe impedire il caricamento di librerie di terze parti installate da voi. È necessario passare a Python installato tramite brew. Per il metodo di cambio specifico, fare riferimento a questo script.
Ispirato da golang_loader_assist e jeb-golang-analyzer, ho scritto uno strumento di parsing per binari Go più completo per IDAPro.
Funzionalità principali:
- Individuare e analizzare la struttura firstmoduledata nel file binario Go, aggiungendo commenti per ogni campo;
- Individuare pclntab (PC Line Table) in base a firstmoduledata e analizzarlo. Quindi trovare, analizzare e recuperare i nomi delle funzioni e i percorsi dei file sorgente all'interno di pclntab. I percorsi dei file sorgente verranno stampati nella finestra di output di IDAPro;
- Analizzare stringhe e puntatori a stringhe, aggiungere commenti per ogni stringa e creare dref per ogni puntatore a stringa;
- In base a firstmoduledata, trovare ogni type e analizzarlo, aggiungendo commenti per ogni attributo del type, il che sarà molto comodo per i ricercatori di malware nell'analizzare tipi complessi o definizioni di strutture dati;
- Analizzare itab (Interface Table).
Informazioni utili per il reverse engineering di binari Go:

E ci sono due funzionalità utili in go_parser:
- Funziona correttamente anche per binari con informazioni malformate nell'File Header, specialmente informazioni errate nei Section Headers;
- Tutte le funzionalità sopra sono valide per binari compilati con buildmode=pie.
Un risultato di parsing di una struttura dati di configurazione in DDGMiner v5029 (MD5: 95199e8f1ab987cd8179a60834644663) come mostrato di seguito:

E l'elenco dei percorsi dei file sorgente definiti dall'utente:

File del progetto:
- go_parser.py :File di ingresso, premere [Alt+F7] , selezionare ed eseguire questo file;
- common.py: Definizione di variabili e funzioni comuni;
- pclntbl.py: Analisi di pclntab (PC Line Table);
- strings.py: Analisi di stringhe e puntatori a stringhe;
- moduldata.py: Analisi di firstmoduledata;
- types_builder.py: Analisi di types ;
- itab.py: Analisi di itab (Interface Table);
Inoltre, str_ptr.py analizza i puntatori a stringhe specificando manualmente l'indirizzo di inizio e fine dei puntatori a stringhe.
Nota
- Questo strumento è scritto in Python3 e testato su IDA7.4+;
- Il modulo di parsing delle stringhe è stato migrato da golang_loader_assist, e ho aggiunto la funzionalità di parsing dei puntatori a stringhe. Per ora supporta solo architettura x86 (32bit e 64bit).
Riferimenti
- Analyzing Golang Executables
- Reversing GO binaries like a pro
- Reconstructing Program Semantics from Go binaries.pdf
- Go二进制文件逆向分析从基础到进阶——综述
- Go二进制文件逆向分析从基础到进阶——MetaInfo、函数符号和源码文件路径列表
- Go二进制文件逆向分析从基础到进阶——数据类型
- Go二进制文件逆向分析从基础到进阶——itab与strings
- Go二进制文件逆向分析从基础到进阶——Tips与实战案例