-
基于Matlab的一维条形码检测技术-面向二进制程序的混合符号执行方法
资源介绍
北京大学博士学位论文 第三章 面向二进制程序的混合符号执行技术
• 实际程序实现过程中,代码会依赖大量系统API或第三方库函数,由于没有
源代码,符号执行无法模拟执行这些调用,而这些系统API或第三方库函数
很有可能对程序执行产生很大影响,改变程序原有数据约束关系;
• 符号执行可以对标量数据单元(如整型变量)精确建模,但是处理矢量数
据单元(比如数组、字符串)面临巨大挑战。比如,在数组元素赋值时,如
果以符号变量作为索引,符号执行无法判断具体对哪个数组元素的赋值;
strncpy(str2,str1,n)将字符串str1前n个字符拷贝到字符串str2中,但是
如果n是符号变量,分析算法不能确定具体拷贝多少字符,在引用str2字符
串时无法确定内容。
随着约束求解器和符号执行引擎的计算能力不断提高,特别是在Prefix
[46]在2000年前后成功将符号执行技术应用在漏洞挖掘领域后,符号执行重新引
起了研究人员的关注。此时,研究人员不再追求挖掘技术的完备性或健全性,而
是追求挖掘方法的效率和效果,提出了很多缓解符号执行固有缺陷的策略,实现
了很多基于符号执行技术的漏洞检测工具 [172, 71]。
W. Bush等人在1998年提出了Prefix [46],并在美国申请了若干专利。微软公
司于1999年收购了Prefix,在Prefix基础上实现了Prefast。Prefix/Prefast已经成为
微软内部标准源代码静态检验工具之一。Prefix/Prefast首先分析源代码,将其转
换成抽象的语法树;然后对过程依照调用关系进行拓扑排序,再为每个过程生成
相应的抽象模型,最后静态模拟执行路径并用约束求解的方法对约束集合进行检
验。
Prefix/Prefast实现了过程间(inter-procedural)的符号执行;在模拟执行时,
Prefix可以有效检测指针变量使用相关的漏洞,如未初始化指针引用、无效指针
和空指针解引用(dereference);路径结束时,Prefix检测路径上是否存在资源泄露
等漏洞,如内存泄露,未释放的文件句柄等。为避免路径爆炸,Prefix在每个函数
内部最多只检查50条路径;在所有路径结束后,Prefix合并所有路径的结果,建
立函数的摘要,再次调用该函数时可直接应用已构建摘要,加速模拟。函数抽象
模型的提取决定了Prefix/Prefast查错的能力和精度。
– 27 –