Go二进制分析基础
Go二进制分析基础
ELF 文件解析
Go 标准库不直接支持 ELF 解析,但有优秀的第三方库:
import "github.com/Binject/debug/elf"
f, _ := elf.Open("binary")
for _, sym := range f.Symbols {
fmt.Println(sym.Name)
}PE 文件解析
import "github.com/Binject/debug/pe"
f, _ := pe.Open("binary.exe")
for _, imp := range f.Imports {
fmt.Println(imp.Name)
}字符串提取
func extractStrings(data []byte, minLen int) []string {
var result []string
var current []byte
for _, b := range data {
if b >= 32 && b < 127 {
current = append(current, b)
} else {
if len(current) >= minLen {
result = append(result, string(current))
}
current = nil
}
}
return result
}二进制特征匹配
通过 YARA 规则匹配二进制文件中的特征模式。
总结
Go 的二进制处理能力正在不断增强。虽然不如 Python 的 pefile 成熟,但 Go 的性能优势在处理大文件时非常明显。