#include <iostream>
#include <windows.h>
using namespace std;
/*声明变量 */
HWND hand=NULL; //游戏窗口
DWORD pid=0;//游戏进程ID
HANDLE hProcess=NULL;//进程对象
DWORD BaseValue=0;//游戏数据存放的基础值
DWORD SunshineAddress;
DWORD ZombiesAddress;
DWORD plantsAddress;
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 getSnshineValue(){
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);
}
void zanting(){
cout<<"无暂停"<<endl;
DWORD base=0x4502C0;
DWORD pianyi=0xC3;
WriteProcessMemory(hProcess,(LPVOID)base,&pianyi,1,NULL);
}
bool initZombies(){
//僵尸
DWORD _Address=BaseValue+0x768;//一级偏移
DWORD _Value=0;
bool Result=ReadProcessMemory(hProcess,(LPVOID)_Address,&_Value,4,NULL);
if(Result==false){
cout<<"初始化失败";
return false;
}
ZombiesAddress=_Value+0x90;//二级
Result=ReadProcessMemory(hProcess,(LPVOID)ZombiesAddress,&_Value,4,NULL);
if(Result==false){
cout<<"二级偏移失败";
return false;
}
ZombiesAddress=_Value;
cout<<"僵尸地址"<<ZombiesAddress<<endl;
return true;
}
bool killZombies(){
//僵尸有多个
for(int i=0;i<100;i++){
DWORD _address=ZombiesAddress+0x28+i*0x15c;
DWORD _Value=0;
bool Result=ReadProcessMemory(hProcess,(LPVOID)_address,&_Value,4,NULL);
if(Result==false){
cout<<"获取失败";
continue;
}
int value=3;
if(_Value<100){
WriteProcessMemory(hProcess,(LPVOID)_address,&value,4,NULL);
}else{
cout<<"疑似僵尸血量:"<<_Value<<endl;
}
}
return true;
}
bool PlantSun(){
DWORD _Address=BaseValue+0x768;//一级偏移
DWORD _Value=0;
bool Result=ReadProcessMemory(hProcess,(LPVOID)_Address,&_Value,4,NULL);
if(Result==false){
cout<<"初始化失败";
return false;
}
plantsAddress=_Value+0xac;//二级
Result=ReadProcessMemory(hProcess,(LPVOID)plantsAddress,&_Value,4,NULL);
if(Result==false){
cout<<"二级偏移失败";
return false;
}
plantsAddress=_Value;
return true;
}
bool plants(){
for(int i=0;i<100;i++){
DWORD _address=plantsAddress+0x58+i*0x14c;
DWORD _Value=0;
bool Result=ReadProcessMemory(hProcess,(LPVOID)_address,&_Value,4,NULL);
if(Result==false){
cout<<"获取失败";
continue;
}
int value=0;
WriteProcessMemory(hProcess,(LPVOID)_address,&value,4,NULL);
}
return true;
}
int main(){
system("color 1A");
system("title 植物大战僵外挂");
bool Result=false;
do{
Result=startGame();
if(Result==false){
system("start C:\\Users\\Administrator\\Desktop\\植物大战僵尸1电脑版\\PlantsVsZombies.exe");
Sleep(3000);
}else{
break;
}
}while(1);
Result=initSunshine();
if(Result==false){
return false;
}
int a;
while(1){
cout<<"1.阳光"<<endl;
cout<<"2.无冷却"<<endl;
cout<<"3.无暂停"<<endl;
cout<<"4.秒杀"<<endl;
cout<<"5.产阳光"<<endl;
cout<<"6.退出"<<endl;
cin>>a;
if(a==6){
break;
}
switch(a){
case 1:{
startGame();
getSnshineValue();
setSunshineValue(9990);
break;
}
case 2:{
noCoolDown();
break;
}
case 3:{
zanting();
plants();
break;
}
case 4:{
initZombies();
killZombies();
break;
}
case 5:{
if(PlantSun()){
plants();
}
break;
}
default:{
break;
}
}
system("cls");
}
return 0;
}