植物大战僵尸-杂交版-修改阳光-C语言代码版

植物大战僵尸-杂交版-修改阳光-C语言代码版

C语言版

网盘链接

链接: https://caiyun.139.com/m/i?014Mccl7DcrO1  

提取码:vXky

 

点我直接下载EXE

 

若无法修改,需要参考此篇文章,使用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;
}

 

posted @ 2024-05-30 22:55  Harlanlu  阅读(1206)  评论(0编辑  收藏  举报