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

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

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

【公告】 [2022大礼包]《看雪论坛精华22期》发布!收录近1000余篇精华优秀文章!

收藏
点赞0
打赏
分享
最新回复 (5)
雪    币: 1581
活跃值: 活跃值 (245)
能力值: ( LV13,RANK:460 )
在线值:
发帖
回帖
粉丝
shayi 活跃值 9 2015-3-1 22:23
2
0
LZ发几张截图来看看,这样方便定位问题所在
雪    币: 203
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
bjdudu 活跃值 2015-3-1 22:56
3
0
下面的两张图是同一个源程序通过不同的编译参数来编译的

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

第二张图是去掉符号信息的反汇编,GOLANG运行时的函数名都没了,并且GOLANG程序动辄好几兆,十几兆的,去掉符号信息后的反汇编代码也非常多,很难定位到关键代码。
上传的附件:
雪    币: 1581
活跃值: 活跃值 (245)
能力值: ( LV13,RANK:460 )
在线值:
发帖
回帖
粉丝
shayi 活跃值 9 2015-3-1 23:35
4
0
如果你使用剥离符号的编译选项来编译程序,那么生成的二进制文件中,将没有符号信息,
即便如此,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
上传的附件:
雪    币: 20
活跃值: 活跃值 (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
love米 活跃值 2017-4-2 22:53
5
0
发个样本    我可以帮你试试!
雪    币: 917
活跃值: 活跃值 (1054)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xdnice 活跃值 2018-2-24 17:02
6
0
收下附件工具了。
游客
登录 | 注册 方可回帖
返回