
Calcolo simile a Imphash su binari Golang
gimphash è un metodo proposto per calcolare un equivalente di imphash per i binari Go. Il suo nome sta per Go-import-hash.
I binari Golang contengono le loro dipendenze come parte dell'eseguibile. Queste dipendenze includono sia i pacchetti della libreria standard sia le dipendenze di terze parti e possono essere usate, analogamente a un imphash classico, per identificare un progetto Golang.
Le dipendenze possono essere elencate usando la pclntab che fa parte di ogni binario Golang (vedi anche questo post del blog di Mandiant). La pclntab contiene una serie di elementi interessanti per il reverse engineering; per il gimphash useremo i nomi delle funzioni che vi sono contenuti.
go. o type. (artefatti di compilazione, internals del runtime)vendor/, scartare quella sottostringa e tutto ciò che la precede
(ad es. trasformare vendor/golang.org/x/text in golang.org/x/text)internal/runtimesyncsyscalltypetimeunicodereflectstrconv/ nel nome della funzione. Se non viene trovato nessun /, usare l'inizio. Partendo da quella posizione, trovare il successivo .... Se non viene trovato nessun ., usare tutto ciò che segue l'indice / calcolato nel passaggio precedente.. all'interno del nome di base della funzione, ignorare la funzione se il primo carattere alfanumerico dopo quel . è un carattere minuscolo.Questo repository contiene codice proof-of-concept nei seguenti linguaggi:
La sezione release contiene binari precompilati per Windows e Linux.
Esegui il calcolatore Gimphash su un singolo file
./c_gimphash_linux /mnt/malware-repo/Godoh/godoh-windows64.exe
8200e76e42c4e9cf2bb308d76c017cbdcde5cbbf95e99e02b14d05e7b21505f3 /mnt/mal/Godoh/godoh-windows64.exe
Esegui il calcolatore Gimphash su un repository di malware
find /mnt/malware-repo/ -type f -exec ./go_gimphash_linux {} \; 2>/dev/null
...
