你可以通过使用一个高精度定时器来检测一个debugging器是否被附加到你的本机Windows进程中,用一个整数除以多长时间?
其基本原理是如果没有连接debugging器,就会出现一个硬件故障,由硬件来处理,速度非常快。 如果连接了一个debugging器,则会得到一个软错误,这个错误会渗透到操作系统,最终会被debugging器渗透。 这比较慢。
反向工程师使用的大多数调试器都带有影响(移除)调试器留下的99%标记的方法,这些调试器中的大多数都提供了异常过滤,这意味着速度差异将无法检测到。
它更有效地阻止调试器的附加,但从长远来看,除非您做出必要的努力投资是不可行的,否则您将永远无法领先。
既然绝对没有什么可以阻止确定的人对你的代码进行逆向工程,你找到的聪明的方法将比调用IsDebuggerPresent()
好得多,
没有。一个足够坚决的攻击者可以简单地把你的进程托管在虚拟机中,然后以这种方式破坏
另外,你不需要附加一个调试器来攻击一个程序:抓取一个小型转储器可以让攻击者离线检查内存状态,或者使用进程管理器,你可以检查打开的句柄,以确定哪些文件是脆弱的。
如果您打算使用异常来确定是否连接了一个天真的调试器,我个人使用INT_MIN/-1
触发整数溢出异常。 大多数人不知道那个。