2019-11-28

// 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;
}

推荐阅读更多精彩内容

  • 昨天晚上和官超约好了今天晚上快点写作业给她买汉堡包吃,下班去汉堡店买了汉堡去托福接她,去的时候还没有写完...
    013c0d0d654e阅读 78评论 0 0
  • 传说,在很久很久以前,有一个代蒙国。国里有一位美人,遗世独立。她的美貌足以令世间男子疯狂至极。 传说,在很远很远的...
    远植阅读 70评论 0 1
  • 我不需要等一场雪 因为我余生已斑白
    挥手赶夕阳阅读 25评论 0 0
  • 甚至开始想相亲 刚刚冥想 读到一本好书仿佛谈了一场恋爱 开启共同话题也就一个关键词吧 回想小学初中高中男同学 我以...
    爱元若哥哥阅读 87评论 1 0
  • 天行易远,人心亦远
    7eaf2f2ee672阅读 32评论 0 0