植物大戰殭屍-雜交版-修改陽光

Harlanlu發表於2024-05-30

植物大戰殭屍-雜交版-修改陽光

C語言版

連結: https://caiyun.139.com/m/i?014MccuLAnI50

提取碼:jL0r

遊戲下載:

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;
}

相關文章