如何从 macOS 的内存中转储打包库/插件的解包版本?

逆向工程 内存转储
2021-06-14 04:57:40

我正在处理我正在尝试解压缩的自定义 upx 打包库。系统是macOS。

鉴于它是一个库/插件,它没有独立的入口点。我通过反汇编程序运行它,但无法找到 OEP 可能在哪里的明显提示。最重要的是,它还通过 ptrace 使用反调试测量使其更加困难。

接下来,我为它编写了自己的加载程序,包括它想要的回调,并设法加载它,然后使用 lldb save-core 将整个内存(我的加载程序+lib)转储到一个 3GB 大小的文件中。

这就是我卡住的地方:内存分析和取证在 mac 上看起来并不流行,大多数工具已经过时且不再工作。我不知道如何处理这个问题,甚至不知道是否有可能从这个转储中恢复解压后的变体。

1个回答

基本上,您需要在内存中找到模块的 Mach-O 标头并转储它所引用的段。

这是一个不是专门用于 macOS 的工具,但修改起来应该不会太难,因为它已经有了处理 Mach-O 格式的代码:

https://github.com/stefanesser/dumpdecrypted