看过几种反调试策略,想知道有没有一些反调试方法可以评估程序运行时间,从而检测调试器的存在。
如何使用一些“时间”检查策略来检测调试器?
逆向工程
调试器
反调试
2021-07-10 15:38:32
2个回答
这是一个相当广泛的主题:-) 有几个例子:
GetTickCount()
- 检索自系统启动以来经过的毫秒数。将它们放在程序的不同部分,然后检查差异可以为您提供一些原始检测。time()
- 获取当前日历时间。RDTSC
- 获取处理器时间戳计数器的当前值。如果放置得当,这个可能很难找到。
问题是,一旦研究人员意识到它们,所有这些都可以被中和。有各种调试器插件可以通过修补 API、安装驱动程序等来实现这一点。当然,在大多数情况下可以手动完成。
您真正应该考虑的是将它们放置和集成到您的代码中,因此调用 API/指令的真正目的将不太明显。
有 CPU 指令和 OS API 可以实现这一点,例如
RDPMC
RDTSC
GetLocalTime
GetSystemTime
GetTickCount
KiGetTickCount
QueryPerformanceCounter
timeGetTime
结果是通过请求当前时间,执行某种 CPU 密集型操作(或要求调试代码的人这样做,例如单步执行),再次请求时间,然后计算两者之间的差值来实现的。如果增量明显大于您在本机执行模式下的预期,则表明存在调试器。但是请注意,这远不是一种准确的方法,因为该结果与重负载下的系统无法区分。
这在我的“终极”反调试参考 ( http://pferrie.host22.com/papers/antidebug.pdf ) 的“(C) 执行时间”部分中有详细介绍
其它你可能感兴趣的问题