gimphash 是一种为 Go 二进制文件计算等效 imphash 的方法。其名称代表 Go-import-hash。
Golang 二进制文件会将依赖项作为可执行文件的一部分包含在内。这些依赖项既包括标准库包,也包括第三方依赖,可以像经典的 imphash 一样用于识别 Golang 项目。
依赖项可以通过每个 Golang 二进制文件自带的 pclntab 列出(另请参阅 Mandiant 的这篇博客文章)。pclntab 包含许多对逆向工程有价值的元素;对于 gimphash,我们将使用其中包含的函数名称。
go. 或 type. 开头的函数名称(编译产物、运行时内部)vendor/,则丢弃该子字符串及其前面的所有内容
(例如,将 vendor/golang.org/x/text 转换为 golang.org/x/text)internal/ 的函数名称runtimesyncsyscalltypetimeunicodereflectstrconv/。如果没有找到 /,则从开头开始。从该位置起,找到下一个 .。. 之后的所有内容提取为基本函数名称。如果没有找到 .,则使用上一步计算出的 / 索引之后的所有内容。.,则在该 . 之后的第一个字母数字字符是小写字母时忽略该函数。本仓库包含以下语言的概念验证代码:
发布 部分包含适用于 Windows 和 Linux 的预构建二进制文件。
对单个文件运行 Gimphash 计算器
./c_gimphash_linux /mnt/malware-repo/Godoh/godoh-windows64.exe
8200e76e42c4e9cf2bb308d76c017cbdcde5cbbf95e99e02b14d05e7b21505f3 /mnt/mal/Godoh/godoh-windows64.exe
对恶意软件仓库运行 Gimphash 计算器
find /mnt/malware-repo/ -type f -exec ./go_gimphash_linux {} \; 2>/dev/null
...
