植物大战僵尸中文版源代码

植物大战僵尸中文版源代码


2024年5月2日发(作者:错误651的解决办法)

植物大战僵尸外挂c语言源代码

//

// Microsoft Visual C++ generated resource script.

//

#include "resource.h"

#define APSTUDIO_READONLY_SYMBOLS

/////////////////////////////////////////////////////////////////////////////

//

// Generated from the TEXTINCLUDE 2 resource.

//

#include "afxres.h"

/////////////////////////////////////////////////////////////////////////////

#undef APSTUDIO_READONLY_SYMBOLS

/////////////////////////////////////////////////////////////////////////////

// 中文(简体,中国) resources

#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)

LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED

#ifdef APSTUDIO_INVOKED

/////////////////////////////////////////////////////////////////////////////

//

// TEXTINCLUDE

//

1 TEXTINCLUDE

BEGIN

"resource.h0"

END

2 TEXTINCLUDE

BEGIN

"#include ""afxres.h""rn"

"0"

END

3 TEXTINCLUDE

BEGIN

"rn"

"0"

END

#endif // APSTUDIO_INVOKED

/////////////////////////////////////////////////////////////////////////////

//

// Dialog

//

IDD_DIALOG1 DIALOGEX 0, 0, 76, 164

STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER |

WS_POPUP | WS_CAPTION | WS_SYSMENU

CAPTION "PVZ修改器"

FONT 8, "MS Shell Dlg", 400, 0, 0x1

BEGIN

EDITTEXT IDC_EDIT1,7,39,62,17,ES_AUTOHSCROLL | ES_NUMBER

PUSHBUTTON "修改阳光",IDC_BUTTON1,7,57,62,16

LTEXT "阳光数值:",IDC_STATIC,7,10,62,8

LTEXT "游戏正在运行",IDC_STATIC2,7,148,55,9,NOT WS_VISIBLE

EDITTEXT IDC_EDIT2,7,20,62,17,ES_AUTOHSCROLL | ES_READONLY

PUSHBUTTON "显示游戏窗口",IDC_BUTTON2,7,102,62,10

PUSHBUTTON "重定位游戏",IDC_BUTTON3,7,88,62,14

PUSHBUTTON "修改金币",IDC_BUTTON4,7,73,62,15

CONTROL "吸附游戏窗口",IDC_CHECK1,"Button",BS_AUTOCHECKBOX

| WS_TABSTOP,7,136,62,9

PUSHBUTTON "隐藏游戏窗口",IDC_BUTTON5,7,112,62,10

CONTROL "无cd模式",IDC_CHECK2,"Button",BS_AUTOCHECKBOX |

WS_TABSTOP,7,124,62,9

END

/////////////////////////////////////////////////////////////////////////////

//

// DESIGNINFO

//

#ifdef APSTUDIO_INVOKED

GUIDELINES DESIGNINFO

BEGIN

IDD_DIALOG1, DIALOG

BEGIN

LEFTMARGIN, 7

RIGHTMARGIN, 69

TOPMARGIN, 7

BOTTOMMARGIN, 157

END

END

#endif // APSTUDIO_INVOKED

#endif // 中文(简体,中国) resources

/////////////////////////////////////////////////////////////////////////////

#ifndef APSTUDIO_INVOKED

/////////////////////////////////////////////////////////////////////////////

//

// Generated from the TEXTINCLUDE 3 resource.

//

/////////////////////////////////////////////////////////////////////////////

#endif // not APSTUDIO_INVOKED

//resource.h

//{{NO_DEPENDENCIES}}

// Microsoft Visual C++ 生成的包含文件。

// 供 使用

//

#define IDD_DIALOG1 101

#define IDC_EDIT1 1001

#define IDC_BUTTON1 1002

#define IDC_STATIC2 1006

#define IDC_EDIT2 1007

#define IDC_BUTTON2

#define IDC_BUTTON3

#define IDC_BUTTON4

#define IDC_CHECK1

#define IDC_BUTTON5

#define IDC_CHECK2

// Next default values for new objects

//

#ifdef APSTUDIO_INVOKED

#ifndef APSTUDIO_READONLY_SYMBOLS

1008

1009

1010

1012

1011

1013

#define _APS_NEXT_RESOURCE_VALUE 102

#define _APS_NEXT_COMMAND_VALUE 40001

#define _APS_NEXT_CONTROL_VALUE 1012

#define _APS_NEXT_SYMED_VALUE

#endif

#endif

//为了方便我直接使用了资源脚本创建的对话框

//以下是cpp文件

#include

#include

#include "resource.h"

#define WM_TIMER1 WM_USER+5

#define WM_TIMER2 WM_USER+6

101

#define WM_TIMER3 WM_USER+7

HWND hwndPVZ;

HWND hwndClient;

bool IsGameRun; //游戏是否运行

DWORD ProcId;

DWORD ThreadId;

HANDLE hProc;

