反调试技术

一. 使用Windows API函数

1. IsDebuggerPresent函数

2.CheckRemoteDebuggerPresent函数

3.OutputDebuggerPresent函数

二. 手动检测数据结构

1. 检测BeingDebugged属性

BeingDebugged属性位于PEB结构的第二个字节位置处

mov eax, dword ptr fs:[30h];//fs:[30h]指向的是PEB的基地址
mov ebx, byte ptr [eax+2];// 指向对应的BeingDebugged属性
test ebx, ebx;
jz ... ;

2. 检测系统痕迹

遍历当前运行进程,查看是否存在调试器进程,或者使用FinWindow函数查看。

三. 识别调试器行为

1. 扫描是否存在INT3断点

INT3断点的机器码是0xcc

call $+5;
pop edi;
sub edi, 5;
mov ecx, 400h;
mov eax, 0cch;
repne scasb;
jz DebuggerPresent;

2. 时钟检测

通过对比两次运行的时间戳来判断是否存在调试器,因为如果存在调试器,运行速度会大幅度的降低。
使用rdtsc指令实现

rdtsc;
xor ecx, ecx;
add ecx, eax;//第一次运行时间
rdtsc;
sub eax, ecx;//计算两次运行时间的差值
cmp eax, 0xfff;//比较是否运行时间过长
jb NoDebuggerDetected;
内容来源于网络如有侵权请私信删除

文章来源: 博客园

原文链接: https://www.cnblogs.com/ONEZJ/p/17644721.html

你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!