反调试技术总结
总结了一下网上的反调试技术,记录一下
一、使用WindowsAPI :
1.IsDebuggerPresent
2.CheckRemoteDebuggerPresent ->call NtInformationProcess( 2参数ProcessInformationClass)
3.NTQueryObject(2参数ObjectInformationClass)检查调试对象
4.NTQuerySystemInformation( 1参数SystemInformationClass)
5.ZwSetInformationThread(2参数ThreadInformationClass)设置ThreadHideFromDebugger,使线程与调试器强制分离
二、手动检测数据结构
1.IsDebuggerPresent 查看peb
2.ProcessHeap 查看PEB结构的0x18处 ProcessHeap中的ForceFlags和Flags
3.检测NTGlobalFlag
三、检测调试器:
1.注册表项:
SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug(32位系统)
SOFTWARE\Wow6432Node\Microsoft\WindowsNT\CurrentVersion\AeDebug(64位系统)
2.窗口检测:
FindWindow EnumWindow
3.进程检测
4.检测父进程
5.是否有SeDebugPrivilege权限
6.检测时间差
使用rdtsc指令
使用QueryPerformanceCounter和GetTickCount
7.断点检测
软件断点
硬件断点
8.执行代码校验和检查
四、干扰调试器
1.使用TLS回调
2.使用异常
int 3
int 2d
设TF单步异常
汇编插入异常
五、加密,加花
详解见相关博客:http://bbs.pediy.com/thread-212371.htm
http://blog.csdn.net/qq_32400847/article/details/52798050