• C++内存修改器开源代码


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • 相关阅读:
    【JS教程08】数组及操作方法
    【JS教程07】事件属性及匿名函数
    【JS教程06】操作元素
    【JS教程05】获取元素的方法
    【JS教程04】条件语句
    多线程环境下非安全Dictionary引起的“已添加了具有相同键的项”问题
    GPT分区基础知识及如何在GPT分区上安装WIN7
    Jenkins TFS配置
    windows查看端口占用命令
    VS2015企业版序列号
  • 原文地址:https://www.cnblogs.com/pojdd/p/11388643.html
Copyright © 2020-2023  润新知