Go语言逆向技术:恢复函数名称算法
摘要:在对程序做安全审计、漏洞检测时,通常都需要对程序做逆向分析,本文在没有符号表的情况下,提出了一种恢复函数名称的算法,方便对go语言二进制文件进行逆向分析,提升分析效率。
本文分享自华为云社区《go语言逆向技术之---恢复函数名称算法》,作者:安全技术猿。
go语言是最近几年发展非常火的一种语言,它具备和C/C++一样的运行速度快的优点,同时又具备开发效率高,支持包管理机制高阶语言特点。其编译出来的二进制文件格式和C/C++一样运行在Linux平台下是elf格式,运行在windows平台下是pe格式,但同时在二进制文件的内部细节上go语言有自己特有的属性,二进制逆向人员可以利用go语言这些特有属性来来实现对二进制文件进行更精准的逆向分析。
特性1:利用go语言中特有的节信息来判断elf/pe文件的源代码语言类型,是go语言还是C、c++语言。
通过判断二进制文件中是否存在“.noptrdata”、“.gopclntab”、“.data.rel.ro.gopclntab”确定源代码,如果存在上述节名称,则源代码为go语言;
特性2:在没有符号表的情况下如何恢复函数名称。
我们知道在C/C++编译出来的二进制文件中,如果没有符号表信息是没法看到函数名称的,在IDA工具中只能看到地址信息。
go语言怎么来恢复函数名称呢,可以通过从.data.rel.ro节来恢复函数名,具体查找定位算法如下:
方法1:
解析解头信息可以获取magic, quantum, ptr_size, func_tab_count数据,当magic为’\xfb\xff\xff\xff’时,entry_size = 2 * ptr_size为entry结构体大小,func_tab_count 为entry结构体数量;解析entry结构获取到名称信息结构数据位置偏移(需要注意64位和32位go程序 func_info_offset位置相反),读取名称信息结构体数据,再从中获取到名称字符串位置偏移(name_offset),根据此偏移定位到函数名称字符串起始位置偏移,从该位置解析得到函数名称。
方法2:
另外1.16版本go语言结构有些新变化,magic变为’\xfa\xff\xff\xff’,解析头信息获取func_tab_cnt, file_cnt, func_name_off, cu_off, filetab_off, pctab_off, func_tab_off数据,其中func_tab_off为entry数据起始位置,解析entry结构获取code_off, func_info_offset数据,后续解析过程与magic=’\xfb\xff\xff\xff’一致。
总结:
通过上述方法可以恢复函数真实名称,从而方便对go语言二进制文件的逆向分析,提升分析效率。
可以试试下面的漏扫服务,看看系统是否存在安全风险:>>>漏洞扫描服务

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Committer 郭吉伟专访:做开源不是搞慈善,用开源也不是薅羊毛
踩着 11 月的尾巴,Apache Pulsar 迎来了一位新 committer——郭吉伟。郭吉伟目前在 StreamNative 做 Pulsar 主项目与其周边生态的开发工作,也是 MoP(MQTT-on-Pulsar)的 maintainer。同时,他也是 Apache DolphinScheduler 的 PMC 成员。我们采访了这位拥有多重身份的开源人,与他聊一聊在 Apache Pulsar 社区的经历和感想。(以下内容采用第一人称。) 个人简介 大家好,我是郭吉伟,很荣幸成为 Apache Pulsar committer 并通过采访与大家见面。我目前在 StreamNative 做 Pulsar messaging 相关的开发工作,主攻 MoP(MQTT-on-Pulsar),也是 MoP 项目的 maintainer。 “古早” Pulsar 项目爱好者 我应该是国内很早期了解到 Pulsar 的那批人了。Pulsar 中文社区在 2019 年成立,然而我和 Pulsar 的缘分可以追溯到 2016 年。当时公司的基础架构使用的是 RocketMQ,我通过开源了解到...
- 下一篇
万字详解什么是生成对抗网络GAN
摘要:这篇文章将详细介绍生成对抗网络GAN的基础知识,包括什么是GAN、常用算法(CGAN、DCGAN、infoGAN、WGAN)、发展历程、预备知识,并通过Keras搭建最简答的手写数字图片生成案。 本文分享自华为云社区《[论文阅读] (06) 万字详解什么是生成对抗网络GAN?经典论文及案例普及》,作者:eastmount。 一.GAN简介 1.GAN背景知识 Ian Goodfellow因提出了生成对抗网络(GANs,Generative Adversarial Networks)而闻名, GAN最早由Ian Goodfellow于2014年提出,以其优越的性能,在不到两年时间里,迅速成为一大研究热点。他也被誉为“GANs之父”,甚至被推举为人工智能领域的顶级专家。 实验运行结果如下图所示,生成了对应的图像。 或许,你对这个名字还有些陌生,但如果你对深度学习有过了解,你就会知道他。最畅销的这本《深度学习》作者正是Ian Goodfellow大佬。 在2016年,Ian Goodfellow大佬又通过50多页的论文详细介绍了GAN,这篇文章也推荐大家去学习。 Yann LeCun称...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- Hadoop3单机部署,实现最简伪集群
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS关闭SELinux安全模块
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- 2048小游戏-低调大师作品