PvZ_modifier
一个自己研究了一段时间写的C语言修改器,代码规范严谨,但仍有不足,希望有能力的人和我一同研究。使用的ide是devcpp
本修改器也在github上开源,地址为:https://github.com/Liushui-Miaomiao/PvZ_modifier.git.
文件主体内容
一共5个.c源文件,一个.h头文件
c源文件名为:PvZ_modifier.c,g_op.c,g_msg.c,p_op.c,pm_op.c
h头文件名为:headgr.h
功能
修改效果
全代码展示
PvZ_modifier.c
#include "headgr.h"
DWORD Pid;
HANDLE hProcess=0;
int command;
BOOL isRun=FALSE;
BOOL backStageRun=FALSE;
BOOL anyPosition=FALSE;
BOOL isLittle=FALSE;
/*主函数*/
int main(void){
initModifier();
while(TRUE){
menu();
setColor(14);
printf("\n请按下按键选择选项:");
command=getchar();
Choice();
}
return 0;
}
g_op.c
/*Game Operation*/
#include "headgr.h"
extern DWORD Pid;
extern HANDLE hProcess;
extern int command;
extern BOOL isRun;
extern BOOL backStageRun;
extern BOOL anyPosition;
extern BOOL isLittle;
/*初始化修改器*/
void initModifier(void){
SetConsoleTitle("【植物大战僵尸】 C语言修改器 v0.22");
isRun=openGameProcess();
}
/*打开游戏进程*/
BOOL openGameProcess(void){
setColor(14);
printf("正在打开进程...\n");
//寻找进程名称并返回pid
if(FindProcessPid(PROCESS_NAME,Pid)){
showProcessName("[","]");
printf("[Pid:%d]\n",Pid);
hProcess=OpenProcess(PROCESS_ALL_ACCESS,FALSE,Pid);
if (hProcess!=0){
setColor(10);
showProcessName("\n成功打开游戏进程[","]!");
printf("进程句柄:%d\n",hProcess);
if(readMemory(hProcess,0x42748E,0,4)==0xFF563DE8){
if(readMemory(hProcess,0x0054EBEF,0,1)==0xFF563DC3){
backStageRun=TRUE;
}
if(readMemory(hProcess,0x0040FE30,0,1)==0xFF563D81&&readMemory(hProcess,0x00438E40,0,1)==0xFF563DEB&&readMemory(hProcess,0x0042A2D9,0,1)==0xFF563D8D){
anyPosition=TRUE;
}
if(readMemory(hProcess,0x00523ED5,0,1)==0xFF563DEB){
isLittle=TRUE;
}
return TRUE;
}else{
setColor(14);
printf("\n不支持的游戏版本!\n");
return FALSE;
}
}else{
setColor(12);
showProcessName("\n打开游戏进程[","]失败!\n");
}
}else{
setColor(14);
showProcessName("未找到游戏进程:","\n");
}
return FALSE;
}
/*是否已经读取游戏进程*/
BOOL openModify(void){
if(hProcess==0){
setColor(14);
printf("\n请先打开修改器搜索游戏句柄!\n");
return FALSE;
}
return TRUE;
}
/*选择流程*/
void Choice(void){
//缓冲区
int _tempValue;
setColor(13);
//根据字符判断应该执行什么流程
switch(command){
case 'O':
isRun=openGameProcess();
pause();
break;
#if DEBUG
case 'T':
if(openModify()){
}
break;
#endif
/*常规修改*/
case 'a':
if(!openModify()){
pause();
break;
}
getchar();
setColor(14);
printf("\n已进入【常规修改】菜单,请选择子选项:");
command=getchar();
setColor(13);
switch(command){
case '1':
if(openModify()){
printf("\n请输入要修改的阳光数量:");
scanf("%d",&_tempValue);
_tempValue=limit(_tempValue,0,9990);
cheatMsg(writeMemory(hProcess,0x006A9EC0,2,_tempValue,4,0x768,0x5560),"阳光");
}
break;
case '2':
if(openModify()){
printf("\n请输入要修改的金钱数量:");
scanf("%d",&_tempValue);
_tempValue=limit(_tempValue,0,99999);
cheatMsg(writeMemory(hProcess,0x006A9EC0,2,_tempValue,4,0x82C,0x28),"金钱");
}
break;
case '3':
if(openModify())cheatMsg(writeMemory(hProcess,0x00487296,0,0x1477,2),"卡牌无冷却");
break;
case '4':
if(openModify()