文件名称:介绍了几种符号执行-基于matlab的一维条形码检测
文件大小:2.93MB
文件格式:PDF
更新时间:2024-06-27 13:51:34
逆向 漏洞 挖掘 安全
北京大学博士学位论文 第三章 面向二进制程序的混合符号执行技术 记录程序执行轨迹,在对轨迹重放过程中符号计算。面向底层指令系统的符号执 行指根据底层指令的语义,符号化执行轨迹上每条指令;面向中间代码的符号执 行指将轨迹上的底层指令,翻译到中间代码,对中间代码进行符号计算。 近些年涌现出的代表性系统有SAGE[91],SmartFuzz[120],BitScope[41]等。 根据上述技术选择的差异,表3.2对这些系统进行了分类。其中,SAGE是在进 程级虚拟机iDNA [34]基础上,实现了离线混合符号计算。SmartFuzz是在二进 制植入Valgrind [125]上,实现了在线混合符号执行。BitScope是在基于系统虚拟 机Qemu[33]的在线混合符号执行系统。下章将讨论各种选择的优劣,并介绍本文 设计的离线混合符号执行系统SymReplayer。 表 3.2: 面向二进制程序混合符号执行系统分类 系统名称 系统运行平台 二进制分析平台 混合符号执行模式 指令解释层 SAGE Windows iDNA 离线 二进制层(x86) SmartFuzz Linux Valgrind 在线 中间代码层(VEX[125]) BitScope Linux Qemu 在线 中间代码层(Vine[17]) SymReplayer Windows/Linux PIN 离线 中间代码层(VEX[125]) 3.2 面向二进制的混合符号执行系统设计与实现 3.2.1 设计选择 本文设计实现了面向二进制的混合符号执行系统SymReplayer。在符号执行 模式的设计上,SymReplayer采用离线符号执行模式。图 3.2介绍了几种符号执行 模式的区别。在线符号执行需要将符号执行引擎植入到目标程序的运行空间,在 虚拟运行环境(VM Env)上,目标程序执行的同时对符号化数据进行符号演算。 基于本文的研究,并结合文献[91, 120]的讨论,我们发现在线符号执行面临以下 几个问题。首先,由于符号执行需要占用大量计算资源,在线符号执行会导致目 标程序的性能严重下降。目标程序往往在运行过程中,会由于计算资源的不足而 过早退出,限制了程序执行轨迹的深度,导致在线符号执行收集到的程序内部信 息不足。 – 31 –