Fah*_*eem 3 c++ windows dll-injection dllmain
我已经用 C++ 编写了一个 dll 和注入器。dll代码如下:
#include <cstdio>
#include <stdio.h>
#include <windows.h>
#include <string>
#include <fstream>
#include <winsock.h>
using namespace std;
#pragma comment(lib, "wsock32.lib")
extern "C" __declspec(dllexport) void UploadFile()
{
.....
}
INT APIENTRY DLLMain(HMODULE hinstDLL, DWORD fdwReason, LPVOID lpReserved)
{
switch(fdwReason)
{
case DLL_PROCESS_ATTACH:
MessageBox(0,"Process Attach","Info",MB_OK);
UploadFile();
break;
case DLL_THREAD_ATTACH:
MessageBox(0,"Thread Attach","Info",MB_OK);
UploadFile();
break;
case DLL_PROCESS_DETACH:
break;
case DLL_THREAD_DETACH:
break;
default:
break;
}
return TRUE;
}
Run Code Online (Sandbox Code Playgroud)
dll 将特定文件上传到服务器。我能够使用 LoadLibrary() 和 CreateRemoteThread() 成功地将 dll 注入“notepad.exe”,但它没有被执行。甚至不是 dllmain() 函数。不知道出了什么问题。
正如Dirk已经说过的,DLL 入口点被命名为DllMain(),而不是DLLMain(). 签名为DllMain():
BOOL WINAPI DllMain(
HINSTANCE hinstDLL,
DWORD fdwReason,
LPVOID lpvReserved
);
Run Code Online (Sandbox Code Playgroud)
根据创建 DLL 的最佳实践 ,您不应在 DllMain() 中执行以下任务:
...调用 User32.dll 或 Gdi32.dll 中的函数。某些函数会加载另一个 DLL,该 DLL 可能未初始化...
MessageBox()是在其中实现的,User32.dll因此这可能是DllMain()看起来未被调用的可能原因。
执行任何耗时的任务是不明智的,DllMain()因为它会阻止应用程序加载所需的任何其他 DLL,因为加载器锁在DllMain(). 相反,生成一个线程来执行任何耗时的任务。链接文档建议不要使用,CreateThread()但仅在涉及同步时才使用。
| 归档时间: |
|
| 查看次数: |
3663 次 |
| 最近记录: |