外挂网站带后台源码分享

今天给各位分享外挂网站带后台源码分享的知识,其中也会对进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

今天小编花点时间给大家讲讲植物大战僵尸外挂教程,希望大家给点意见。

关于CE(CheatEngine)的用法,以后有时间的话会发表相关视频教程。

根据查到指针永久基址+偏移地址就可以获得/设置阳光值。所以我们可以通过打开游戏进程,改写进程内相应的内存就可以实现游戏的修改。

现在直接上源代码:

include<windows.h>

pragmaonce

include<windows.h>

include”WG.h”

HWNDhWnd;//窗口句柄

DWORDpid;//进程句柄

HANDLEhProcess=0;

//阳光的基地址和偏移

DWORDba_addr=0x007794F8;//基地址

DWORDm_offset1=0x868;//偏移1

DWORDm_offset2=0x5578;//偏移2

intUpdateYG(intvalue)

{

if(hProcess==0)

{

return0;

}

else

{

DWORDm_tempadd;

DWORDYG;

YG=(unsignedlong)value;

//读取基址里面的数据(是一个指针)

ReadProcessMemory(hProcess,(LPVOID)ba_addr,&m_tempadd,4,0);

//基址加偏移地址1的数据(是一个指针)

ReadProcessMemory(hProcess,(LPVOID)(m_tempadd+m_offset1),&m_tempadd,4,0);

/**********************

*这里相当于一个二级指针(加偏移地址)

*ReadProcessMemory函数读取相应进程的指定位置指定大小的数据到缓冲区

*基址加偏移地址为二级指针

*基址加偏移地址取内容再加偏移地址为一级指针(这个指针就是指向了阳光值的内存单元)

******************/

//要修改的内存地址是(tempadd+offset4)

DWORDres=WriteProcessMemory(hProcess,(LPVOID)(m_tempadd+m_offset2),&YG,4,0);

if(res==0)

{

return0;

}

else

{

return1;

}

}

}

intopenGameJc()

{

hWnd=FindWindow(NULL,_T(“Plantsvs.Zombies1.2.0.1073RELEASE”));

if(hWnd!=0)

{

GetWindowThreadProcessId(hWnd,&pid);

hProcess=OpenProcess(PROCESS_ALL_ACCESS,FALSE,pid);//打开进程,取得句柄

if(hProcess==0)

{

return0;

}

else

{

return1;

}

}

else

{

return0;

}

}

main.c

include”WG.h”

#include<stdlib.h>

HINSTANCEappInstance;

LRESULTCALLBACKWndProc(HWNDhWnd,UINTuMsg,WPARAMwParam,LPARAMlParam);

intWINAPIWinMain(HINSTANCEhInstance,HINSTANCEhPreInstance,PSTRszCmdLine,intiCmdShow)

{

//

appInstance=hInstance;

//

staticTCHARszAppName[]=TEXT(“MyWindows”);

HWNDhwnd;

MSGmsg;

WNDCLASSwndclass;

wndclass.style=CS_HREDRAW|CS_VREDRAW;

wndclass.lpfnWndProc=WndProc;

wndclass.cbClsExtra=0;//额外空间

wndclass.cbWndExtra=0;//额外空间

wndclass.hInstance=hInstance;//实例句柄

wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);//图标

wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);//光标

wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);//白色

wndclass.lpszMenuName=NULL;//菜单

wndclass.lpszClassName=szAppName;//窗口类名

//注册窗口类

if(!RegisterClass(&wndclass))

{

MessageBox(NULL,TEXT(“这个程序需要在WindowsNT才能执行”),szAppName,MB_OK);

return0;

};

//创建窗口设置窗口属性

hwnd=CreateWindow(szAppName,//窗口类名称

TEXT(“植物大战僵尸外挂v1.0”),//窗口标题

WS_OVERLAPPEDWINDOW,//窗口风格

200,//CW创建窗口选项初始x坐标

200,//初始y坐标

300,//初始x方向尺寸

300,//初始y方向尺寸

NULL,//父窗口句柄

NULL,//窗口菜单句柄

hInstance,//程序实例句柄

NULL//创建参数

);

//CreateWindow后会产生几个非队列消息直接调用过程函数(重点)

ShowWindow(hwnd,iCmdShow);

UpdateWindow(hwnd);//(重点)UpdateWindow会直接发送一个非队列的WM_PAINT消息让窗口绘制

//因为WM_PAINT默认是在队列最后的但是这里在最后的话就不好,一个窗口创建后ShowWindow后就应该立即显示上面的文字

//所以调用UpdateWIndow让它立即绘制

/******************

*消息循环,操作系统会把所有消息分配给每个应用程序

*所以每个应用程序都有一个消息队列,GetMessage就是向当前程序的消息队列内获取消息

*lpMsg第一个参数用于存放当前获取的消息

*hWnd需要获取消息的窗口句柄,为NULL时获取当前程序所有窗口的消息(必须属于当前线程)

*wMsgFilterMin指定获取消息值的最小整数(消息其实就是整数)

*wMsgFilterMax指定获取小的最大值

*********************/

while(GetMessage(&msg,NULL,0,0))

{

TranslateMessage(&msg);//函数将虚拟键消息转换为字符消息,

DispatchMessage(&msg);//函数分派一个消息给窗口过程函数,实际上是给操作系统操作系统调用的

}

