通过 C 语言编写一个简单的外挂,通过 API 函数修改游戏数据,从而实现作弊功能

● 对象分析

● 要用的 API 函数简单介绍

● 编写测试效果

● 总体评价

对象分析

本次游戏对象为 Super Mario XP

没有更新所以可用任意版本 试玩发现人物血量最大为 10,心最大为 99,命最大为 99

要用的 API 函数简单介绍

HWND FindWindow(LPCTSTR IpClassName,LPCTSTR IpWindowName);

// 通过类名或窗口名查找,返回窗口句柄

DWORD GetWindowThreadProcessId(HWND hWnd,LPDWORD lpdwProcessId);

// 得到窗口句柄后通过 GetWindowThreadProcessId 这个函数来获得窗口所属进程 ID 和线程 ID

HANDLE OpenProcess(DWORD dwDesiredAccess,BOOL bInheritHandle,DWORD dwProcessId)

// 打开一个已存在的进程对象,并返回进程的句柄

bool WriteProcessMemory(HANDLE hProcess,LPVOID lpBaseAddress,LPVOID lpBuffer,DWORD nSize,LPDWORD lpNumberOfBytesWritten);

// 能写入某一进程的内存区域。入口区必须可以访问,否则操作将失败

编写测试效果

打开游戏

运行外挂

成功执行

//  01一个简单的内存外挂.cpp

//  C/C++

#include <windows.h>

#include <stdio.h>

int main() {

HWND h = ::FindWindow(NULL, "Super Mario XP");  //  寻找并打开进程

DWORD processid;

GetWindowThreadProcessId(h, &processid);

HANDLE hprocess = 0;

hprocess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, processid);

if (hprocess == 0) {    //  对应处理

printf("打开进程失败!

"

);

return 1;

} else {

printf("打开进程成功!

"

);

DWORD hp = 10;  //  要修改的游戏数据最大值

DWORD heart = 99;

DWORD life = 99;

DWORD addr = 0x00428282;    //  通过CE找到的游戏数据地址

DWORD addr2 = 0x00428292;

DWORD addr3 = 0x004282a2;

DWORD res = WriteProcessMemory(hprocess, (LPVOID)addr, &hp, 4, 0);  //  写入内存修改游戏数据

DWORD res2 = WriteProcessMemory(hprocess, (LPVOID)addr2, &heart, 4, 0);

DWORD res3 = WriteProcessMemory(hprocess, (LPVOID)addr3, &life, 4, 0);

return 0;

}

总体评价

由于是简单外挂,没有 GDI 界面和失败对应处理,仅供入门学习交流!

对于热爱编程的人来说,有一群一起学习一起解答的小伙伴很重要!笔者有一个C语言/C++编程零基础入门学习交流俱乐部(点击进入),还有编程学习文件(源码,零基础教程,项目实战教学视频),欢迎初学者和正在进阶中的小伙伴们!