HANDLE hThread;

DWORD cdAddr;//冷却时间的内存地址

const DWORD tmp = 5000;//冷却时间设为5000即无cd

const DWORD BaseAddr = 0x006a9ec0; //基址

bool IsSetTimer = false; //是否使程序窗口吸附于游戏

bool IsNoCD = false; //是否开启无cd模式

HHOOK hHook; //监视游戏窗口钩子的句柄

//RECT WndRect; //窗口的位置大小

BOOL CALLBACK MainProc(HWND hWnd,UINT uMsg,WPARAM

wParam,LPARAM lParam);//主窗口处理函数

DWORD ThreadProc(LPVOID lParam);//修改阳光内存函数

VOID CALLBACK TimerProc(HWND hwnd,UINT uMsg,UINT_PTR

idEvent,DWORD dwTime);//查看阳光函数——用于定时器,每0.5秒函数体执行一次

VOID CALLBACK WndProc(HWND hwnd,UINT uMsg,UINT_PTR

idEvent,DWORD dwTime);

DWORD ChangeMoney(LPVOID lParam);//修改金钱函数

void CalcCDAddr();//计算冷却时间的地址

VOID CALLBACK CDTimer(HWND hwnd,UINT uMsg,UINT_PTR

idEvent,DWORD dwTime);//定时器,用于循环修改冷却时间

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR

lpCmdLine,int nCmdShow)

{

HANDLE hToken;

if(OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,&hTok

en)){

TOKEN_PRIVILEGES tp;

egeCount = 1;

eges[0].Attributes = SE_PRIVILEGE_ENABLED;

if(LookupPrivilegeValue(NULL,SE_DEBUG_NAME,&eges[0].Luid)){

AdjustTokenPrivileges(hToken,FALSE,&tp,sizeof(tp),NULL,NULL);

}

CloseHandle(hToken);

}

IsGameRun = false;

DialogBox(hInstance,MAKEINTRESOURCE(IDD_DIALOG1),NULL,MainProc);

return 0;

}

BOOL CALLBACK MainProc(HWND hWnd,UINT uMsg,WPARAM

wParam,LPARAM lParam)

{

switch(uMsg)

{

case WM_INITDIALOG:

{

/////////////////////////////////////////////////////////

hwndPVZ = FindWindow("MainWindow","植物大战僵尸中文版");

if(hwndPVZ == NULL)

{

IsGameRun = false;

break;

}

ShowWindow(GetDlgItem(hWnd,IDC_STATIC2),SW_SHOW);

IsGameRun = true;

ThreadId = GetWindowThreadProcessId(hwndPVZ,&ProcId);

hProc = OpenProcess(PROCESS_ALL_ACCESS,false,ProcId);//获取游戏进程句柄

if(hProc == NULL)

return 0;

SetTimer(hWnd,WM_TIMER1,500,TimerProc);

hwndClient = hWnd;

//获取窗口位置

RECT WndRect;

GetWindowRect(hwndPVZ,&WndRect);

long temp = ;

if((temp|0x0000ffff) == 0xffff)

SetWindowPos(hWnd,HWND_TOP,-125,,0,0,SWP_N

OSIZE|SWP_NOSIZE|SWP_NOZORDER);

//HINSTANCE hPVZinstance =

(HINSTANCE)GetWindowLong(hwndPVZ,GWL_HINSTANCE);

}

break;

case WM_COMMAND:

{

if(LOWORD(wParam) == IDC_BUTTON1 && IsGameRun == true)

{

DWORD nSunny = GetDlgItemInt(hWnd,IDC_EDIT1,NULL,true);

//hThread =

CreateRemoteThread(hProc,NULL,0,ThreadProc,&nSunny,0,NULL);

//本来想创建远程线程到植物大战僵尸的主进程下的,显然多此一举了,这样反而会导

致游戏崩溃...

ThreadProc(&nSunny);

}

else if(LOWORD(wParam) == IDC_BUTTON2)

{

ShowWindow(hwndPVZ,SW_SHOWNORMAL);

SetWindowPos(hwndPVZ,HWND_TOP,0,0,0,0,SWP_NOSIZE|SWP_NOMOVE);

}

else if(LOWORD(wParam) == IDC_BUTTON3)

{

SendMessage(hWnd,WM_INITDIALOG,0,0);

}

else if(LOWORD(wParam) == IDC_BUTTON4)

{

DWORD nMoney = GetDlgItemInt(hWnd,IDC_EDIT1,NULL,true);

ChangeMoney(&nMoney);

}

else if(LOWORD(wParam) == IDC_CHECK1)

{

LRESULT r = SendMessage((HWND)lParam,BM_GETCHECK,0,0);

if(r == BST_CHECKED)

{

IsSetTimer = true;

SetTimer(hWnd,WM_TIMER2,10,WndProc);

ShowWindow(hWnd,SW_SHOWNORMAL);

}

else

{

IsSetTimer = false;

KillTimer(hWnd,WM_TIMER2);

}

}

else if(LOWORD(wParam) == IDC_BUTTON5) //隐藏游戏窗口

{

}

else if(LOWORD(wParam) == IDC_CHECK2) //无CD模式

{

LRESULT r = SendMessage((HWND)lParam,BM_GETCHECK,0,0);

if(r == BST_CHECKED)

{

IsNoCD = true;

CalcCDAddr();

SetTimer(hWnd,WM_TIMER3,500,CDTimer);

}

else

{

KillTimer(hwndClient,WM_TIMER3);

IsNoCD = false;

}

}

break;

}

case WM_CLOSE:

{

EndDialog(hWnd,0);

break;

}

default:

break;

}

return DefWindowProc(hWnd,uMsg,wParam,lParam);

}

