在内存中创建进程

Creating a process in memory C++

本文关键字:进程 创建 内存      更新时间:2023-10-16

我已经在这段代码上工作了几个小时了,它快把我逼疯了!

完整的源代码在这里http://pastebin.com/Urxh68W4但我很确定我知道问题所在。

extern "C" NTSYSAPI LONG NTAPI ZwUnmapViewOfSection(HANDLE, PVOID);

当我运行它时,我得到以下错误:

Error 1 error LNK2019: unresolved external symbol __imp__ZwUnmapViewOfSection@8 referenced in function _wWinMain@16

我猜有一些dll或库我应该包括,所以我添加了Ntoskrnl。因为它包含ZwUnmapViewOfSection函数。

我完全不知道该做什么。我应该使用Ntdll.dll吗?如果是这样,我怎么链接一个dll?我以为你只能使用Visual Studio 2010中的库。

还有,NTSYSAPI和NTAPI到底是什么?网上几乎没有什么信息

这看起来像用户模式代码,所以您可能不希望链接到ntoskrnl.lib。你宁愿链接到ntdll。

我可能会这样做的方式是使用动态链接和调用GetProcAddress传递一个HANDLE到ntdll.dll和ZwUnmapViewOfSection

示例代码:

typedef LONG (NTAPI *pfnZwUnmapViewOfSection)(HANDLE, PVOID);
HMODULE hMod = GetModuleHandle("ntdll.dll");
pfnZwUnmapViewOfSection pZwUnmapViewOfSection= (pfnZwUnmapViewOfSection)GetProcAddress(hMod, "ZwUnmapViewOfSection");

我还没有编译这个,但它应该看起来像这样(可能添加一些错误检查等)。

关于您的其他问题:NTAPI是定义调用约定的宏,在本例中为__stdcall。调用约定与如何传递函数的参数以及谁将清理这些参数有关。

例如,__stdcall要求参数以相反的顺序压入堆栈,被调用者将清理堆栈。

同样,NTSYSAPI是一个宏,如果我没记错的话,它只是解析为__declspec(dllimport)

另外,我应该指出,在用户模式下调用NtDll导出的函数通常是不被允许的。而且,您正在编写的代码也会在此过程中出现额外的问题(即使在它看起来正常工作之后)。

如果您正在寻找另一个执行与您正在编写的任务非常相似的代码示例,您可以检查这里。这是Duqu恶意软件使用的一种技术。好运!