簡體   English   中英

在內存C ++中創建進程

[英]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.lib添加到了我的項目中,因為它包含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惡意軟件使用的一種技術。 祝好運!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM