植物大战僵尸外挂源码【C语言制作】
植物大战僵尸外挂源码【简单版】
下面是外挂源码,加★是关键部分,懂原理之后就一通百通了,下一个版本将推出【效果版】,敬请期待!
(PS:找基址可以用工具CE 找植物大战僵尸的基址是最简单的了 不会的可以在百度找教程)
/* 头文件 */ #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(" |—————————植物大战僵尸 游戏外挂———————— | " "| —— C语言制作| " " | 打开外挂 A 修改阳光 S | " " | | " " | 修改金钱 D 退出外挂 F | " " | by 奥利奥 | " " |————————————————————————————| "); // 显示主菜单 Command=getche(); // 从键盘输入数据赋值给变量 if ( Command == F || Command == f ) //选择【退出外挂】 { exit(0); //结束程序( 退出外挂 ) } else { if ( Command == A || Command == a ) //选择【打开外挂】 { hWnd = FindWindow(NULL,"植物大战僵尸中文版"); //★FindWindow靠名字来取得这个游戏程序的句柄 if( hWnd == NULL ) { printf(" 未发现游戏进程 请先运行游戏 "); } else if ( hWnd != NULL ) { GetWindowThreadProcessId(hWnd,&Pid); //★GetWindowThreadProcessId获取进程ID hProcess = OpenProcess(PROCESS_ALL_ACCESS,FALSE,Pid); //★OpenProcess打开进程 获取所有操作权限 if ( hProcess == NULL ) { printf(" 打开游戏进程失败 "); } else { printf(" 成功打开游戏进程 "); } } } if ( Command == S || Command == s ) //选择【修改阳光】 { if ( hProcess == NULL ) { printf(" 请先打开外挂 "); } 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(" 您想多少阳光?:"); scanf_s("%d",&sunny); DWORD res = WriteProcessMemory(hProcess, (void *)Add1, &sunny, 4, 0); //★WriteProcessMemory写入内存 if ( res == NULL ) { printf(" 修改失败 "); } else { printf(" 修改成功 "); } goto plugin; //goto语句 } } if ( Command == D || Command == d ) //选择【修改金钱】 { if ( hProcess == NULL ) { printf(" 请先打开外挂 "); } 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(" 您想多少金钱?(忽略个位数):"); scanf("%ld",&money); DWORD res = WriteProcessMemory(hProcess,(void *)Add1,&money,4,0); //★WriteProcessMemory写入内存 if ( res == NULL ) { printf(" 修改失败 "); } else { printf(" 修改成功 "); } } } } } return 0; }
上一篇:
IDEA上Java项目控制台中文乱码