8.9 RDTSC时钟检测反调试
RDTSC时钟检测同样可实现反调试检测,使用时钟检测方法是利用rdtsc
汇编指令,它返回至系统重新启动以来的时钟数,并且将其作为一个64位的值存入EDX:EAX
寄存器中,通过运行两次rdstc
指令,然后计算出他们之间的差值,即可判定对方是否在调试我们的程序。
可以利用时钟检测技术来检测程序是否被调试器附加,其实现基本思路如下:
- 获取当前时间戳 T1,即通过执行 rdtsc 指令获取当前 CPU 时钟计数器的值。
- 执行一段代码,例如随机生成一个数字或者MessageBox等,使得程序中断一些时间,防止被调试器单步跟踪。
- 获取当前时间戳 T2,即通过再次执行 rdtsc 指令获取当前 CPU 时钟计数器的值。
- 计算时间戳之差,即 T2-T1,如果该差值较小,则表明程序正在被调试器跟踪。
#include <Windows.h>
#include <stdio.h>
BOOL IsDebug()
{
int Debug = 0;
__asm
{
rdtsc // 调用时钟
xor ecx, ecx
add ecx, eax // 将eax与ecx相加
rdtsc // 再次调用时钟
sub eax, ecx // 两次结果做差值
mov Debug, eax
}
printf("打印差值: %d \n", Debug);
if (Debug >= 21)
{
return TRUE;
}
return FALSE;
}
int main(int argc, char * argv[])
{
if (IsDebug())
{
printf("[-] 进程正在被调试 \n");
}
system("pause");
return 0;
}
文章出处:https://www.cnblogs.com/LyShark/p/17731853.html
本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
2021-09-27 Linux 多种方式实现文件共享