
Cálculo semelhante a imphash em binários Golang
gimphash é um método proposto para calcular um equivalente de imphash para binários Go. Seu nome é um acrônimo de Go-import-hash.
Binários Golang contêm suas dependências como parte do executável. Essas dependências incluem tanto pacotes da biblioteca padrão quanto dependências de terceiros e podem ser usadas, de forma análoga a um imphash clássico, para identificar um projeto Golang.
As dependências podem ser listadas usando a pclntab que faz parte de cada binário Golang (veja também este artigo de blog da Mandiant). A pclntab contém vários elementos interessantes para engenharia reversa; para o gimphash usaremos os nomes de funções que estão contidos nela.
go. ou type. (artefatos de compilação, internals de runtime)vendor/, descarte essa substring e tudo antes dela
(ex.: transforme vendor/golang.org/x/text em golang.org/x/text)internal/runtimesyncsyscalltypetimeunicodereflectstrconv/ no nome da função. Se nenhuma / for encontrada, use o início. A partir dessa posição, encontre o próximo .... Se nenhum . for encontrado, use tudo após o índice da / calculado no passo anterior.. existir dentro do nome base da função, ignore a função se o primeiro caractere alfanumérico após esse . for uma letra minúscula.Este repositório contém código de prova de conceito nas seguintes linguagens:
A seção de releases contém binários pré-compilados para Windows e Linux.
Execute a calculadora Gimphash em um único arquivo
./c_gimphash_linux /mnt/malware-repo/Godoh/godoh-windows64.exe
8200e76e42c4e9cf2bb308d76c017cbdcde5cbbf95e99e02b14d05e7b21505f3 /mnt/mal/Godoh/godoh-windows64.exe
Execute a calculadora Gimphash em um repositório de malware
find /mnt/malware-repo/ -type f -exec ./go_gimphash_linux {} \; 2>/dev/null
...
