gpt4 book ai didi

reverse - 当我从内存中转储一个pe时,我该如何修复IAT?

转载 作者:行者123 更新时间:2023-12-04 15:55:03 25 4
gpt4 key购买 nike

我正在分析一个恶意软件,该恶意软件将一个 pe 文件解密到内存中,就像这样

enter image description here

我用 ollydumpex x64dbg 转储内存,

enter image description here

然后用IDA来分析,但是是这样的

enter image description here

这是一个dll,它将被注入(inject)到其他进程。所以当前进程不会加载它,那么我该如何修复它?

最佳答案

首先是OEP。在屏幕截图上,我看到 EntryPoint(+0x28 到 PE\x00\x00 签名的地址)为零。所以,首先你需要找到这个入口点的真正位置。

所以,如果你检查 CreateRemoteThread描述:

HANDLE CreateRemoteThread( HANDLE hProcess, LPSECURITY_ATTRIBUTES lpThreadAttributes, SIZE_T dwStackSize, LPTHREAD_START_ROUTINE lpStartAddress, LPVOID lpParameter, DWORD dwCreationFlags, LPDWORD lpThreadId );



您需要论证 lpStartAddress .这个参数可以位于行中
4015C9  lea eax, dword ptr ds:[ebx+edi]

因此,您的 edi 值是 0x3CE0000(这是另一个进程中的 ImageBase),而 ebx 值是 0xB159(这是 EntryPoint RVA)。在 OllyDumpEx 中,您必须将此值写入 EntryPoint 字段。

恢复导入是一个漫长的过程,分析对库的所有调用并重新创建 IMPORT_DIRECTORY 和 IAT 表。您可以为此编写脚本或使用任何现有的脚本。另一种选择是修补 Scylla(这是开源项目)并添加将 ImageBase 更改为某个特定值(在您的情况下为 0x3CE0000)的能力。

ImpREC(Import Reconstructor)和Scylla之类的工具在没有补丁的情况下不适合这里。这里真正的问题是您的 DLL 没有像普通 DLL 那样加载。因此,您不能使用 ImpREC/Scylla 中的“Pick DLL”来选择它。

但是你可以做一些黑客。创建 2 个空项目 - DLL 和加载 DLL 的 EXE。在 exe 中加载您的 DLL,然后像这样编写无限循环:
#include <stdio.h>
#include <Windows.h>
int main() {
HANDLE hLib = LoadLibraryA("someDll.dll");
DWORD old;
// this will make your DLL writable.
VirtualProtect((DWORD)hLib, 0x3C414, PAGE_EXECUTE_READWRITE, &old);
DWORD pid = GetProcessId(GetCurrentProcess());
char addressBuffer[64];
sprintf(addressBuffer, "ImageBase: %#x\nPID: %#x", (DWORD)hLib, pid);
MessageBoxA(NULL, addressBuffer, "Donor DLL address", MB_OK);
for (;;) Sleep(1000);
return 0;
}

我建议您在 DLL 中添加一些大数据对象。此 DLL 将成为您的恶意软件的捐助者。只需添加 int bigData[0x3C414];函数之外的某个地方(函数数据将被放置在堆栈上,但您需要一个大的主模块内存)。我从 EBP 值中得到 0x3C414 作为恶意软件的大小。

现在运行这个应用程序并从消息框中读取 ImageBase 和 PID。然后追踪到 OpenProcess并将第三个参数( dwProcessId )替换为您的应用程序的 PID。然后跟踪到屏幕截图中的行,用 ImageBase 替换第二个参数并执行 WriteProcessMemory。就这样!您现在可以使用 ImpREC 或 Scilla 恢复 IAT。只需打开您的进程并选择 DLL someDll.dll。输入 0xB159 作为 EntryPoint/OEP 并单击 IAT AutoSearch ,然后 Get ImportsFix dump .祝你好运!

关于reverse - 当我从内存中转储一个pe时,我该如何修复IAT?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52073023/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com