植物大战僵尸外挂源码【C语言制作】

    xiaoxiao2025-12-02  9

    植物大战僵尸外挂源码【简单版】

    下面是外挂源码,加★是关键部分,懂原理之后就一通百通了,下一个版本将推出【效果版】,敬请期待!

    (PS:找基址可以用工具CE  找植物大战僵尸的基址是最简单的了 不会的可以在百度找教程)

    作者 QQ 2783608988 by 奥利奥

    /* 头文件 */ #include <stdio.h> #include <windows.h> int main(void) { char Command; //命令 HWND hWnd; //窗口句柄 DWORD Pid; HANDLE hProcess=0; while(1) { getch(); system("cls"); plugin: printf(" |—————————植物大战僵尸 游戏外挂———————— |\n\n" "| —— C语言制作|\n\n" " | 打开外挂 A 修改阳光 S |\n\n" " | |\n\n" " | 修改金钱 D 退出外挂 F |\n\n" " | by 奥利奥 |\n\n" " |————————————————————————————|\n"); // 显示主菜单 Command=getche(); // 从键盘输入数据赋值给变量 if ( Command == 'F' || Command == 'f' ) //选择【退出外挂】 { exit(0); //结束程序( 退出外挂 ) } else { if ( Command == 'A' || Command == 'a' ) //选择【打开外挂】 { hWnd = FindWindow(NULL,"植物大战僵尸中文版"); //★FindWindow靠名字来取得这个游戏程序的句柄 if( hWnd == NULL ) { printf("\n未发现游戏进程 请先运行游戏\n"); } else if ( hWnd != NULL ) { GetWindowThreadProcessId(hWnd,&Pid); //★GetWindowThreadProcessId获取进程ID hProcess = OpenProcess(PROCESS_ALL_ACCESS,FALSE,Pid); //★OpenProcess打开进程 获取所有操作权限 if ( hProcess == NULL ) { printf("\n打开游戏进程失败\n"); } else { printf("\n成功打开游戏进程\n"); } } } if ( Command == 'S' || Command == 's' ) //选择【修改阳光】 { if ( hProcess == NULL ) { printf("\n请先打开外挂\n"); } else { DWORD sunny; //阳光基址 006A9EC0 一级偏移 768 二级偏移 5560 DWORD Add1 =0x006A9EC0,Add2,Add3; ReadProcessMemory (hProcess,(void *)Add1,&Add2,4,0); //★ReadProcessMemory读取数据 这个读的是一级偏移的还要读 Add1 = Add2 + 0x768 ;//阳光基址+一级偏移=一级基址 ReadProcessMemory(hProcess,(void *)Add1,&Add2,4,0); //读二级偏移 Add1 = Add2 + 0x5560 ;//一级基址+二级偏移 printf("\n您想多少阳光?:"); scanf_s("%d",&sunny); DWORD res = WriteProcessMemory(hProcess, (void *)Add1, &sunny, 4, 0); //★WriteProcessMemory写入内存 if ( res == NULL ) { printf("\n修改失败\n"); } else { printf("\n修改成功\n"); } goto plugin; //goto语句 } } if ( Command == 'D' || Command == 'd' ) //选择【修改金钱】 { if ( hProcess == NULL ) { printf("\n请先打开外挂\n"); } else { DWORD money; DWORD Add1 = 0x006A9EC0 ,Add2,Add3; //金币基址 006A9EC0 一级偏移 82C 二级偏移 28 ReadProcessMemory (hProcess,(void *)Add1,&Add2,4,0);//★ReadProcessMemory读取数据 这个读的是一级偏移的还要读 Add1 = Add2 + 0x82C ; ReadProcessMemory(hProcess,(void *)Add1,&Add2,4,0); //★ReadProcessMemory读二级偏移 Add1 = Add2 + 0x28 ; printf("\n您想多少金钱?(忽略个位数):"); scanf("%ld",&money); DWORD res = WriteProcessMemory(hProcess,(void *)Add1,&money,4,0); //★WriteProcessMemory写入内存 if ( res == NULL ) { printf("\n修改失败\n"); } else { printf("\n修改成功\n"); } } } } } return 0; }

    转载请注明原文地址: https://ju.6miu.com/read-1304524.html
    最新回复(0)