x64dbg 和 ollydbg 错误内存不足

逆向工程 ollydbg 调试 记忆 例外
2021-06-20 17:09:53

我想调试一个可执行文件,但我总是收到一个错误“最后或第一次机会”异常。“最后一个错误”标签向我显示了这个错误:00000008 (ERROR_NOT_ENOUGH_MEMORY)当我在没有任何调试器的情况下运行可执行文件时,我总是有足够的内存。

Ollydbg 在我什至可以调试之前就中断了。x64dbg 在调试时中断。

在 ollydbg 中,我使用了该程序的 32 位可执行文件。

OPc 如下所示:

00007FF6A179B097 | int3                                    |
00007FF6A179B098 | sub rsp,48                              |
00007FF6A179B09C | lea rcx,qword ptr ss:[rsp+20]           |
00007FF6A179B0A1 | call <executable>.7FF6A0C58980          |
00007FF6A179B0A6 | lea rdx,qword ptr ds:[7FF6A230CE80]     |
00007FF6A179B0AD | lea rcx,qword ptr ss:[rsp+20]           |
00007FF6A179B0B2 | call <executable>.7FF6A17CC4EC          |
00007FF6A179B0B7 | int3                                    | <-

但我想这没有任何帮助。我们只知道最后一次调用产生了这个错误?!

编辑:我有 12 GB 的内存。

问候

1个回答

根据上面交换的评论,听起来该程序使用了反调试器代码。你有几个选择来处理它:

  1. 查找并禁用(NOP / jump-over / 等)反调试代码。
  2. 尝试隐藏您的调试器(手动或使用隐藏插件)。
  3. 在没有调试器的情况下运行你的程序,然后在它启动并运行后,用你的调试器附加到它。

选项#1 需要最大的努力,但保证有效。

选项#2 可以比选项#1 节省时间,但可能涉及大量的反复试验。

选项#3 是最简单的选项,恕我直言,只要您不需要从其入口点调试目标。它假设反调试代码只在程序的最开始执行,这通常是一个安全的假设。