调试器是软件开发和分析中不可或缺的元素,计算机工程师积极使用它们来提高效率、检测安全漏洞并修复软件程序中的错误。此外,调试器还被用作软件逆向工程和恶意软件分析的有价值工具。已经有一系列商业化和开源调试软件提供便利功能以满足这些需求[19,22,76,89,98]。随着逃避和混淆方法的复杂性与精度的显著增长,为了分析、检测和理解恶意软件,必须提供强大的调试器。
现代二进制可执行文件配备了打包[101]、逃避[29]和硬件辅助技术[49,74]等武装,并采用了一系列方法(例如对特定操作系统API的调用)来阻止调试,其中包括反虚拟化[5]、反仿真[55]以及副作用和足迹检测[1]。尽管社区中有许多有价值的努力开发出透明有效的分析方法[26,27,73,82,100,102],但目前可用的调试工具仍然难以应对现代受保护程序和恶意软件。这些工具缺乏复杂的内核级组件,无法提供用于逆向工程目的的深入审查。对400万个恶意软件样本进行全面分析显示,88%配备了反逆向技术,81%配备了反调试或虚拟化技术[9]。利用操作系统API [11] 或利用环0选项[35] 会导致高权限恶意软件检测到痕迹和泄漏。