这是一个idc的脚本,其实跟C语言很像,可以用于静态漏洞挖掘
首先入口是run_analysis.idc
总体流程
- InitGlobVarArr:初始化全局Array
- SetGlobStr:设置FILENAME为我们的bin文件(通过GetInputFile()实现)
- 打开bugscam.conf配置文件(配置文件储存的是审计特定函数的idc脚本的相对路径)
- SetGlobDword将NUMBER_OF_LIBRARY_FUNCS初始化为0
- 循环读取并编译特定的idc脚本,并调用对应的audit函数,之后将NUMBER_OF_LIBRARY_FUNCS+1
- 最后关闭bugscam.conf文件并生成报告
审计过程
下面以strcpy为例说明
整体
- 先设置全局变量FUNCTION_NAME为strcpy
- 通过LocByName获得该函数的地址(经过测试是在最后extern那里的地址),如果找不到就退出了
- 生成一个空的ref格式
- 真正地去寻找调用strcpy的地方,如果那个位置的为call,则调用子审计函数
- 有点奇怪的是除了代码交叉引用之外,还使用了数据交叉引用
- 最后如果审计出有问题,这调用gen_probtbl,
子审计函数
- 先打印现在审计的函数与call的地址
- 获取目标地址和源地址的arg size,还有整个函数的buf size
- 处理分析不出目标地址和源地址的arg size的情况
- 如果目标size小于源地址size,那就很可能溢出(根据不同情况,可能性不同)
- 最后假如审计出有问题就将NUMBER_OF_PROBLEMS+1