Otro analizador de binarios Golang para IDAPro
Inglés | 中文
NOTA:
Ahora la última rama master es la versión de Python3. La rama master anterior se ha cambiado a la rama py2, y temporalmente no se mantiene.
Instrucciones para la rama Python3
Esta versión se desarrolla y prueba en macOS/Windows, IDA7.4+ y Python3.8.x. Si hay problemas en otras plataformas y versiones, le invitamos a enviar un issue o Pull Request.
Además, cabe señalar que IDA7.4 en macOS usa Python3 instalado por defecto, lo que puede causar que la biblioteca de terceros instalada por usted mismo no se cargue. Necesita cambiar a Python instalado por brew. Consulte este script para conocer los métodos de cambio específicos.
Inspirado por golang_loader_assist y jeb-golang-analyzer, escribí una herramienta de análisis de binarios Go más completa para IDAPro.
Características principales:
- Localizar y analizar la estructura firstmoduledata en el archivo binario Go, y hacer un comentario para cada campo;
- Localizar pclntab (Tabla de Líneas de PC) según el firstmoduledata y analizarlo. Luego encontrar, analizar y recuperar nombres de funciones y rutas de archivos fuente en el pclntab. Las rutas de archivos fuente se imprimirán en la ventana de salida de IDAPro;
- Analizar cadenas y punteros de cadena, hacer un comentario para cada cadena, y hacer dref para cada puntero de cadena;
- Según firstmoduledata, encontrar cada type y analizarlo, hacer un comentario para cada atributo de type, lo cual será muy conveniente para que los investigadores de malware analicen un tipo complejo o definición de estructura de datos;
- Analizar itab (Tabla de Interfaces).
Información útil para trabajos de RE en binarios Go:

Y hay dos características útiles en go_parser:
- También funciona bien para binarios con información de File Header malformada, especialmente información de Section Headers malformada;
- Todas esas características anteriores son válidas para binarios compilados con buildmode=pie.
Un resultado de análisis de una estructura de datos de configuración en DDGMiner v5029 (MD5: 95199e8f1ab987cd8179a60834644663) como se muestra a continuación:

Y la lista de rutas de archivos fuente definidas por el usuario:

Archivos del proyecto:
- go_parser.py : Archivo de entrada, presione [Alt+F7] , seleccione y ejecute este archivo;
- common.py: Definición de variables y funciones comunes;
- pclntbl.py: Analizar pclntab (Tabla de Líneas de PC);
- strings.py: Analizar cadenas y punteros de cadena;
- moduldata.py: Analizar firstmoduledata;
- types_builder.py: Analizar types;
- itab.py: Analizar itab (Tabla de Interfaces);
Adicionalmente, str_ptr.py analizará punteros de cadena especificando manualmente la dirección de inicio y la dirección final de los punteros de cadena.
Nota
- Esta herramienta está escrita en Python3 y probada en IDA7.4+;
- El módulo de análisis de cadenas fue migrado de golang_loader_assist, y agregué la funcionalidad de análisis de punteros de cadena. Solo soporta arquitectura x86 (32 bits y 64 bits) por ahora.
Referencias
- 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与实战案例