使用反调试技术查找崩溃的可执行文件的调用跟踪

逆向工程 反调试
2021-06-27 14:52:53

我的目标应用程序具有非常烦人的反调试技术。使用具有以下配置的 x32dbg 和 ScyllaHide,无论是软件断点还是硬件断点,只要遇到断点,应用程序就会立即退出。

以下是我的设置:

ScyllaHide 设置

VEH 调试器(我尝试过 Cheat Engine)捕获异常。但是,当它捕获异常时,Cheat Engine 调试器将调用堆栈显示为“空”,并且单个设置显示 0x00000000 作为返回地址,因此它没有用。但是异常代码是 0xC0000005 所以我知道这是访问冲突。

我可以使用哪些其他反反调试技术来克服当断点被击中时应用程序崩溃的机制?

2个回答

您可以使用诸如intel PIN 之类的JIT 框架来更细粒度地检查程序。然后你可以找到对此负责的确切机制,包括找到真实的调用历史,用于检测断点并使程序崩溃

编辑:因为这是关于断点被击中的时间。

内核保证调试器有机会在让被调试者处理异常(例如断点异常)之前处理它们。当断点被击中时,你确定调试器实际上是附加的吗?

我上面所说的一个例外是,如果使用 ThreadHideFromDebugger,那么内核将跳过将异常发送到调试器。这可能就是正在发生的事情。这是游戏中反RE的常用技术。

您可能会在事件查看器中看到带有断点异常 (0x80000003) 的崩溃日志,但前提是被调试对象没有注册的异常处理程序会吞下异常然后退出。