反跟踪技术中——扰乱跟踪

利用SEH反调试

在SEH的机制下,当发生异常时,操作系统会接收这个异常然后调用进程中注册的SEH处理,但这样的异常发生在调试中时,异常就会由调试器来接收处理,根据这个特征就可用来反调试。

EXCEPTION_BREAKPOINT是断点异常,若程序处于调试运行状态。则系统会立刻停止运行程序,并将控制权交给调试器。所以当遇到int3指令时,正常运行的程序会调用SEH中的代码处理,而调试中的程序什么也不做直接运行后面的代码,而后面的代码通常是错误的。那么关键点就在SEH的处理函数中了,通常会修改EIP的值。不过我们可以使调试器忽略int3异常来简单的使这种反调试无效

UnhandledExceptionFilter函数在没有注册SEH且发生异常时被操作系统调用,这个函数内部会运行系统内部最后一个异常处理器,这个异常处理器通常叫做Top Level Exception Filter或Last Exception Filter,而这个函数可以通过使用SetUnhandledExceptionFilter来设置,它的参数就是Last Exception Filter函数的地址。在UnhanledExceptionFilter函数中,会使用NtInformationProcess函数,且第2个参数为7,表示DebugPort,来检测调试状态,若程序处于非调试状态,则正常运行异常处理器,若程序是在调试状态运行,则将异常处理工作交个调试器,这样异常处理器无法执行,使得程序运行会出错,就可以用来进行反调试,并且我们可以在异常处理器中再进行一次调试检测来反调试,这样的保护要去除是比较麻烦的。要除掉这种反调试,需要先跟入UnhandledException API中,修改NtInformationProcess函数的返回结果,然后跟进Last Exception Filter中,这时才是真的反调试代码,分析并去除即可。

Timing Check

显然,在调试器中执行程序比正常执行要慢得多,Timing check通过检测时间差来判断程序的调试情况,若时间差大于了某一个数值,则判断为调试状态。

时间间隔的测量方法大概分为两类,一是利用CPU的计数器,有RDTSC,NtQueryPerformanceCounter和GetTickCount();二是利用系统的实际时间,有timeGetTime(),_ftime()等。

x86 CPU中存在一个名为TSC(Time Stamp Counter)的64位寄存器,CPU对每个Clock Cycle进行计数,然后保存到TSC。汇编指令RDTSC可以将TSC的值保存到edx:eax中

要去除这种反调试从逻辑上来说就很容易,所以往往它们不会单独出现,要与其他反调试技术一起才有更好的效果。

陷阱标志

EFLAGS寄存器第九个比特位是陷阱标志,陷阱也是一种异常。

当TF(Trap Flag)设置为1时,CPU进入单步执行模式,在这种模式下,CPU每执行1条指令都会触发1个EXCEPTION_SINGLE_STEP异常,这个异常可以与SEH结合来进行反调试。由于无法直接对EFLAGS寄存器进行修改,可以通过以下指令使TF变为1

pushfd

or ss:[esp],0x100

popfd

这样,当执行下一条指令时,就会触发一个异常,我们可以通过SEH来配合进行反调试。

int 2D

int 2D使内核模式中的断点异常,在用户模式中也会触发异常,但在调试状态却不会发生异常。这条指令在调试状态下有几个特性,首先是会忽略它;然后忽略这条指令之后的1字节;这之后使用单步执行会直接执行到底,即StepInfo,StepOver都会变为Run,这条特性是调试器的bug,像ollydbg,x64dbg这样的调试器,当指令在程序执行过程中发生改变,则程序不能单步暂停,它会继续运行到下一个断点为止,因为在忽略了1字节后,代码字节的顺序被打乱了。

int 2D本质上是一种混淆方法,在调试过程中如果不对他进行任何处理,那么其之后的代码会被完全打乱,导致程序执行错误;而在正常执行的情况下,它会触发一个异常,再交由SEH来处理。要去除掉它,可以利用陷阱标志,若TF是1,则不会忽略那1字节,并会直接到达SEH代码处。

0xcc探测

再调试的过程中,最常使用的断点就是软件断点0xcc,一旦对某条指令下了软件断点,虽然再调试器中看不到变化,但实际上它在内存中的操作码已经变成了0xcc,如果能检测到这条指令,也就表示程序处于调试状态了。

但由于0xcc也可能存在于操作数中,因此难以仅通过扫描的方式来判断断点的位置,所以还需要利用其他方法。

1.api断点

通常在动态分析的过程中,对API下断点是一个常用的下断方式,所以只要检测各个API第一个字节是否为0xcc即可判断调试状态

2.比较校验和

猜你喜欢

转载自blog.csdn.net/qq_35713009/article/details/86603677
今日推荐