Mais um analisador de binários Golang para IDAPro
Inglês | 中文
NOTA:
Agora o branch master mais recente é a versão Python3. O branch master antigo foi alterado para o branch py2 e temporariamente não mantido.
Instruções para o branch Python3
Esta versão foi desenvolvida e testada no macOS/Windows, IDA7.4+ e Python3.8.x. Se houver problemas em outras plataformas e versões, você é bem-vindo para enviar uma issue ou Pull Request.
Além disso, deve-se notar que o IDA7.4 no macOS usa o Python3 instalado por padrão, o que pode fazer com que a biblioteca de terceiros instalada por você não seja carregada. Você precisa mudar para o Python instalado pelo brew. Consulte este script para métodos específicos de troca.
Inspirado pelo golang_loader_assist e jeb-golang-analyzer, escrevi uma ferramenta de análise de binários Go mais completa para o IDAPro.
Principais Recursos:
- Localizar e analisar a estrutura firstmoduledata no arquivo binário Go, e adicionar comentário para cada campo;
- Localizar pclntab (Tabela de Linhas de PC) de acordo com a firstmoduledata e analisá-la. Em seguida, encontrar, analisar e recuperar nomes de funções e caminhos de arquivos fonte na pclntab. Os caminhos dos arquivos fonte serão impressos na janela de saída do IDAPro;
- Analisar strings e ponteiros de string, adicionar comentário para cada string e criar dref para cada ponteiro de string;
- De acordo com a firstmoduledata, encontrar cada type e analisá-lo, adicionar comentário para cada atributo de type, o que será muito conveniente para pesquisadores de malware analisarem um tipo complexo ou definição de estrutura de dados;
- Analisar itab (Tabela de Interface).
Informações úteis para trabalho de RE em binários Go:

E há dois recursos úteis no go_parser:
- Também funciona bem para binários com informações de cabeçalho de arquivo malformadas, especialmente informações de cabeçalhos de seção malformados;
- Todos esses recursos acima são válidos para binários compilados com buildmode=pie.
Um resultado da análise de uma estrutura de dados de configuração no DDGMiner v5029 (MD5: 95199e8f1ab987cd8179a60834644663) como abaixo:

E a lista de caminhos de arquivos fonte definidos pelo usuário:

Arquivos do projeto:
- go_parser.py : Arquivo de entrada, pressione [Alt+F7] , selecione e execute este arquivo;
- common.py: Definição de variáveis e funções comuns;
- pclntbl.py: Analisar pclntab (Tabela de Linhas de PC);
- strings.py: Analisar strings e ponteiros de string;
- moduldata.py: Analisar firstmoduledata;
- types_builder.py: Analisar types ;
- itab.py: Analisar itab (Tabela de Interface);
Adicionalmente, o str_ptr.py analisará ponteiros de string especificando manualmente o endereço inicial e o endereço final dos ponteiros de string.
Nota
- Esta ferramenta é escrita em Python3 e testada no IDA7.4+;
- O módulo de análise de strings foi migrado do golang_loader_assist, e adicionei o recurso de análise de ponteiros de string. Atualmente, suporta apenas arquitetura x86 (32 bits e 64 bits).
Referências
- 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与实战案例