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为’xfbxffxffxff’时 , entry_size=2*ptr_size为entry结构体大小 , func_tab_count为entry结构体数量;解析entry结构获取到名称信息结构数据位置偏移(需要注意64位和32位go程序func_info_offset位置相反) , 读取名称信息结构体数据 , 再从中获取到名称字符串位置偏移(name_offset) , 根据此偏移定位到函数名称字符串起始位置偏移 , 从该位置解析得到函数名称 。
方法2:
另外1.16版本go语言结构有些新变化 , magic变为’xfaxffxffxff’ , 解析头信息获取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=’xfbxffxffxff’一致 。
总结:
通过上述方法可以恢复函数真实名称 , 从而方便对go语言二进制文件的逆向分析 , 提升分析效率 。 返回搜狐 , 查看更多
【go语言逆向技术之---恢复函数名称算法】责任编辑:
- CPU|如何突破存储与运算之间的“内存墙”,这项新技术给出了更具性价比的选择
- 字节跳动|NVIDIA:应将USD作为3D互联网的HTML标准语言
- 华为|3999元!汉王新款墨水屏显示器来了:自研高刷技术加持
- 这两日一组小米12真机图在网上流传|小米12真机图流出:屏下相机技术没跑了
- 混凝土|混凝土3D打印技术正在改变建筑行业未来!
- 近日第十六届国际语义评测(The16thInternationalWorkshoponS...|科大讯飞拿下多语种语言理解领域的硬实力带动人工智能源头
- 本文转自:科技日报科技日报记者 操秀英9月1日|我国液化天然气卸料臂关键技术再获突破 可降低设备采购费用40%
- AR|NVIDIA:应将USD作为3D互联网的HTML标准语言
- 本文转自:中工网工人日报-中工网记者 杨召奎 茹晓茜 赖志凯 张千服贸会作为中国对外开放...|多家企业在服贸会上展示或发布新产品、新技术
- 我国液化天然气装备关键技术获突破 可降低设备采购费用40%