C语言游戏脚本:一个简单的内存脚本!相关推荐

  1. glibc版本查看_[译] 写一个简单的内存分配器(替换glibc中的malloc函数)

    本文介绍如何用c语言实现一个简单的内存分配器,可替换glibc中的 malloc(), calloc(), realloc(), free(). 这是一篇入门级别的文章,所以不会介绍所有的细节. 代码 ...

  2. 一个简单的SHELL脚本模板

    一个简单的SHELL脚本模板,适用于Java项目的启动,停止,重启. 如果在windows上编辑,请使用Notepad++ 设置编码格式为UTF-8无BOM编码,脚本的文档格式为UNIX格式,否则会因 ...

  3. python 消息队列 go_gmq: gmq是基于redis提供的特性,使用go语言开发的一个简单易用的消息队列;支持延迟任务,异步任务,超时任务,优先级任务...

    1. 概述 gmq是基于redis提供的特性,使用go语言开发的一个简单易用的队列;关于redis使用特性可以参考之前本人写过一篇很简陋的文章Redis 实现队列; gmq的灵感和设计是基于有赞延迟队 ...

  4. 编写一个最简单的.php,学习猿地- 说明 如果我们要编写一个简单的PHP脚本,需要学习哪些...

    说明 如果我们要编写一个简单的 PHP 脚本,需要学习哪些基础知识呢? PHP 基础 PHP 脚本可放置于文档中的任何位置. 标准 的 PHP 脚本以 <?php 开头,以 ?> 结尾: ...

  5. linux系统写一个脚本,编写一个简单的linuxshell脚本

    shell脚本和windows平台上的bat批处理是一样的,简化用户处理重复动作的操作,shell脚本由shell命令组成.下面是学习啦小编收集整理的编写一个简单的linuxshell脚本,希望对大家 ...

  6. 编程题目:使用C++语言模拟完成一个简单的计算机系统

    编程题目:使用C++语言模拟完成一个简单的计算机系统(举一个管理人员的例子,其他的例子与下述方法一致即可) #include<iostream.h> #include<math.h& ...

  7. 一个简单的MATLAB脚本——快速行进算法(FMM))

    一个简单的MATLAB脚本--快速行进算法(FMM) 介绍快速行进算法(FMM)的简单MATLAB脚本,不到20行代码实现快速行进算法的运算结果,而且计算速度非常快.给了两个实例模型来说明计算结果. ...

  8. c语言设计程序计算器,C语言程序设计,做一个简单计算器

    题目: C语言程序设计,做一个简单计算器 程序内容有:加减乘除和平方,立方,开方等.用if或者swith结构来编程. 算加法时只输出加法的结果,算减法时只出减法的结果,如此类推. 解答: 已发送, # ...

  9. python自学篇十[ 面向对象 (四) :王者荣耀小游戏+模拟一个简单的银行进行业务办理的类]

    python基础系列: python自学篇一[ Anaconda3安装 ] python自学篇二[ pycharm安装及使用 ] python自学篇三[ 判断语句if的使用 ] python自学篇四[ ...

最新文章

  1. P3482 [POI2009]SLO-Elephants
  2. 详解虚函数的实现过程之虚基类(4)
  3. mariadb mysql版本对应_弹指神通MariaDB——MariaDB与MySQL各版本的区别
  4. YbtOJ#532-往事之树【广义SAM,线段树合并】
  5. Android 新一代多渠道打包神器
  6. ubunut18.04 pycharm创建快捷方式和右键创建空白文件夹
  7. 学籍管理系统mysql实训报告_学生学籍管理系统数据库设计
  8. 4个GIF免费压缩工具,尽量保留画质的前提下一键快速压缩!
  9. Excel/WPS之粘贴可见内容
  10. python如何设计系统界面教程_python图形化界面设计tkinter!python用户界面设计教程...
  11. 哪些平台需要申请EDI证?有流程介绍吗?
  12. 蓝牙定位技术原理--蓝牙人员定位--蓝牙定位--新导智能
  13. 狂神说Spring笔记(全网最全)
  14. java第一周_从计算机基础到流程控制语句(if_else)
  15. 如何开通公众号留言功能?
  16. 5G时代带动陶瓷PCB成长——GPS陶瓷天线调试方法 (一)
  17. 基于.NET实现的飞机订票系统
  18. 改进的人工鱼群算法求解TSP问题的研究(Matlab代码实现)
  19. Python数据分析和处理
  20. 如何克隆服务器系统盘,双硬盘轻松克隆MAC OS X系统全攻略

热门文章

  1. [图像分割综述] Image Segmentation Using Deep Learning: A Survey
  2. 想请教大家都在哪个网站买书啊?
  3. HTML5网页设计基础——音乐盒的制作
  4. 如何用excel批量新建文件夹并命名?
  5. 404优化网站html,404页面
  6. CSS伪类(Pseudo-classes)、伪元素、伪类选择器
  7. 赏析“百度大脑事件图谱:洞察复杂世界中的事件知识”
  8. 沙尘暴ppt计算机,沙尘暴课件.ppt
  9. tecplot改变坐标轴范围
  10. 0基础学习C语言第十一章:文件读写