GO逆向入门
Golang
golang 是谷歌开发的一个静态语言,现在有很多恶意程序使用Go语言开发
Go二进制文件逆向分析从基础到进阶——综述-安全KER - 安全资讯平台
Go语言基本结构
Go语言中有些信息会一直保留在程序中,用于实现单文件直接运行而不需要环境,同时由于反射和stack trace,所以保留的信息非常多,如果找到了这些信息,就可以直接恢复符号表
go_parser/README_cn.md at master · 0xjiayu/go_parser
用这里的介绍来说,基本信息如下:
- Meta information
- Go version
- Build ID
- GOROOT
- strings and string pointer(字符串指针)
- runtime symbol infomation(pclntab)
- 函数名称表
- 源代码路径表
- runtime type infomation
- interface table
- 接口类型
- 真实类型与绑定方法
pclntab
Program Counter Line Table程序计数器行数映射表/运行时符号表。程序出错时,runtime将从中得到对应的包名,文件名,方法或函数以及出错的行,最后才能输出出来,所以这里有很多有用的信息
这里最重要的函数表和函数名称表,它们的偏移都是相对于pclntab进行的
恢复符号表
mandiant/GoReSym: Go symbol recovery tool
Ready, Set, Go — Golang 内部原理和符号恢复 |Google Cloud 博客
0xjiayu/go_parser: Yet Another Golang binary parser for IDAPro
一般来说,这几个就够了,但是如果加了混淆,把符号表和符号名称表的内容(偏移)删了,那就得手动还原了,就很麻烦,所以这种还是用bindiff和sig文件吧
调用约定
技巧
对于这种根本看不懂的代码,对函数测试还是用黑盒吧,一般来说一个用户函数后面就有一个库调用函数,用汇编流程图反而好看一点
评论