首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当我从记忆中抛出一个pe时,我如何修复IAT?

当我从记忆中抛出一个pe时,我如何修复IAT?
EN

Stack Overflow用户
提问于 2018-08-29 08:36:38
回答 1查看 6.9K关注 0票数 4

我正在分析一个恶意软件,恶意软件将一个pe文件解密到内存中,如下所示

我使用烯丙基作为x64dbg来转储内存,

然后使用IDA进行分析,但它是这样的

这是一个dll,它将被注入到其他进程。所以目前的过程不会加载它,那么我如何才能修复它呢?

EN

回答 1

Stack Overflow用户

发布于 2018-08-30 15:55:33

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

因此,如果您检查CreateRemoteThread描述:

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

你需要争论lpStartAddress。此参数可位于行中。

代码语言:javascript
复制
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 )和Scylla这样的工具在这里没有补丁是不合适的。这里真正的问题是您的DLL不是像普通DLL那样加载的。因此,您不能在ImpREC/Scylla中使用‘选取DLL’来选择它。

但你可以做些黑客。创建2个空项目- DLL,以及加载DLL的EXE。在exe中加载DLL,然后编写无限循环,如下所示:

代码语言:javascript
复制
#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,并用应用程序的PID替换第三个参数(dwProcessId)。然后跟踪屏幕截图中的行,将第二个参数替换为ImageBase并执行WriteProcessMemory。就这样!现在可以使用ImpREC或Scilla恢复IAT。只需打开进程并选择DLL someDll.dll即可。键入0xB159作为切入点/OEP,然后单击IAT AutoSearch,然后单击Get ImportsFix dump。祝好运!

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52073023

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档