使用替代进程挖空进程转储由恶意软件创建的子进程

逆向工程 ollydbg 恶意软件 倾倒
2021-06-10 12:34:17

我正在逆转一个恶意软件,它使用 Process Hollowing 的变体来创建一个我无法转储的进程。我不知道我做错了什么。我总是看到停止在 GetContextThread 的建议,但是这个过程挖空并没有调用那个 Api。

这正是发生的事情:

  • CreateProcessA:创建一个新进程,进程创建标志0x00000004用于创建处于挂起状态的进程

    • ReadProcessMemory:读取挂起进程的图像库

    • NtCreateSection:创建两个读/写/执行节

    • ZwMapViewOfSection:将读/写/执行部分映射到恶意软件的地址空间

    • ZwMapViewOfSection:将第二部分映射到挂起进程的地址空间(因此这部分在两个进程之间共享)。

    • ReadProcessMemory:将挂起进程的映像的映像库读入第 1 部分

    • ReadProcessMemory:将恶意软件图像的图像库读入第 2 部分

    • NtMapViewOfSection:通过将section 1映射到新的进程基地址来覆盖挂起进程的入口点代码

    • ResumeThread:恢复执行注入代码的挂起进程的线程

知道这一点,并且由于英语不是我的母语,并且有太多的技术词......我应该看看上面的哪个调用来找到EP?可能是最后一个 NtMapViewOfSection ?

1个回答

您在上面描述的技术称为“动态分叉”或“流程挖空”

您可以按照https://reverseengineering.stackexchange.com/a/8431/1562 中描述的步骤找到子进程的入口点,但我建议将断点设置为 onNtSetContextThread()而不是 onSetThreadContext()因为恶意软件可能会跳过后者而直接调用前者。