如果你使用剥离符号的编译选项来编译程序,那么生成的二进制文件中,将没有符号信息,
即便如此,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