您是否可以使用高精度计时器来判断调试器是否附加到本机Windows进程,以计算将整数除以零所需的时间?
基本原理是,如果没有附加调试器,则会出现硬故障,由硬件处理并且速度非常快。如果附加了调试器,则会出现软故障,该故障会渗透到操作系统并最终到达调试器。这相对较慢。
答案 0 :(得分:4)
由于你无法阻止一个坚定的人对你的代码进行逆向工程,所以你找到的聪明方法不会比调用IsDebuggerPresent()
答案 1 :(得分:3)
没有。一个充分确定的攻击者只会在VM中托管你的进程并以这种方式中断。
此外,您不需要附加调试器来攻击程序:抓取minidump会让对手离线检查内存状态,或者使用process explorer您可以检查打开句柄以确定哪些文件容易受到攻击。
如果您要使用异常来确定是否附加了一个天真的调试器,我个人会使用INT_MIN/-1
来触发整数溢出异常。大多数人都不知道那个。
答案 2 :(得分:2)
逆向工程师使用的大多数调试器都带有影响(移除)调试器留下的99%标记的方法,大多数调试器都提供了异常过滤,这意味着速度差异将无法检测到。
首先防止调试器附加起来会更有效率,但从长远来看,除非你无法完成所需的工作投资,否则你永远不会前进。