常见的恶意软分析技术主要包含静态分析和动态分析两大类
反调试
木马程序使用反调试技术,可以阻止调试器对木马程序的加载;阻止调试器对木马程序的执行控制;阻止对木马程序设置断点;阻止调试器读取被调试进程的内存信息,进而延缓整个分析过程
Windows 系统实现了专门的调试器接口,而大多数调试器都是基于这些调试接口实现的
调试器工作机制
反病毒分析过程中,由于不可能获取到被分析软件的源码,通常使用的都是汇编级调试器
- 源码级调试器针对各种高级语言,如 Chrome 附带的 JavaScript 源码调试器、专门针对 Java 语言的调试器 JDB、Visaul Studio 开发环境自带的调试器、Windbg、GDB 和 LLDB 等
- 汇编级调试器主要针对机器语言,如 x86 平台机器指令、ARM 机器指令等,这类调试器比较有名的有 Ollydbg、Windbg、x64dbg、GDB 和 LLDB 等
- 有些调试器既支持源码级调试,也支持汇编级调试,如 Windgb、GDB、LLDB
使用 Windows 系统调试接口的调试器中,首先创建或者附加被调试程序的进程;然后启动一个调试循环,该循环不断接收各种调试事件,并根据事件的类型读取被调试进程相应的信息进行处理,最后在用户的主动干预下恢复被调试进程
通常,调试器主要有软断点、硬件断点和内存断点三种类型的断点
- 软断点是单字节的机器指令,它在暂停程序执行的同时,将程序的执行控制转交给调试器进程的断点事件处理过程。软断点通过替换设置断点处的1字节内容为O×CC实现,O×CC代表了INT 3中断指令,它通知CPU暂停执行,而引发一个INT 3事件。当调试器捕捉到这个事件并进行处理后,会恢复被设置断点处的1字节内容
- 硬件断点是在CPU级别实现的,没有修改内存内容,而是使用CPU的调试寄存器DRO~DR7。CPU通常有8个调试寄存器,DRO~DR3被用来保存设置断点的地址,DR4~DR5被保留,DR6保存断点命中后触发的事件类型,DR7决定了硬件断点是否启用,还指明了断