C语言游戏脚本:一个简单的内存脚本!
通过 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语言游戏脚本:一个简单的内存脚本!相关推荐
- glibc版本查看_[译] 写一个简单的内存分配器(替换glibc中的malloc函数)
本文介绍如何用c语言实现一个简单的内存分配器,可替换glibc中的 malloc(), calloc(), realloc(), free(). 这是一篇入门级别的文章,所以不会介绍所有的细节. 代码 ...
- 一个简单的SHELL脚本模板
一个简单的SHELL脚本模板,适用于Java项目的启动,停止,重启. 如果在windows上编辑,请使用Notepad++ 设置编码格式为UTF-8无BOM编码,脚本的文档格式为UNIX格式,否则会因 ...
- python 消息队列 go_gmq: gmq是基于redis提供的特性,使用go语言开发的一个简单易用的消息队列;支持延迟任务,异步任务,超时任务,优先级任务...
1. 概述 gmq是基于redis提供的特性,使用go语言开发的一个简单易用的队列;关于redis使用特性可以参考之前本人写过一篇很简陋的文章Redis 实现队列; gmq的灵感和设计是基于有赞延迟队 ...
- 编写一个最简单的.php,学习猿地- 说明 如果我们要编写一个简单的PHP脚本,需要学习哪些...
说明 如果我们要编写一个简单的 PHP 脚本,需要学习哪些基础知识呢? PHP 基础 PHP 脚本可放置于文档中的任何位置. 标准 的 PHP 脚本以 <?php 开头,以 ?> 结尾: ...
- linux系统写一个脚本,编写一个简单的linuxshell脚本
shell脚本和windows平台上的bat批处理是一样的,简化用户处理重复动作的操作,shell脚本由shell命令组成.下面是学习啦小编收集整理的编写一个简单的linuxshell脚本,希望对大家 ...
- 编程题目:使用C++语言模拟完成一个简单的计算机系统
编程题目:使用C++语言模拟完成一个简单的计算机系统(举一个管理人员的例子,其他的例子与下述方法一致即可) #include<iostream.h> #include<math.h& ...
- 一个简单的MATLAB脚本——快速行进算法(FMM))
一个简单的MATLAB脚本--快速行进算法(FMM) 介绍快速行进算法(FMM)的简单MATLAB脚本,不到20行代码实现快速行进算法的运算结果,而且计算速度非常快.给了两个实例模型来说明计算结果. ...
- c语言设计程序计算器,C语言程序设计,做一个简单计算器
题目: C语言程序设计,做一个简单计算器 程序内容有:加减乘除和平方,立方,开方等.用if或者swith结构来编程. 算加法时只输出加法的结果,算减法时只出减法的结果,如此类推. 解答: 已发送, # ...
- python自学篇十[ 面向对象 (四) :王者荣耀小游戏+模拟一个简单的银行进行业务办理的类]
python基础系列: python自学篇一[ Anaconda3安装 ] python自学篇二[ pycharm安装及使用 ] python自学篇三[ 判断语句if的使用 ] python自学篇四[ ...
最新文章
- P3482 [POI2009]SLO-Elephants
- 详解虚函数的实现过程之虚基类(4)
- mariadb mysql版本对应_弹指神通MariaDB——MariaDB与MySQL各版本的区别
- YbtOJ#532-往事之树【广义SAM,线段树合并】
- Android 新一代多渠道打包神器
- ubunut18.04 pycharm创建快捷方式和右键创建空白文件夹
- 学籍管理系统mysql实训报告_学生学籍管理系统数据库设计
- 4个GIF免费压缩工具,尽量保留画质的前提下一键快速压缩!
- Excel/WPS之粘贴可见内容
- python如何设计系统界面教程_python图形化界面设计tkinter!python用户界面设计教程...
- 哪些平台需要申请EDI证?有流程介绍吗?
- 蓝牙定位技术原理--蓝牙人员定位--蓝牙定位--新导智能
- 狂神说Spring笔记(全网最全)
- java第一周_从计算机基础到流程控制语句(if_else)
- 如何开通公众号留言功能?
- 5G时代带动陶瓷PCB成长——GPS陶瓷天线调试方法 (一)
- 基于.NET实现的飞机订票系统
- 改进的人工鱼群算法求解TSP问题的研究(Matlab代码实现)
- Python数据分析和处理
- 如何克隆服务器系统盘,双硬盘轻松克隆MAC OS X系统全攻略
热门文章
- [图像分割综述] Image Segmentation Using Deep Learning: A Survey
- 想请教大家都在哪个网站买书啊?
- HTML5网页设计基础——音乐盒的制作
- 如何用excel批量新建文件夹并命名?
- 404优化网站html,404页面
- CSS伪类(Pseudo-classes)、伪元素、伪类选择器
- 赏析“百度大脑事件图谱:洞察复杂世界中的事件知识”
- 沙尘暴ppt计算机,沙尘暴课件.ppt
- tecplot改变坐标轴范围
- 0基础学习C语言第十一章:文件读写