我们玩单机游戏时,游戏难度可能过大,

或者游戏已经比较熟练,想要增加游戏的玩法,这时候可以使用修改器。

内存式游戏修改器主要对游戏内存修改

修改时有两种方式,一是定时对内存数值进行修改。实现类似锁定的效果。

这样方案需要程序时刻运行。一旦关闭游戏中的数值,例如生命值等就会产生变动。

需要注意的是,修改网络游戏和有反作弊机制的游戏,除了使游戏臃肿,没有别的好处。且有数据失去同步的风险。

第二种方案则是对程序的代码进行修改。例如将

子弹数减1修改为子弹数加1,一旦进行射击操作,子弹就会增加。

由于程序代码可能是动态加载。当你进行射击时代码才会加载入内存。想要修改代码,就必须找到代码的位置。

代码位置会变化但是代码是不变的,我们只要搜索一段独一无二的代码,就可以找到位置。

我们把这段代码叫做特征码。搜索特征码时如果代码加载时偏移量大于特征码,直接暴力搜索即可。

如果代码加载时偏移量小于特征码,可以使用kmp算法,或者bm算法搜索。

搜索时注意,内存读取函数运行较慢,但是读取数据量大小对运行速度影响小。我们可以将大量数据读取入缓存中。

这样可以减少内存读取函数的调用次数,当使用40kb缓存时,仅读取1000次左右就可以完成搜索,时间为400ms。

除了用缓存来加速外,我们也可以缩小内存搜索范围,通过多次重开游戏,发现内存位置是

0XXXXXX1到4XXXXXX1之间。这时候只需要搜索中间的6x4=24位空间即可。

枪,血,意大利黑手党2为例。代码已在GitHub开源。

代码对内存操作进行了简单的封装。使用40kb缓存加快搜索,详见代码。

要理解代码,需要先熟悉汇编,C++。以及Windows内存的知识。

代码并未实现kmp和bm,如有需要可以到B站参考小甲鱼的算法课程(其实是老甲鱼啦!  \滑稽)。

C++内存修改器开源代码的更多相关文章

  1. UWP游戏防内存修改器的方法

    最近我一直在编写适用于Windows 10商店的游戏.这款游戏比较怕玩家用修改器改金钱,因为这种修改会导致某些内购失效并且损害公平性.于是我把自己见过的三种反修改器的方法给网友们介绍一下. 首先说明一 ...

  2. Android For JNI(二)——C语言中的数据类型,输出,输入函数以及操作内存地址,内存修改器

    Android For JNI(二)--C语言中的数据类型,输出,输入函数以及操作内存地址,内存修改器 当我们把Hello World写完之后,我们就可以迈入C的大门了,今天就来讲讲基本的一些数据类型 ...

  3. 只需要一点点C++基础,新手也可以制作单机游戏内存修改器

    声明:本文只是为了初学C++的,能够做出一些实用的东西,跳出管理系统的束缚,提升学习的兴趣,在这里选取了单机游戏,请不要尝试在线游戏,违发而已未必可行.序:首先我们需要一个Qt+VS环境Qt从http ...

  4. 防止apk反编译的技术分析浅谈--内存修改器篇

    声明: 1.本帖转载自http://jingyan.baidu.com/article/a24b33cd509eb719fe002b94.html,仅供自用,勿喷 Apk反编译修改器有很多.拿其中的比 ...

  5. ce游戏内存修改器(Cheat Engine)

    ce修改器(Cheat Engine)一款专门修改内存修改编辑的游戏工具它包括16进制编辑,反汇编程序,内存查找工具新版6.1 版的CE与6.0 最大的区别就是添加了修改器制作工具,比之前 5.6.1 ...

  6. 实例游戏内存修改器----CUI版本模拟

    实现说明: 目标进程内存中很可能存在多个你要搜索的值, 所以在进行第一次搜索的时候, 要把搜索到的地址记录下来,然后让用户改变要搜索的值,再在记录的地址中搜索,直到搜索到的地址惟一为止.为此写两个辅助 ...

  7. C/C++内存管理器

    C标准库提供了malloc,free,calloc,realloc,C++标准库还提供了new, new[], delete, delete[].这些用来管理内存,看起来够用了,为啥还要自己写一个内存 ...

  8. Blender 之修改器代码分析

                           Blender的修改器(modifier)模块,默认界面右下块(Property)面板的扳手,分类(修改.生成.形变.模拟)列出所有的修改器.也可以空格键 ...

  9. M-Renamer方法名修改器,iOS项目方法名重构,Objective-C/Swift,代码模型预判,减少误改的机率,替换速度更快,可视化操作,傻瓜式操作,一键操作,引用处自动修改,马甲包的福音

    M-Renamer M-Renamer(Method-Name-Renamer)类方法名修改器,采用链式解析头文件,代码模型预判,减少误改的机率,替换速度更快:可以解析整个项目大多数类的方法,可视化操 ...

随机推荐

  1. Codeforces - 1194C - From S To T - 子序列 - 排序

    https://codeforces.com/contest/1194/problem/C 好像没什么好说的,要能构造s必须是t的子序列,并且相差的字符集合d是p的子集. 用双指针法求两遍子序列就可以 ...

  2. AJAX 获取Servlet文件路径

    下面均不行: xmlRes.open("get","edu/hust/ajax/TestServlet",true); xmlRes.open("ge ...

  3. ansiable介绍及安装

    ansible介绍: Ansible默认通过 SSH 协议管理机器. ssh协议介绍:https://www.cnblogs.com/yaozhiqiang/p/9944894.html 安装ansi ...

  4. js字符串相关方法

    <script> // 使用索引位置来访问字符串中的每个字符: var carname = 'Volvo XC60'; var character = carname[7]; consol ...

  5. 记录使用node启用微信公众平台服务器配置

    在微信公众平台的基本信息里面的,修改服务器配置后会有下面的界面. EncodingAESKey是随机生成的,加密方式根据需要自己选择. 关于URL和Token: URL:填写之后会向这个URL发送一个 ...

  6. 使用 Struts2 校验器校验用户注册信息的例子

    转自:https://blog.csdn.net/jin2005006/article/details/53999562 基于验证框架的输入校验 一.创建一个struts2项目testValidato ...

  7. Android线程间通信的几种实现方式

    1. 通过Handler机制: private void one() { handler=new Handler(){ @Override public void handleMessage(Mess ...

  8. ASE Alpha Sprint - backend scrum 10

    本次scrum于2019.11.15在sky garden进行,持续30分钟 参与人: Xin Kang, Zhikai Chen, Jia Ning, Hao Wang 请假: Lihao Ran, ...

  9. 源码分析--HashMap(JDK1.8)

    在JDK1.8中对HashMap的底层实现做了修改.本篇对HashMap源码从核心成员变量到常用方法进行分析. HashMap数据结构如下: 先看成员变量: 1.底层存放数据的是Node<K,V ...

  10. python浮点数与整数间的转化

    舍弃小数部分 >>> math.trunc(12.533222) 12 >>> round(12.2544) 12 按给定小数位数四舍五入 >>> ...