returnmsg.wParam;

/***************

*1、在WinMain主函数中,最后的返回值是msg.wParam,这个参数是传递给voidPostQuitMessage(intnExitCode);这个函数的参数nExitCode的。

*2、nExitCode:指定应用程序退出代码。此值被用作消息WM_QUIT的wParam参数。

*3、总之,当接收到一个WM_QUIT消息时,程序就中止。这时,WinMain函数应退出应用程序,并且返回传递给WM_QUIT消息的wParam参数的值。如果由于调用PostQuitMessage函数而接收到WM_QUIT消息,此时WM_QUIT消息的wParam的值即是PostQuiMessage函数的nExitCode的值。nExitCode一般为0。

***************/

}

LRESULTCALLBACKWndProc(HWNDhWnd,UINTuMsg,WPARAMwParam,LPARAMlParam)

{

HWNDhButton;

HWNDhEdit;

HDChdc;//HandleDeviceContext

HWNDhbtnUpdate;//修改阳光

PAINTSTRUCTps;

RECTrect;

LPTSTRresult[128];//结果

switch(uMsg)

{

caseWM_PAINT:

hdc=BeginPaint(hWnd,&ps);

GetClientRect(hWnd,&rect);

DrawText(hdc,TEXT(“叫我涵涵”),-1,&rect,DT_SINGLELINE|DT_CENTER|DT_VCENTER);

EndPaint(hWnd,&ps);

break;

caseWM_CREATE:

hEdit=(HWND)CreateWindow(TEXT(“edit”),NULL,WS_CHILD|WS_VISIBLE|WS_BORDER|ES_LEFT,

120,0,150,20,hWnd,(HMENU)111,appInstance,NULL);

hButton=(HWND)CreateWindow(TEXT(“Button”),//Button是预定义窗体类

TEXT(“打开游戏进程”),

WS_VISIBLE|WS_CHILD|BS_PUSHBUTTON,

10,10,100,50,

hWnd,

(HMENU)110,//(重点)这里设置按钮id,但是原本是设置菜单的所以需要HMENU

appInstance,

NULL);

//修改阳光

hbtnUpdate=(HWND)CreateWindow(TEXT(“Button”),//Button是预定义窗体类

TEXT(“修改阳光”),

WS_VISIBLE|WS_CHILD|BS_PUSHBUTTON,

120,40,150,40,

hWnd,

(HMENU)112,//(重点)这里设置按钮id,但是原本是设置菜单的所以需要HMENU

appInstance,

NULL);

break;

/*******************

*当用户点击菜单、按钮、下拉列表框等控件时候,

*会触发WM_COMMAND.LOWORD(wParam)是控件或菜单或加速键的ID

*如果LOWORD(wParam)是控件ID,HIWORD(wParam)是notificationcode,

*比如BN_CLICKED,BN_DBLCLK等,标志用户对控件的操作,双击,单击

*lparam是子窗体句柄

*********************/

caseWM_COMMAND:

//按钮

if(LOWORD(wParam)==112&&HIWORD(wParam)==BN_CLICKED)

{

//根据父窗口句柄以及控件id,获取空间句柄,然后用GetWindowText获取控件内的文本

GetWindowText(GetDlgItem(hWnd,111),result,128);

if(UpdateYG(_ttoi(result))==1)

{

MessageBox(hWnd,TEXT(“修改成功”),TEXT(“涵涵提示”),MB_OK);

}

else{

MessageBox(hWnd,TEXT(“修改失败”),TEXT(“涵涵提示”),MB_OK);

}

}

if(LOWORD(wParam)==110&&HIWORD(wParam)==BN_CLICKED)

{

if(openGameJc()==1){

MessageBox(hWnd,TEXT(“开启游戏进程成功”),TEXT(“提示”),MB_OK);

}

else{

MessageBox(hWnd,TEXT(“开启游戏进失败”),TEXT(“提示”),MB_OK);

}

}

break;

caseWM_DESTROY:

PostQuitMessage(0);

break;

/********成功退出****

****************

*用户通过点击关闭程序按钮后,消息队列增加一条消息WM_CLOSE,

*然后程序从消息队列中取走WM_CLOSE,调用DestroyWindow(),

*消息队列增加WM_DESTROY,应用程序再次取走,并调用PostQuitMessage(),

*最终得到WM_QUIT而使消息循环退出,程序退出。

************/

default:

//我们不想关心的都用默认处理方式

returnDefWindowProc(hWnd,uMsg,wParam,lParam);

break;

}

return0;

}

获取方式:

1.在你手机的右上角有【关注】选项,或点击我的头像,点击关注!(关注我)

2.关注后,手机客户端点击我的主页面,右上角有私信,请私信发我:编程

电脑已经设置好了关键词自动回复,自动领取就好了!这几天上万个消息,真的回复不过来,所以回复的时候请注意关键词!

其实做为一个开发者,有一个学习的氛围跟一个交流圈子特别重要这里请私信我“编程”不管你是小白还是大牛欢迎入住大家一起交流成长。小编会在里面不定期分享干货源码,包括我精心整理的一份c++零基础教程。欢迎各位感兴趣的的小伙伴。

学习思路:

学习资料:

关于外挂网站带后台源码分享,的介绍到此结束,希望对大家有所帮助。

Published by

风君子

独自遨游何稽首 揭天掀地慰生平