ida调试时如何跳过int 3?

逆向工程 艾达 反调试
2021-06-23 16:02:50

我试图调试一个 Windows 应用程序,但是当我用 Ida 调试它时,它停止了int 3指令。

我读了那个int 3catch 调试器,所以我无法调试。

我怎样才能取消这个int 3

怎么调用int 3

如果我将此十六进制更改为nop会被取消吗?

2个回答

好吧int 3,它是专门用于调用调试器的操作码。

它用于即软件断点。你可以用nop's替换它们,你应该很高兴。虽然我会首先找出为什么它们被执行,也许有一些条件可以避免它们被执行。

你如何开始解决这个问题。我假设您能够在 Ida 下启动程序并在内存中找到 int3 位置。如果不是这种情况,您应该更详细地描述到底发生了什么。

  1. 如果静态 exe 文件中存在 int3 (=0xCC),请查看十六进制编辑器。为此,您可以在 Ida(在一张纸上)收集 int 3 附近的内存中的字节序列。您应该能够在文件中找到这个字节序列,但要考虑内存位置,这可能不存在于静态文件中(由于链接或动态内存)。
  2. 如果您的 exe 文件中有 int3,请将其替换为您的十六进制编辑器中的 nop (0x90)。
  3. 启动 Ida 并查看程序是否可以在此位置停止。
  4. 如果您的 0x90 仍然存在,请查看 Ida。如果不是,那么它可能已被某些防篡改手段删除。在这种情况下,开始后立即停止 Ida,并尝试 - 通过逐步执行你的程序 - 隔离它被删除的位置。

这只是一个如何开始的例子。当然还有其他可能的方法来解决这个问题。例如,当 Ida 在您的 int3 处中断时,尝试回溯以查找包含 int3 的代码序列是从哪里调用的。这应该连接到反调试代码,因为我假设在没有调试器的情况下运行时不会调用您的 int3。

这个东西最重要的是:不要放弃,即使它完全让你感到沮丧(这是反调试的唯一目的)。