遇到静态编译且符号表被抠除的程序(如下图),很不利于分析

img

以下介绍恢复符号表的几种方法

1. IDA flair

flair通过选择的签名文件和程序中的函数进行签名匹配来帮助我们还原库函数
其中签名文件可以从sig-database中获取,有制作好的各架构各版本签名文件

使用方法

  1. 将签名文件(sig文件)导入到IDA的对应签名目录下IDAx.x\sig\pc
  2. IDA中按住SHIFT+F5
  3. 右键选择Apply new signature...
    img
  4. 选择签名文件进行匹配
    img
  5. 多尝试几个签名文件,直到成功匹配函数数量最多(Ctrl+Z 撤销之前选择的签名文件)
    img
    可以看到很多函数名已经恢复,代码也就好分析多了

总结

这种方法恢复符号表无需联网,但恢复有时效果也不好,在某些不能联网的比赛中可以作为首选

2. 自动检测脚本lscan

lscan可以自动检测静态二进制程序使用的libc版本

使用方法

1
2
3
4
git clone https://github.com/maroueneboubakri/lscan
cd lscan
python lscan -S [签名文件所在目录] -f [待检测文件]
# python lscan -S ./i386/sig -f ../bin

3. IDA Finger插件

Finger是阿里云·云安全技术实验室推出的一款二进制函数符号识别引擎,可以识别二进制程序中的库函数与常见的第三方函数,快速定位恶意代码,提高样本分析效率

使用方法

  1. pip 安装finger_sdk
    pip install finger_sdk
    注意安装Finger的python的版本要与IDAPython的版本一致
  2. Finger IDA plugin复制到IDA插件目录IDAx.x\plugins
  3. 重启IDA 在顶部菜单栏中可以看见Finger,选择支持单个函数、选中的多个函数和全部函数识别

总结

这种方法识别精度高,但需要联网并且函数较多时速度很慢

⬆︎TOP