#include <iostream> #include <windows.h> using namespace std; /*声明变量 */ HWND hand=NULL; //游戏窗口 DWORD pid=0;//游戏进程ID HANDLE hProcess=NULL;//进程对象 DWORD BaseValue=0;//游戏数据存放的基础值 DWORD SunshineAddress;//阳光内存变量名称(地址) /*声明方法/函数 */ bool startGame(); //初始化游戏数据 //初始化阳光地址--寻找真实的阳光地址 bool initSunshine(); //获取阳光值 int getSunshineValue(); //设置阳光值 void setSunshineValue(int value); void noCoolDown(); int main(int argc, char** argv) { system("title * 植物大战僵尸外挂"); system("color 0A"); bool Result=false; Result=startGame(); if(Result==false){ //启动它 //system("calc"); system("C:\\Users\\Administrator\\Desktop\\植物大战僵尸1电脑版\\PlantsVsZombies.exe"); return 0; } initSunshine(); setSunshineValue(10000); noCoolDown(); return 0; } bool startGame(){ //查找电脑是否运行了植物大战僵尸 hand= FindWindow("MainWindow","植物大战僵尸中文版"); cout<<hand<<endl; if(hand==NULL){ cout<<"游戏没有运行"; return false; } cout<<"窗口:"<<hand<<endl; GetWindowThreadProcessId(hand,&pid); if(pid==0){ cout<<"无法找到植物大战僵尸进程"; return false; } cout<<"进程:"<<pid<<endl; hProcess=OpenProcess(PROCESS_ALL_ACCESS, false, pid); if(hProcess==NULL){ cout<<"无法打开进程"<<endl; return false; } cout<<"打开进程:"<<hProcess<<endl; DWORD BaseAddress=0x006A9EC0;//获取游戏数据的基础地址 bool Result= ReadProcessMemory( hProcess, //读取哪一个进程 (LPVOID)BaseAddress, //内存地址是多少 &BaseValue, //读取数据放哪 4, //数据存储长度 NULL //实际读取的长度 ); if(Result==false){ cout<<"初始化基础地址失败"; return false; } return true; } //初始化阳光地址--寻找真实的阳光地址 bool initSunshine(){ DWORD _Address=BaseValue+0x768; //一级偏移地址 DWORD _Value=0; bool Result= ReadProcessMemory( hProcess, //读取哪一个进程 (LPVOID)_Address, //内存地址是多少 &_Value, //读取数据放哪 4, //数据存储长度 NULL //实际读取的长度 ); if(Result==false){ cout<<"初始化阳光地址失败"; return false; } SunshineAddress=_Value+0x5560;//二级偏移地址 return true; } //获取阳光值 int getSunshineValue(){ //阳光内存变量的真正名称 DWORD value=0; bool Result= ReadProcessMemory( hProcess, //读取哪一个进程 (LPVOID)SunshineAddress, //阳光内存地址 &value, //读取数据放哪 4, //数据存储长度 NULL //实际读取的长度 ); if(Result==false){ cout<<"获取阳光数据失败"; return 0; } cout<<"阳光数据:"<<value<<endl; return (int)value; } //设置阳光值 void setSunshineValue(int value){ WriteProcessMemory(hProcess,(LPVOID)SunshineAddress,&value,4,NULL); } void noCoolDown(){ cout <<"种植无冷却"<<endl; //无冷却时间代码 DWORD base = 0x00488e73; //打开进程 获取所有操作权限 DWORD pianyi = 0x80; WriteProcessMemory(hProcess,(LPVOID)base,&pianyi,1,NULL); }