我应该如何调试创建大型数据库的 PE?

逆向工程 艾达 调试 动态分析
2021-06-27 08:59:07

我正在反转几个动态和静态链接到可执行文件的模块。我已经开始通过使用本地 win32 调试器(默认设置)将我的数据库文件之一附加到 win32 exe 来学习主动分析。

重新定位我的 idb 的注释以正确映射到 exe 似乎比它应该花费的时间更长。我目前正在通过将一个 idb 与内存快照进行比较来进行静态分析,因为重定位时间似乎不值得等待。这会产生(我认为可能是)不必要的工作,因为我必须手动将注释从单个模块 idb 复制到快照 idb。

我想知道我是否可以改变我使用 IDA 的方式来加速搬迁。鉴于数据库和 exe 的大小,我不知道这应该花多长时间。

idb:  ~133 Mb
exe:  ~650 Mb     Size taken from task manager
relocation time:  ~15+ minutes

这是非常开放的结局。我想我正在寻找调试器设置、隐藏的注释性能命中等。如果这是正常的,我将尝试调整我的调试实践以充分利用会话。

1个回答

如果问题是 IDA 在调试时重新设置 IDB 所需的时间,那么一些可能的解决方案:

  1. 禁用模块中的 ASLR,因此它保持加载相同的基地址(来自 IDB 的相同基地址)

    • 优点:适用于主要可执行文件
    • 缺点:可能是 DLL 的问题(参见 3);更改文件。

如何:IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASEIMAGE_NT_HEADERS.OptionalHeader.DllCharacteristics.

  1. [危险] 在整个系统范围内禁用 ASLR(在备用 VM 中是可能的)。

    • 优点:同1。
    • 缺点:与 1 相同。降低整个系统保护

如何改变 HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\MoveImages

  1. 重新设置所有 DLL 的基础,使它们不会发生冲突(将此应用到 1。)

    • 优点:所有的 DLL 都有不同的地址基础
    • 缺点:改变文件。

如何:

只需为所有 DLL 使用不同的基地址(不要将其应用于系统 DLL)。

  1. 使用外部调试器并与它同步 IDB。

如何:

  • 使用QB-sync:它允许您从调试器(windbg、ollydbg、gdb 等)调试二进制文件,并在重新设置 IDB 的情况下将数据库与调试器同步

  • 优点:效果很好,调试器可以做很多事情

  • 缺点:需要对外部调试器充满信心