上篇说了基于Gopclntab结构识别GO函数,但是如果Gopclntab段没有了怎么办呢?程序是否能够正常运行呢? 经过调研后我发现,修改Gopclntab段上某些函数名和源码路径之后,程序还是可以正常运行的,那就说明,这种方法来恢复函数名是存在一定的缺陷的。 从Go的编译模式来看,是静态编译,把所有的库函数什么的都编译到程序中,也就是说,相同版本的相同函数,无论怎么编译,函数结构是不会变的,变化的只是调用一些函数或者常量等地址的变化。 项目地址:GitHub - wxm-radish/BT_tool: 基于二进制来识别Go函数基于二进制来识别Go函数 基于 gopclntab段来恢复函数符号虽然方便,但是如果这个段没有了,岂不是不能恢复了,而且这种方法受版本限制。基于二进制来识别Go函数是就防止黑客把 gopclntab段的数据修改或者删除就不能够进行恢复函数名。缺点是能够识别出来函数的多少取决于 yara 规则的多少 ida中运行BT_tools.py,进行函数识别 修改 BT_add_yara.py 中配置项: ida中运行即可 终端运行 python BT_show_all_yara.py ,如下所示:https://github.com/wxm-radish/BT_tool 敬请斧正。