论文标题
符号执行和调试同步
Symbolic Execution and Debugging Synchronization
论文作者
论文摘要
在本文中,我们介绍了将符号执行与逆向工程的动态分析相结合的想法。与DSE不同,我们设计了一种方法,反向工程师可以使用调试器来驱动和检查应用程序代码的具体执行引擎,然后在需要时,将执行转移到符号执行程序中,以自动确定到达代码中目标点所需的输入值。之后,用户还可以将符号执行的正确输入值转移回去,以继续调试。调试器和符号执行人之间的同步可以增强手动动态分析,并允许反转器轻松地求解代码的一小部分,而无需离开调试器。我们在二进制分析框架ANGR之上实施了同步机制,从而将调试过程的状态转移到ANGR环境并返回。后端库是调试器不可知论者,可以扩展到各种前端。我们为IDA Pro调试器实施了前端,并为GNU调试器实施了一个前端,该调试器在反向工程中都广受欢迎。
In this thesis, we introduce the idea of combining symbolic execution with dynamic analysis for reverse engineering. Differently from DSE, we devise an approach where the reverse engineer can use a debugger to drive and inspect a concrete execution engine of the application code and then, when needed, transfer the execution into a symbolic executor in order to automatically identify the input values required to reach a target point in the code. After that, the user can also transfer back the correct input values found with symbolic execution in order to continue the debugging. The synchronization between a debugger and a symbolic executor can enhance manual dynamic analysis and allow a reverser to easily solve small portions of code without leaving the debugger. We implemented a synchronization mechanism on top of the binary analysis framework angr, allowing for transferring the state of the debugged process to the angr environment and back. The backend library is debugger agnostic and can be extended to work with various frontends. We implemented a frontend for the IDA Pro debugger and one for the GNU Debugger, which are both widely popular among reverse engineers.