Windows — Создание процесса в памяти Переполнение стека

Я работал над этим кодом часами, и он сводит меня с ума!

Весь источник здесь 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? В сети практически нет информации.

2

Решение

Это похоже на код пользовательского режима, так что вы, вероятно, не захотите ссылаться на 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. Удачи!

5

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]