BUGSCAM功能实现跟踪解读

这是一个idc的脚本,其实跟C语言很像,可以用于静态漏洞挖掘

首先入口是run_analysis.idc

总体流程

  1. InitGlobVarArr:初始化全局Array
  2. SetGlobStr:设置FILENAME为我们的bin文件(通过GetInputFile()实现)
  3. 打开bugscam.conf配置文件(配置文件储存的是审计特定函数的idc脚本的相对路径)
  4. SetGlobDword将NUMBER_OF_LIBRARY_FUNCS初始化为0
  5. 循环读取并编译特定的idc脚本,并调用对应的audit函数,之后将NUMBER_OF_LIBRARY_FUNCS+1
  6. 最后关闭bugscam.conf文件并生成报告

审计过程

下面以strcpy为例说明

整体

  1. 先设置全局变量FUNCTION_NAME为strcpy
  2. 通过LocByName获得该函数的地址(经过测试是在最后extern那里的地址),如果找不到就退出了
  3. 生成一个空的ref格式
  4. 真正地去寻找调用strcpy的地方,如果那个位置的为call,则调用子审计函数
  5. 有点奇怪的是除了代码交叉引用之外,还使用了数据交叉引用
  6. 最后如果审计出有问题,这调用gen_probtbl,

子审计函数

  1. 先打印现在审计的函数与call的地址
  2. 获取目标地址和源地址的arg size,还有整个函数的buf size
  3. 处理分析不出目标地址和源地址的arg size的情况
  4. 如果目标size小于源地址size,那就很可能溢出(根据不同情况,可能性不同)
  5. 最后假如审计出有问题就将NUMBER_OF_PROBLEMS+1
打赏专区