#include<iostream>
#include<windows.h>
using namespace std;
HWND hand=NULL;
DWORD pid=0;
HANDLE hProcess=NULL;
DWORD BaseValue=0;
DWORD SunshineAddress;
DWORD moneyAddress;
DWORD ZombiesAddress;
DWORD sunplantAddress;
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);
cout<<"修改完成"<<endl;
}
bool initmoney(){
DWORD _Address=BaseValue+0x82c;
DWORD _Value=0;
bool Result=ReadProcessMemory(
hProcess,
(LPVOID)_Address,
&_Value,
4,
NULL
);
if(Result==false){
cout<<"初始化金币地址失败";
return false;
}
moneyAddress=_Value+0x28;
return true;
}
int getmoneyValue(){
DWORD value=0;
bool Result=ReadProcessMemory(hProcess,
(LPVOID)moneyAddress,
&value,
4,
NULL
);
if(Result==false){
cout<<"获得金币数据失败";
return 0;
}
cout<<"金币数据:"<<value<<endl;
return (int)value;
}
void setmoneyValue(int value){
WriteProcessMemory(hProcess,(LPVOID)moneyAddress,&value,4,NULL);
cout<<"修改完成"<<endl;
}
void lengque(){
DWORD lengque=0x00488e73;
DWORD leng_pianyi=0x80;
WriteProcessMemory(hProcess,(LPVOID)lengque,&leng_pianyi,1,NULL);
cout<<"修改完成"<<endl;
}
void zanting(){
DWORD zanting=0x4502C0;;
DWORD zan_pianyi=0xC3;
WriteProcessMemory(hProcess,(LPVOID)zanting,&zan_pianyi,1,NULL);
cout<<"修改完成"<<endl;
}
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=-100;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);
}
}
return true;
}
bool initappearsun(){
DWORD _Address=BaseValue+0x768;
DWORD _Value=0;
bool Result=ReadProcessMemory(
hProcess,
(LPVOID)_Address,
&_Value,
4,
NULL
);
if(Result==false){
cout<<"初始化阳光植物地址失败"<<endl;
return false;
}
sunplantAddress=_Value+0xac;
Result=ReadProcessMemory(
hProcess,
(LPVOID)sunplantAddress,
&_Value,
4,
NULL
);
if(Result==false){
cout<<"阳光植物二次偏移失败"<<endl;
return false;
}
sunplantAddress=_Value;
cout<<"阳光植物地址:"<<sunplantAddress<<endl;
return true;
}
bool appearsun(){
for(int i=-100;i<100;i++){
DWORD _address=sunplantAddress+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;
}
bool big_appearsun(){
for(int j=0;j<30;j++){
for(int i=-100;i<100;i++){
DWORD _address=sunplantAddress+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);
}
Sleep(100);
}
return true;
}
int main(){
system("start C:\\Users\\Administrator\\Desktop\\植物大战僵尸1电脑版\\PlantsVsZombies.exe");
system("title 植物大战僵尸辅助器");
system("color 0A");
Sleep(1000);
bool Result=false;
Result=startGame();
if(Result==false){
return 0;
}
int n,m;
while(1){
cout<<"*植物大战僵尸外挂*"<<endl;
cout<<"1.修改阳光"<<endl;
cout<<"2.修改金币"<<endl;
cout<<"3.种植无冷却"<<endl;
cout<<"4.切换窗口不暂停"<<endl;
cout<<"5.秒杀僵尸"<<endl;
cout<<"6.瞬间生产阳光"<<endl;
cout<<"7.阳光植物干呕"<<endl;
cin>>n;
switch(n){
case 1:{
if(initSunshine()==true){
cout<<"初始化阳光地址成功"<<endl;
}
getSunshineValue();
cout<<"输入修改阳光值:"<<endl;
cin>>m;
setSunshineValue(m);
break;
}
case 2:{
if(initmoney()==true){
cout<<"初始化金币地址成功"<<endl;
}
getmoneyValue();
cout<<"输入修改金币值:"<<endl;
cin>>m;
setmoneyValue(m);
break;
}
case 3:{
lengque();
break;
}
case 4:{
zanting();
break;
}
case 5:{
if(initZombies()){
killZombies();
}
break;
}
case 6:{
if(initappearsun()){
appearsun();
}
break;
}
case 7:{
if(initappearsun()){
big_appearsun();
}
break;
}
}
}
return 0;
}