VC++ 实现dll远程注入代码示例

这个是注入程序的代码

 

 

DLl文件代码自己发挥,写什么都看你有多邪恶了啊

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
进程注入自己的dll 带有测试dll 路径和要注入的程序可以自己改 hRemoteProcess=OpenProcess(PROCESS_CREATE_THREAD| //允许远程创建线程 PROCESS_VM_OPERATION | //VM操作 PROCESS_VM_WRITE , //允许写 FALSE,dwProcessID); if(!hRemoteProcess) AfxMessageBox(L"无法打开目标进程"); // KillTimer(m_ntime); //计算DLL路径需要多大内存 int cb=(1+lstrlenW(pszLibFile))*sizeof(WCHAR); //使用VirtualAllocEx函数在远程进程的内存地址空间分配DLL文件名缓冲区 pszLibFileRemote=(PWSTR)VirtualAllocEx(hRemoteProcess,NULL,cb,MEM_COMMIT,PAGE_READWRITE); if(pszLibFileRemote==NULL) { AfxMessageBox(L"建立内存失败"); CloseHandle(hRemoteProcess); return; } //使用WriteProcessMemory函数将DLL的路径名复制到远程进程的内存空间 BOOL iReturnCode=WriteProcessMemory (hRemoteProcess,pszLibFileRemote,(PVOID)pszLibFile,cb,NULL); if(!iReturnCode) { AfxMessageBox(L"写入错误"); VirtualFreeEx(hRemoteProcess,NULL,0,MEM_RELEASE); CloseHandle(hRemoteThread); CloseHandle(hRemoteProcess); return; } //计算loadlibraryW入口地址 HMODULE hModule=LoadLibrary(L"C:\\WINDOWS\\system32\\kernel32"); PTHREAD_START_ROUTINE pfnStartAddr=( PTHREAD_START_ROUTINE)GetProcAddress(GetModuleHandle(TEXT("Kernel32")),"LoadLibraryW"); hRemoteThread=CreateRemoteThread(hRemoteProcess,NULL,0,pfnStartAddr,pszLibFileRemote,0,NULL); if(hRemoteThread==NULL) { //等待线程结束 WaitForSingleObject(hRemoteThread,INFINITE); DWORD RetV; if(GetExitCodeThread(hRemoteThread,&RetV)) CloseHandle(hRemoteThread);
下面是一个简单的示例代码,演示如何将结构体传递给dll并在dll中使用它: 假设我们有以下结构体定义: ```c typedef struct MyStruct { int intValue; double doubleValue; char stringValue[100]; } MyStruct; ``` 然后,我们在dll中定义一个函数,该函数接受指向结构体的指针,并对其进行操作: ```c __declspec(dllexport) void myFunction(MyStruct* myStruct) { // 在这里执行对结构体的操作 printf("intValue: %d, doubleValue: %f, stringValue: %s\n", myStruct->intValue, myStruct->doubleValue, myStruct->stringValue); } ``` 最后,在应用程序中调用dll中的函数,并将指向结构体的指针传递给它: ```c #include <windows.h> #include <stdio.h> typedef struct MyStruct { int intValue; double doubleValue; char stringValue[100]; } MyStruct; typedef void (__stdcall *MyFunctionPtr)(MyStruct*); int main() { HMODULE hDll = LoadLibrary("mydll.dll"); if (hDll == NULL) { printf("Failed to load DLL\n"); return 1; } MyFunctionPtr myFunction = (MyFunctionPtr)GetProcAddress(hDll, "myFunction"); if (myFunction == NULL) { printf("Failed to get function pointer\n"); return 1; } MyStruct myStruct = { 123, 3.14, "Hello World" }; myFunction(&myStruct); FreeLibrary(hDll); return 0; } ``` 在这个示例中,我们使用 `LoadLibrary` 和 `GetProcAddress` 函数动态加载并调用dll中的函数。我们还定义了一个指向函数的指针类型 `MyFunctionPtr`,以便在应用程序中调用函数。最后,我们创建了一个结构体 `MyStruct` 的实例,并将其传递给dll中的函数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值