DWORD ThreadProc(LPVOID lParam)

{

DWORD ObjAdd = BaseAddr;

DWORD nValue;

ReadProcessMemory(hProc,(void*)ObjAdd,&nValue,4,NULL);

ObjAdd = nValue + 0x768;

ReadProcessMemory(hProc,(void*)ObjAdd,&nValue,4,NULL);

ObjAdd = nValue + 0x5560;

WriteProcessMemory(hProc,(void*)ObjAdd,lParam,4,NULL);

//CloseHandle(hProc);

return 0;

}

VOID CALLBACK TimerProc(HWND hwnd,UINT uMsg,UINT_PTR

idEvent,DWORD dwTime)

{

KillTimer(hwnd,WM_TIMER1);

DWORD ObjAdd = BaseAddr;

DWORD nValue;

ReadProcessMemory(hProc,(void*)ObjAdd,&nValue,4,NULL);

ObjAdd = nValue + 0x768;

ReadProcessMemory(hProc,(void*)ObjAdd,&nValue,4,NULL);

ObjAdd = nValue + 0x5560;

ReadProcessMemory(hProc,(void*)ObjAdd,&nValue,4,NULL);

char szSun[20];

char szTemp[25] = "阳光:";

itoa(nValue,szSun,10);

strcat(szTemp,szSun);

if(nValue > 3430000000)

{

strcpy(szTemp,"游戏停止运行");

IsGameRun = false;

SetWindowPos(hwndClient,HWND_TOP,500,500,0,0,SWP_NOSIZE);

}

SetDlgItemText(hwnd,IDC_EDIT2,szTemp);

SetTimer(hwnd,WM_TIMER1,500,TimerProc);

}

VOID CALLBACK WndProc(HWND hwnd,UINT uMsg,UINT_PTR

idEvent,DWORD dwTime)

{

KillTimer(hwnd,WM_TIMER2);

if(IsSetTimer == true && IsGameRun == true)

{

RECT rect;

GetWindowRect(hwndPVZ,&rect);

SetWindowPos(hwnd,HWND_TOP,-125,,0,0,SWP_NOSIZE|SWP_

NOZORDER);

SetTimer(hwnd,WM_TIMER2,10,WndProc);

}

}

DWORD ChangeMoney(LPVOID lParam)

{

DWORD ObjAdd = BaseAddr;

DWORD nValue;

ReadProcessMemory(hProc,(void*)ObjAdd,&nValue,4,NULL);

ObjAdd = nValue+0x82c;

ReadProcessMemory(hProc,(void*)ObjAdd,&nValue,4,NULL);

ObjAdd = nValue+0x28;

WriteProcessMemory(hProc,(void*)ObjAdd,lParam,4,NULL);

return 0;

}

void CalcCDAddr()

{

DWORD ObjAdd = BaseAddr;

DWORD nValue;

ReadProcessMemory(hProc,(void*)ObjAdd,&nValue,4,NULL);

ObjAdd = nValue+0x768;

ReadProcessMemory(hProc,(void*)ObjAdd,&nValue,4,NULL);

ObjAdd = nValue+0x1C;

ReadProcessMemory(hProc,(void*)ObjAdd,&nValue,4,NULL);

ObjAdd = nValue+0x140;

ReadProcessMemory(hProc,(void*)ObjAdd,&nValue,4,NULL);

ObjAdd = nValue+0x4C;

cdAddr = ObjAdd;

}

VOID CALLBACK CDTimer(HWND hwnd,UINT uMsg,UINT_PTR

idEvent,DWORD dwTime)

{

DWORD tmpAddr = cdAddr - 0x50;

KillTimer(hwndClient,WM_TIMER3);

if(IsGameRun == false)

{

return;

}

for(int i=0;i<10;i++)

{

tmpAddr = tmpAddr + 0x50;

WriteProcessMemory(hProc,(void*)tmpAddr,&tmp,4,NULL);//遍历卡槽写入

cd=5000

}

SetTimer(hwndClient,WM_TIMER3,500,CDTimer);

}


发布者:admin,转转请注明出处:http://www.yc00.com/xitong/1714631320a2484298.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信