附加调试器时的 ACCESS_VIOLATION

逆向工程 拆卸 视窗 部件 x86
2021-07-02 21:16:58

我调试软件和它击中access violationwcslen下调试器的功能,但正常运行离不开它。

首先我认为它有一些反调试技巧,但我在可执行文件中找不到任何指示符,我也找不到任何带有access violation.

我试过同时使用它们x64dbgwindbg但它们都遇到了同样的问题。我还使用管理员权限启动了它们,因为我认为某些事情可能需要权限,但错误并没有消失。

这是wcslen导致这种情况的内部确切行

mov cx, word ptr ds:[eax]

eax指向的地址EF415351非常大。

所以我的问题是,是否有任何反调试技术涉及access violation如何解决此错误?

我可以修补程序以便它记录wcslen参数,然后我将在调试器和正常执行下比较它的参数,也许会发现一些有趣的东西。

PS 在调试器下启动应用程序时我也遇到同样的错误,所以在它下附加或运行没有任何区别。

1个回答

是否有任何涉及访问冲突的反调试技术?如何解决此错误?

就在这里。它被称为Windows 的结构化异常处理程序请参阅此问题,我在其中介绍了这种技术的实现。

基本上,它依赖于这样一个事实,即在正常执行时,当发生异常时,控制权会转移到为此类异常注册的处理程序,并且正如我在给出链接的问题中所示,可以继续执行甚至,在正常情况下程序会崩溃。但是,在调试器中运行时,异常首先传输到调试器,因此程序不会接收它,并且其行为与在没有附加调试器的情况下运行时不同。

因此,您分析的程序可能会故意导致错误在这种情况下,您应该能够在调试器收到异常后将异常传递给程序,因此它的行为就像不存在调试器一样(至少在理论上是这样)。

我可以修补程序以便它记录 wcslen 参数,然后我将在调试器和正常执行下比较它的参数,也许会发现一些有趣的东西

是的,你可以这样做。这将显示两种情况下的参数是否相同。