// InjectDll.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include<windows.h>
#define dllFullpath "C:\\Users\\Administrator\\Desktop\\MYTEST\\MFC_DLL\\Debug\\MFC_DLL.dll"
#define DllFullPath "C:\\Users\\Administrator\\Desktop\\MYTEST\\MFC_DLL\\Debug\\MFC_DLL.dll"
#define GameClassName "kugou_ui"
bool InjectDll()
{
// 根据窗口类名获得句柄
HWND hWnd = FindWindow(GameClassName, NULL);
if(hWnd == NULL)
return false;
DWORD pid = 0;
// 根据窗口句柄获取 PID
GetWindowThreadProcessId(hWnd, &pid);
if(pid == 0)
return false;
// 根据 PID 获取进程句柄
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
if(hProcess == NULL)
return false;
// 在游戏内存中分配一片空间
LPVOID address = VirtualAllocEx(hProcess, NULL, 256, MEM_COMMIT, PAGE_READWRITE);
if(address == NULL)
return false;
// 写入 DLL 全路径名
DWORD bytesWritten;
WriteProcessMemory(hProcess, address, DllFullPath, strlen(DllFullPath) + 1, &bytesWritten);
if(bytesWritten < strlen(DllFullPath))
return false;
// 在目标进程中启动线程
// 加载动态链接库
HANDLE hThread = CreateRemoteThread(hProcess, NULL, NULL, (LPTHREAD_START_ROUTINE)LoadLibraryA, address, NULL, NULL);
// 等待
WaitForSingleObject(hThread, 0xffffffff);
// 回收
CloseHandle(hThread);
VirtualFreeEx(hProcess, address, 256, MEM_DECOMMIT);
CloseHandle(hProcess);
return true;
}
int main()
{
// 注入 DLL 代码
printf("注入 DLL\n");
if(!InjectDll())
printf("注入 DLL 失败\n");
// 让控制台停住
getchar();
return 0;
}
2019-11-28
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。