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

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

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

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

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

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

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

子弹数减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. jmeter 添加header

    接口说明文档: article.fetch(通用转码服务) 通用转码服务,获取任意 url 的正文以及 title 等基本信息,仅支持 post 方法请求. 参数 参数 类型 是否必须 示例 其它说明 ...

  2. 阿里云ECS服务安装 nginx+php+MariaDB完整版

    安装 Nginx想在 CentOS 系统上安装 Nginx ,你得先去添加一个资源库,像这样: vim /etc/yum.repos.d/nginx.repo使用 vim 命令去打开 /etc/yum ...

  3. E Easy problem

    链接:https://ac.nowcoder.com/acm/contest/338/E来源:牛客网 Zghh likes number, but he doesn't like writing pr ...

  4. 自己做的html5手机站点

    这个站点採用html5+css3+jquerymobile 仅仅开发了前台的功能,前台的界面比較美观,后端不方便放上,各位有空能够自己开发这个站点的界面有參考各个菜谱站点的页面的样式,可是又不一样,是 ...

  5. crack Tut.ReverseMe1.exe

    测试文件:https://www.wocloud.com.cn/webclient/share/sindex.action?id=i9K_Br6TgE7ZLB3oBGUcJmKcRy5TUdZ8U6_ ...

  6. vue,一路走来(6)--微信支付

    微信支付 https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_7&index=6 分享一下vue实现微信支付.在微信浏览器里面 ...

  7. (ACM模板)映射map

    #include<iostream> #include<cstdio> #include<map> using namespace std; int main() ...

  8. Sass函数:Opacity函数-opacify()、fade-in()函数

    这两个函数是用来对已有颜色的透明度做一个加法运算,会让颜色更加不透明.其接受两个参数,第一个参数是原始颜色,第二个参数是你需要增加的透明度值,其取值范围主要是在 0~1 之间.当透明度值增加到大于 1 ...

  9. Python函数中*args和**kwargs来传递变长参数的用法

    参考自: http://www.jb51.net/article/78705.htm 单星号形式(*args)用来传递非命名键可变参数列表.双星号形式(**kwargs)用来传递键值可变参数列表. 1 ...

  10. 4412 搭建tftp服务器

    搭建服务器 --安装xinetd,sudo apt-get install xinetd --安装tftp和tftpd,sudo apt-get install tftp tftpd --配置/etc ...