结构化异常处理(Structured Exception Handling ,简称SEH)是Windows操作系统处理程序错误或异常的技术。
两种类型的异常处理句柄:
一种是final型的,这是在异常未能得到线程相关处理例程处理操作系统在即将关闭程序之前会回调的例程,这个例程是进程相关而不是线程相关的,因此无论是哪个线程发生异常未能被处理都会调用这个例程.
另一种是per_Thread Exception Handler->线程相关的异常处理,通常每个线程初始化准备好运行时fs指向一个TIB结构 (THREAD INFORMATION BLOCK),这个结构的第一个元素fs:[0]指向一个_EXCEPTION_REGISTRATION结构 。
当Windows检测到异常时,执行线程立即被中断 ,处理从用户模式转向了内核模式,控制权交给了异常调试程序,它负责查找处理新异常的方法。
反调试技术
检测内核模式调试器
利用NT的ZwQuerySystemInformation()或NtQuerySystemInformation()检测内核模式调试器。
检测用户模式调试器
利用NT的ZwQueryInformationProcess()或NtQueryInformationProcess()检测使用Win32 Debug API的用户模式调试器。
检测API断点
对于比较关键的API,可以检测其是否被设置了断点,即检查该API的入口的第一个字节是否为Int 3指令。
花指令
花指令是一堆汇编指令组成,对于程序来说,是一堆废话,加不加花指令都不影响程序的正常运行.编写的花指令要终始保持堆栈的平衡。花指令的作用是干扰反汇编。
花指令的指令含意:
push ebp ----把基址指针寄存器压入堆栈
pop ebp ----把基址指针寄存器弹出堆栈
push eax ----把数据寄存器压入堆栈
pop eax ----把数据寄存器弹出堆栈
nop -----不执行
mov edi,edi-----和nop效果一样
add esp,1-----指针寄存器加1
sub esp,1-----指针寄存器减1
inc ecx -----计数器加1
dec ecx -----计数器减1
子明最近一直在研究有关逆向分析的技术。上面的就是我的一点研究,不知道大家是否还能够满意。我以后还会为大家服务,写出更加通俗易懂的文章来。
【51CTO.COM 独家特稿,转载请注明出处及作者!】
【相关文章】
| 共3页: 上一页 [1] [2] 3 | |||||
|