植物大战僵尸-杂交版-修改阳光-C语言代码版
植物大战僵尸-杂交版-修改阳光-C语言代码版
C语言版
网盘链接
链接: https://caiyun.139.com/m/i?014Mccl7DcrO1
提取码:vXky
若无法修改,需要参考此篇文章,使用CE找出阳光的基址,再进行修改
https://www.cnblogs.com/harlanlu/p/18223471
阳光的基址在 C 语言代码中第68行:
DWORD SunShineBaseAddress = 0x006A9EC0; //基址-此处地址尤为重要
游戏下载:
https://www.cnblogs.com/harlanlu/p/18223442
#include <windows.h>
#include <stdio.h>
#include <pthread.h>
/*
颜色函数SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),前景色 | 背景色 | 前景加强 | 背景加强);
前景色:数字0-15 或 FOREGROUND_XXX 表示 (其中XXX可用BLUE、RED、GREEN表示)
前景加强:数字8 或 FOREGROUND_INTENSITY 表示
背景色:数字16 32 64 或 BACKGROUND_XXX 三种颜色表示
背景加强: 数字128 或 BACKGROUND_INTENSITY 表示
主要应用:改变指定区域字体与背景的颜色
前景颜色对应值:
0=黑色 8=灰色
1=蓝色 9=淡蓝色 十六进制
2=绿色 10=淡绿色 0xa
3=湖蓝色 11=淡浅绿色 0xb
4=红色 12=淡红色 0xc
5=紫色 13=淡紫色 0xd
6=黄色 14=淡黄色 0xe
7=白色 15=亮白色 0xf
也可以把这些值设置成常量。
*/
void color(short x) //自定义函根据参数改变颜色
{
if(x>=0 && x<=15)//参数在0-15的范围颜色
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), x); //只有一个参数,改变字体颜色
else//默认的颜色白色
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7);
}
int main()
{
HWND hwnd = FindWindow(NULL, "植物大战僵尸杂交版v2.0.88"); //找到窗口
if(hwnd == 0)
{
printf("获取句柄失败,请先打开游戏\n");
system("pause");
return -1;
}
DWORD dwPID = 0;
GetWindowThreadProcessId(hwnd, &dwPID); //获取进程标识
if (dwPID == 0)
{
printf("获取PID失败,请先打开游戏\n");
system("pause");
return -1;
}
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, 0, dwPID);
if (hProcess == NULL)
{
printf("进程打开失败,请先打开游戏\n");
system("pause");
return -1;
}
DWORD dwSize = 0;
int modifySunshine;
while(1){
DWORD SunShineBaseAddress = 0x006A9EC0; //基址-此处地址尤为重要
DWORD SunShineBaseAddressValue = 0; //基址值
if (0 == ReadProcessMemory(hProcess, (LPVOID)SunShineBaseAddress, &SunShineBaseAddressValue, sizeof(DWORD), &dwSize))
{
printf("静态址获取失败,请先进入植物种植界面\n");
// system("pause");
// return -1;
}
DWORD SunShineOffsetFirst = 0x768; //一级偏移
DWORD SunShineOffsetFirstValue = 0; //一级偏移值
if (0 == ReadProcessMemory(hProcess, (LPVOID)(SunShineBaseAddressValue + SunShineOffsetFirst), &SunShineOffsetFirstValue, sizeof(DWORD), &dwSize))
{
printf("一级偏移获取失败,请先进入植物种植界面\n");
// system("pause");
// return -1;
}
DWORD SunShineOffsetSecond = 0x5560; //二级偏移
DWORD SunShineNum=0; //二级偏移值,即阳光数量
if (0 == ReadProcessMemory(hProcess, (LPVOID)(SunShineOffsetFirstValue + SunShineOffsetSecond), &SunShineNum, sizeof(DWORD), &dwSize))
{
printf("二级偏移获取失败,请先进入植物种植界面\n");
// system("pause");
// return -1;
}
printf("初始阳光值:%d\n", SunShineNum);
color(11);
printf("\n请输入阳光的修改值:");
scanf("%d", &modifySunshine);
color(16);
WriteProcessMemory(hProcess, (LPVOID)(SunShineOffsetFirstValue + SunShineOffsetSecond), &modifySunshine, sizeof(DWORD), &dwSize);
printf("\n修改成功!\n");
}
// printf("修改成功!");
CloseHandle(hProcess);
return 0;
}