在内存中创建进程
Creating a process in memory C++
我已经在这段代码上工作了几个小时了,它快把我逼疯了!
完整的源代码在这里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恶意软件使用的一种技术。好运!
相关文章:
- WMI检测进程创建事件-c++
- C++ 无法识别创建进程'telnet'
- 避免使用 boost::进程间::消息队列创建文件
- 从根权限进程创建可访问的文件
- gcc 找不到 -lgcc, g++.exe: 错误: 创建进程: 没有这样的文件或目录
- 如何在进程之间创建双向通道?
- 创建进程 API 失败,在窗口 122 上出现错误代码 10
- 有没有办法为使用 Boost 生成的进程创建新的控制台窗口
- 如何在 Python 进程中访问由C++进程创建的互斥锁
- 是否有可能以及如何使用log4cxx库每个进程创建独立的记录仪
- 从创建进程创建的进程获取输出
- C++:监视 Windows 中的进程创建和终止
- 子进程如何告诉其父进程创建新的子进程
- 从“cmd”文件启动的进程创建进程
- 仅使用本地c++操作为多个进程创建共享内存
- 在OSX中使用C / c++获取进程创建日期时间
- Windows父进程和子进程创建
- 使用CreateProcessAsUser函数从提升进程创建非提升进程
- 为运行在非admin用户帐户中的进程创建防火墙规则
- 如何跟踪进程创建的ActiveX控件?