植物大战僵尸

#include <iostream>
#include <windows.h>
using namespace std;
//声明变量
HWND hand = NULL;
DWORD pid = 0;
HANDLE hProcess = NULL;
DWORD BaseValue = 0;
DWORD SunshineAddress = 0;
DWORD MoneyshineAddress = 0;    
DWORD ZombiesAddress = 0;
DWORD SunAddress = 0;
DWORD A = 0;
void a();
void chushihua();
bool startGame();
bool initSunshine();
int getSunshineValue();
void setSunshineValue(int value);
bool initMoneyshine();
int getMoneyshineValue();
void setMoneyshineValue(int value);
void initCDshine();
void noCoolDown();
bool initZombies();
bool killZombues();
bool initSun();
bool Sun();
bool b();
int main(){
    system("title 植物大战僵尸外挂程序");
    system("color 0B");
    do{
        bool Result = false;
        Result = startGame();
        if(Result==false){
            system("start C:/Users/Administrator/Desktop/植物大战僵尸1电脑版/PlantsVsZombies.exe");
            Sleep(3000);
        }else{
            break;
        }
    }while(true);
    int n;
    while(1){
        system("cls");
        chushihua();
        int zhi;
        cin>>n;
        switch(n){
            case 1:
                initSunshine();
                getSunshineValue();
                cout<<"请输入你要修改的阳光值:";
                cin>>zhi;
                setSunshineValue(zhi);
                cout<<"修改成功"<<endl;
                break;
            case 2:
                initMoneyshine();
                getMoneyshineValue();
                cout<<"请输入你要修改的金币值:";
                cin>>zhi;
                setMoneyshineValue(zhi);
                cout<<"修改成功"<<endl;
                break;
            case 3:
                noCoolDown();
                break;
            case 4:
                if(initZombies()){
                    if(killZombues()){
                        cout<<"秒杀成功"<<endl;
                    }
                }
                break; 
            case 5:
                if(initSun()){
                    if(Sun()){
                        cout<<"生产成功"<<endl;
                    }
                }
                break;
            case 6:
                if(b){
                    cout<<"成功"<<endl;
                }
                break;
            case 7:
                a();
                break;
            case 8:
                system("pause"); 
                return 0;
        }
        system("pause"); 
    }
    return 0;
}
//免暂停 
void a(){
    //免暂停时间代码
    DWORD BASE = 0x4502C0;
    //打开进程
    DWORD pianyi = 0xC3;
    WriteProcessMemory(hProcess,(LPVOID)BASE,&pianyi,4,NULL);
}
//重叠种植 
bool b(){
    DWORD _Address = BaseValue+0x768;//一级偏移地址
    DWORD _Value = 0;
    bool Result = ReadProcessMemory(hProcess,(LPVOID)_Address,&_Value,4,NULL);
    if(!Result){
        cout<<"初始化地址失败"<<endl;
        return false;
    }
    SunAddress = _Value+0xac;//二级偏移地址
    Result = ReadProcessMemory(hProcess,(LPVOID)SunAddress,&_Value,4,NULL);
    if(!Result){
        cout<<"二次偏移失败"<<endl;
        return false;
    }
    SunAddress = _Value;//地址
    for(int i = -100;i<100;i++){
        DWORD _address = SunAddress+0x40+i*0x14c;
        DWORD _Value = 0;
        bool Result = ReadProcessMemory(hProcess,(LPVOID)_address,&_Value,4,NULL);
        if(!Result){
            cout<<"获取失败"<<endl;
            continue;
        }
        int value = 10000;
        WriteProcessMemory(hProcess,(LPVOID)_address,&value,4,NULL);
    }
    return true;
}
void chushihua(){
    cout<<"植物大战僵尸外挂程序"<<endl
        <<"****1.修改阳光值****"<<endl
        <<"****2.修改金币值****"<<endl
        <<"****3.种植无冷却****"<<endl
        <<"****4.秒杀僵尸******"<<endl
        <<"****5.生产阳光******"<<endl
        <<"****6.重叠种植******"<<endl
        <<"****7.程序免暂停****"<<endl
        <<"****8.关闭此外挂****"<<endl;
}
bool startGame(){
    //查找电脑是否运行了植物大战僵尸
    hand = FindWindow("MainWindow","植物大战僵尸中文版");
    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<<"无法打开进程";
        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);
}
//寻找真实的金币地址
bool initMoneyshine(){
    DWORD _address = BaseValue+0x82c;//一级偏移地址 
    DWORD _value = 0;
    bool Result = ReadProcessMemory(hProcess,(LPVOID)_address,&_value,4,NULL);
    if(Result==false){
        cout<<"初始化金币地址失败";
        return false;
    }
    MoneyshineAddress = _value+0xac;//二级偏移地址 
    return true;
}
//获取金币值 
int getMoneyshineValue(){
    //金币存变量的真正名称
    DWORD Vvalue = 0;
    bool Result = ReadProcessMemory(hProcess,(LPVOID)MoneyshineAddress,&Vvalue,4,NULL);
    if(Result==false){
        cout<<"获取金币数据失败";
        return 0;
    } 
    cout<<"当前金币值:"<<Vvalue<<endl;
    return (int)Vvalue;
}
//修改金币值 
void setMoneyshineValue(int value){
    WriteProcessMemory(hProcess,(LPVOID)MoneyshineAddress,&value,4,NULL);
}
void noCoolDown(){
    //无冷却时间代码
    DWORD base = 0x00488e73;
    //打开进程
    DWORD PIANYI = 0x80;
    WriteProcessMemory(hProcess,(LPVOID)base,&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){
        cout<<"初始化僵尸地址失败"<<endl;
        return false;
    }
    ZombiesAddress = _Value+0x90;//二级偏移地址
    Result = ReadProcessMemory(hProcess,(LPVOID)ZombiesAddress,&_Value,4,NULL);
    if(!Result){
        cout<<"僵尸二次偏移失败"<<endl;
        return false;
    }
    ZombiesAddress = _Value;//僵尸地址 
    return true;
}
bool killZombues(){
    for(int i = 0;i<50;i++){
        DWORD _address = ZombiesAddress+0x28+i*0x15c;
        DWORD _Value = 0;
        bool Result = ReadProcessMemory(hProcess,(LPVOID)_address,&_Value,4,NULL);
        if(!Result){
            cout<<"僵尸血量获取失败"<<endl;
            continue;
        }
        int value = 3;
        if(_Value<100){
            WriteProcessMemory(hProcess,(LPVOID)_address,&value,4,NULL);
        }
    }
    return true;
}
bool initSun(){
    DWORD _Address = BaseValue+0x768;//一级偏移地址
    DWORD _Value = 0;
    bool Result = ReadProcessMemory(hProcess,(LPVOID)_Address,&_Value,4,NULL);
    if(!Result){
        cout<<"初始化地址失败"<<endl;
        return false;
    }
    SunAddress = _Value+0xac;//二级偏移地址
    Result = ReadProcessMemory(hProcess,(LPVOID)SunAddress,&_Value,4,NULL);
    if(!Result){
        cout<<"二次偏移失败"<<endl;
        return false;
    }
    SunAddress = _Value;//地址 
    return true;
}
bool Sun(){
    for(int i = 0;i<50;i++){
        DWORD _address = SunAddress+0x58+i*0x14c;
        DWORD _Value = 0;
        bool Result = ReadProcessMemory(hProcess,(LPVOID)_address,&_Value,4,NULL);
        if(!Result){
            cout<<"获取失败"<<endl;
            continue;
        }
        int value = 0;
        WriteProcessMemory(hProcess,(LPVOID)_address,&value,4,NULL);
    }
    return true;
}

 

posted @ 2023-12-15 19:48  王一行(小号)  阅读(34)  评论(0编辑  收藏  举报