植物大战僵尸修改器(第一版)

前提是需要用CE来获取阳光的地址,注意第一版的地址是动态地址,下次游戏重启后,地址就会变掉。

#include 
#include 

using namespace std;

HWND hwnd_Game;
DWORD ProcessID;
HANDLE h_process;

/*
**  思路:先获取游戏信息,再进行修改。
**  1、根据游戏窗口名称获取窗口句柄
**  2、根据上一步获取的窗口句柄获得进程ID
**  3、通过上一步获取的进程ID来获取进程句柄(修改进程里面的内存值需要用到进程句柄)
*/
void GetGameInfo()
{
    hwnd_Game = FindWindow(NULL, L"Plants vs. Zombies");
    GetWindowThreadProcessId(hwnd_Game, &ProcessID);
    /*
        HANDLE
        WINAPI
        OpenProcess(
        _In_ DWORD dwDesiredAccess, 希望获得这个进程的什么权限,这里我们填默认的PROCESS_ALL_ACCESS就好了
        _In_ BOOL bInheritHandle,   是否允许该进程句柄继承,这里我们默认填false
        _In_ DWORD dwProcessId      进程ID
        );
    */
    h_process = OpenProcess(PROCESS_ALL_ACCESS, false, ProcessID);
}

void ChangeSunshine(int num)
{
    /*  WriteProcessMemory函数原型  
        BOOL
        WINAPI
        WriteProcessMemory(
            _In_ HANDLE hProcess,                     进程句柄
            _In_ LPVOID lpBaseAddress,                改写的地址
            _In_reads_bytes_(nSize) LPCVOID lpBuffer, 改写的值的缓冲区
            _In_ SIZE_T nSize,                        缓冲区的大小
            _Out_opt_ SIZE_T* lpNumberOfBytesWritten  实际写入的长度(传出参数)
            );
    */
    int ret = WriteProcessMemory(h_process, (LPVOID)0x2AF58580, &num, 4, NULL);
    if (ret == 0)
    {
        cout << "修改失败!" << endl;
    }
    else
    {
        cout << "修改成功!" << endl;
    }
}

int main1()
{
    int n_sunshine_change;
    cout << "欢迎使用植物大战僵尸外挂,请输入你要修改的阳光值:";
    cin >> n_sunshine_change;
    GetGameInfo();
    ChangeSunshine(n_sunshine_change);
    system("pause");
    return 0;
}


参考:https://blog.csdn.net/xiaokangdream/article/details/79356030

你可能感兴趣的:(植物大战僵尸修改器(第一版))