首页
社区
课程
招聘
[求助]golang程序在编译时去掉了符号信息,怎么逆向?
发表于: 2015-3-1 21:02 17975

[求助]golang程序在编译时去掉了符号信息,怎么逆向?

2015-3-1 21:02
17975

golang程序在编译时去掉了符号信息,怎么逆向?IDA打开全是一堆不知所云的CALL,求高手指明方向,谢谢。


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 3
支持
分享
最新回复 (5)
雪    币: 1604
活跃值: (640)
能力值: ( LV13,RANK:460 )
在线值:
发帖
回帖
粉丝
2
LZ发几张截图来看看,这样方便定位问题所在
2015-3-1 22:23
0
雪    币: 204
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
下面的两张图是同一个源程序通过不同的编译参数来编译的

第一张图是没有去掉符号信息的反汇编,可以看到GOLANG运行时的各函数名,分析起来要容易得多

第二张图是去掉符号信息的反汇编,GOLANG运行时的函数名都没了,并且GOLANG程序动辄好几兆,十几兆的,去掉符号信息后的反汇编代码也非常多,很难定位到关键代码。
上传的附件:
2015-3-1 22:56
0
雪    币: 1604
活跃值: (640)
能力值: ( LV13,RANK:460 )
在线值:
发帖
回帖
粉丝
4
如果你使用剥离符号的编译选项来编译程序,那么生成的二进制文件中,将没有符号信息,
即便如此,IDA 应该还是能识别这些函数的(这些去掉符号的函数是库函数),这是因为IDA 内置了许多常见编译器库的签名文件(以sig后缀的),
只要去掉符号的函数是由编译器自行添加的,而非程序员编写的函数,并且IDA有对应的sig文件,就绝对能识别,还原成函数名.
如果IDA的sig目录中没有生成你那个程序的编译器的对应sig文件,那就无法识别,它会以类似图中的 sub_xxxxx  的名称代替函数真实名称.
这对逆向分析的影响不大,因为两种情况下,输出的反汇编代码应该是相同的,只是函数名称,类型,参数以及返回值等信息无法正确显示.

如果要让IDA能正确显示去掉符号的二进制文件的库函数(用户函数是无法显示真实名称的,即便通过按F5调用hex-rays的反编译插件,输出的函数名也是假名,这个你应该知道)
首先要确认并找到生成这个二进制文件的编译器(估计不是 visual c++系列,因为IDA已经内置了该编译器的sig签名文件,即便剥离符号,也能识别)
安装编译器后,设法提取编译器安装目录下的各种运行时库,静态库等文件,然后使用hex-rays官方提供的flair工具,后者可以通过编译器库文件,生成sig文件,把生成的sig文件放在IDA安装目录的sig子目录下,以IDA加载二进制程序,在反汇编代码清单窗口中,按下热键 shift + f5 ,这样会打开
IDA加载的sig文件列表,在其中添加你先前通过flair工具制作的sig文件到列表中,点应用后,IDA就能识别了.
还有一个最简单的方法,就是不要用去除符号的编译选项来编译该程序,这样IDA就可以像你的第一张图那样识别

我这里有一个IDA的FLAIR库函数签名制作工具的压缩包,这个是与IDA6.3版基本同一时期发布的,最新版的IDA应该可以识别它制作出来的sig文件,关于sig文件的制作过程,你可以参考
压缩包中的安装说明文档.

flair63.zip
上传的附件:
2015-3-1 23:35
0
雪    币: 24
活跃值: (27)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
发个样本    我可以帮你试试!
2017-4-2 22:53
0
雪    币: 1482
活跃值: (2553)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
收下附件工具了。
2018-2-24 17:02
0
游客
登录 | 注册 方可回帖
返回
//