用C语言制作单机游戏外挂 附:图文教程

更新时间:2023-09-19 18:06:01 阅读量: 小学教育 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

【新手教程】用C语言制作单机游戏外挂 附:图文教程

启动VC++6.0,创建一个项目,就和你上机时候一样,然后开始输入代码

头文件当然先输入,那个stdio.h我们就不多说了,谁都懂的,现在我们要输入第二个书上没有的

#include

这个windows.h非常重要,如果缺少,后面很多函数将无法调用

好了,接下来自然是main函数,这个也不解释大家都懂,然后我们外挂当然要说明 prinf这个函数也是书上的常用的知识,说明就这样输到屏幕上

这里嘛,就拿我前天在贴吧上推荐的游戏<双星物语2>开刀,原因是我打了半天打不过把我惹毛了

那么,我的说明是这样的,代码如下

首先我们先把退出功能给做了,我们用一个while(1)循环让程序持续运行,因此只要一个

break;跳出循环就能让程序退出了

这里我们将大小写E都考虑到,为的是让操作更加人性化,好了,如果输入的字母不是E,就执行else

然后我们继续判断输入的字母是什么,我们现在先做打开外挂这部分,看上图,其中O是打开外挂的命令,写到这里我们要回到顶部定义两个变量,看我红圈,一个是HWND(句柄),一个是DWORD(双字),你可以把两个都理解为我们熟悉的int,他们都是数字,只不过叫法不同

我觉得我有必要解释下句柄(HWND)和PID是什么,我们可以把它们理解成我们现实中的学生证和身份证,两个东西都可以证明你的身份,功能都是一样的,只不过叫法不同,而且你的身份证和学生证是唯一的,也就是说没有人的身份证学生证和你的一模一样,计算机里的程序也是这样,每一个程序都会有他的身份证明,而且也是唯一的,为什么要这两样东西呢,想想,我们要修改的是双星物语2这个游戏,而不是暗黑破坏神3这玩意,当然要

用这两个东西确认我们要修改的程序

好了,我们继续,看代码我们知道,修改游戏的代码应该写在这里

代码怎么写呢,不急,我们先把游戏打开

好了,打开游戏。憋一眼,看到这款游戏的窗体上写着“双星物语2”,我们待会就要用这个名字来取得这个游戏程序的句柄和PID(process ID)

现在我们在刚刚说的地方写入代码,第一个函数FindWindow就是靠名字来取得这个游戏程序的句柄,第二个GetWindowThreadProcessId是靠句柄取得PID,为什么要靠句柄取得PID呢,因为我们修改的游戏需要PID而不是句柄,就像你要去开房,学生证没用,要身份证才行

打开大门后可以干事了,我们现在先做修改金钱的部分,如上代码,应该不难理解

现在我们要用到一个软件,名字叫CE,假如你没有,你可以去这里下载 http://www.xiazaiba.com/html/2420.html 或者百度cheat engine,我的是5.6.1版本

我建议不会用的可以先学习下教程,这里我简单做下教程(很容易的),看图

点开后,选择游戏进程,什么?不知道什么叫游戏进程,那把任务管理器打开,然后选到游戏的那个点右键再点跳转到进程,再在上面找到和它一样的就行了,然后点open

然后我们切回游戏画面,把现在的钱的数目记下

回到ce,填写刚刚数字,然后点first scan,然后出现以下

回到游戏,再弄点钱,然后再回ce,填写新的钱数,再点next scan

之后左边就剩下一个了

那好笔把地址抄下吧,这个就是金钱的地址,打个比方就是抢银行时银行金库的位置,回到VC继续编程,可以看到我们又定义了三个变量DWORD,一个呢就是钱的数目,一个呢记录地址,

还有一个记录执行结果,就是有没有干成功,有的话不等于0,没的话等于0

额,这里还要加个getchar()之前忘记了,用来抵消回车的 可以运行下看看了

看,钱成功到手了

之后我们修改下血量,其实换汤不换药,先切回游戏看血量

回ce填写

然后让怪K两下让血变化

回去继续查找

找到地址了

其实只要把之前那个改钱的代码复制一遍,判断换成H,然后修改下面的几个地方

再看看

成功了

最后,贴上完整代码,如果你实在不懂就复制粘贴把,只要改几个地方,别的游戏通用(当然不是全部都可以,单机游戏绝大部分没问题,网络游戏仅部分没问题) #include #include void main(void) {

char Command; HWND hWnd;

DWORD Pid; HANDLE hProcess=0; while(1) {

printf(\———————————双星物语2 游戏外挂——————————\\n\printf(\打开外挂 O 修改金钱 M \\n\printf(\修改血量 H 退出外挂 E \\n\

printf(\———————————------------------——————————\\n\Command=getchar(); getchar();

if (Command =='E'||Command =='e') { break; } else {

if (Command=='O'||Command=='o') {

hWnd=FindWindow(NULL,\双星物语2\if (hWnd!=0)

{

GetWindowThreadProcessId(hWnd,&Pid);

hProcess=OpenProcess(PROCESS_ALL_ACCESS,FALSE,Pid); if (hProcess==0) {

printf(\打开游戏进程失败\\n\} else {

printf(\成功打开游戏进程\\n\} } }

if (Command=='M'||Command=='m') {

if (hProcess==0) {

printf(\请先打开外挂\\n\} else {

DWORD Money; DWORD Addr=0x005b85b0; printf(\您想多少钱?:\scanf(\

res=WriteProcessMemory(hProcess,(LPVOID)Addr,&Money,4,0); if (res==0) {

printf(\修改失败\\n\} else {

printf(\修改成功\\n\} } }

if (Command=='H'||Command=='h')

{

if (hProcess==0) {

printf(\请先打开外挂\\n\} else {

DWORD HP; DWORD Addr=0x005b85cc; printf(\您想多少血?:\

scanf(\if (res==0) {

printf(\修改失败\\n\} else {

printf(\修改成功\\n\} } } } } return; }

{

if (hProcess==0) {

printf(\请先打开外挂\\n\} else {

DWORD HP; DWORD Addr=0x005b85cc; printf(\您想多少血?:\

scanf(\if (res==0) {

printf(\修改失败\\n\} else {

printf(\修改成功\\n\} } } } } return; }

本文来源:https://www.bwwdw.com/article/64ph.html

Top