求助各位大神,為什么會寫入失敗,編譯沒有問題,但是運行起來會提示寫入路徑名失敗
#include "pch.h"
#include <iostream>
#include <Windows.h>
#define GameClassName "ZElementClient Window"
//#define dllFullpath "F:\\C++Pritice\\GGG\\MFC_DLL\\Debug\\MFC_DLL.dll"
#define dllName "MFC_DLL.dll"
void InjectDll(HWND Gameh,const char *DllNameFullPath)
{
DWORD pid = 0;
HANDLE hProcess = NULL;
LPDWORD AddressDW = NULL;
DWORD byWriteSize = NULL;
HANDLE threadHandle = NULL;
//獲取游戲視窗句柄
if (Gameh != 0)
{
//根據游戲視窗句柄獲取行程PID
GetWindowThreadProcessId(Gameh, &pid);
if (pid != 0)
{
//通過行程pid 獲取行程句柄
hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
if (hProcess != NULL)
{
//在游戲行程分配一片記憶體空間
AddressDW = (LPDWORD)VirtualAllocEx(hProcess, NULL, 256, MEM_COMMIT, PAGE_READONLY);
if (AddressDW != NULL)
{
//寫入DLL全路徑名
WriteProcessMemory(hProcess, AddressDW, DllNameFullPath, strlen(DllNameFullPath) + 1, &byWriteSize);
if (byWriteSize >= strlen(DllNameFullPath))
{
threadHandle = CreateRemoteThread(hProcess, NULL, NULL, (LPTHREAD_START_ROUTINE)LoadLibraryA, AddressDW, NULL,NULL);
WaitForSingleObject(threadHandle, 0xFFFFFFF);
CloseHandle(threadHandle);
VirtualFreeEx(hProcess, AddressDW, 256, MEM_DECOMMIT);
CloseHandle(hProcess);
}
else
{
printf("寫入dll路徑名失敗\n");
}
}
}
}
}
}
int main()
{
char DirName[256] = "";//存放目錄名
char dllNamePath[256] = "";//用來存放dll全路徑名
//注入dll代碼
HWND Gameh = FindWindow(GameClassName, NULL);
printf("注入測驗\r\n");
GetCurrentDirectoryA(sizeof(DirName),DirName);
strcpy_s(dllNamePath,DirName);
strcat_s(dllNamePath, "\\");
strcat_s(dllNamePath, dllName);//追加dll名字
printf("%s \r\n",dllNamePath);
InjectDll(Gameh,dllNamePath);//注入dll到游戲視窗
return 0;
}
uj5u.com熱心網友回復:
Check一下WriteProcessMemory函式的回傳值,如果失敗,GetLastError()的值是多少?uj5u.com熱心網友回復:
AddressDW = (LPDWORD)VirtualAllocEx(hProcess, NULL, 256, MEM_COMMIT, PAGE_READONLY);PAGE_READONLY你寫得進去才怪了,換成PAGE_READWRITE
uj5u.com熱心網友回復:
額。。。好的,回家以后試一下,多謝大佬轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/38767.html
標籤:進程/線程/DLL
