日期:2014-05-17  浏览次数:20821 次

内存扫描 ,金山游侠游戏修改
  相信玩过RPG游戏的不少玩家都知道或者至少听说过金山游侠吧,其中的游戏修改功能很实用的.至少对于专注于剧情的玩家来说,战斗系统是次要的.
  其游戏修改的基本原理是内存扫描,根据相应数据的变化来定位存储战斗力,生命值,金钱等内存地址.然后利用诸如WriteProcessMemory只类的API进行修改就OK了.
  但它有一个很大的缺陷就是,每次扫描出的结果太多,很难手工定位.对于没有一定程度计算机知识的玩家来说就更加困难.
  
  举例:修改生命值
  假设当前的生命值是500,在金山修改器中输入500,然后可能会得到很多结果,有双字节的,也有四字节的.对于一般游戏来说两个字节就够用了吧,所以首先排除"四个字节"这一可能.这时需要记录两个字节,值为500的内存地址.然后让角色使用药水恢复生命值,或经过一次战斗降低生命值.这里选择使用药水,这时假设生命值上升为600.然后在内存搜索栏中输入600.如果本次搜索结果中某一个地址与上次的记录中的地址相同,说明搜索成功.接下来要做的就简单了.
  但是当搜索出的结果太多,比如上千时, 根本就无法比较,因为金山修改器中没有提供相应功能.如果程序能自动进行两次结果的比较,那就更加便利了.
  我也想自己实现这个功能,于是便看了看<<windows核心编程(第四版)>>,书中有一个章节详细介绍了WINDOWS内存结构,及内存操作API.看了这一个章节,大致就可以开始着手编写程序了.实现程序自动比较两次扫描结果的功能当然很简单了.但还有一个问题需要解决.
  WINDOWS用户模式大约有2G可用内存,里面的代码区根本没必要去扫描一遍吧,我认为只要扫描一下线程堆栈就OK了,但关键是不知如何识别线程堆栈.虽然<<WINDOWS核心编程>>书中也有讲解,但不是太详细.
  ... ...
  继续学习
  
------解决方案--------------------
帮顶给分么?
------解决方案--------------------
引用:
WINDOWS用户模式大约有2G可用内存,里面的代码区根本没必要去扫描一遍吧,我认为只要扫描一下线程堆栈就OK了,但关键是不知如何识别线程堆栈. 虽然<<WINDOWS核心编程>>书中也有讲解,但不是太详细.


大错特错!
------解决方案--------------------
 O(∩_∩)O,先无论对错与否,我现在需要实现的是堆栈识别功能。
 “只扫描线程堆栈就可以解决问题”,这个想法确实太过牵强。正确的说应该是扫描所有的“用户模式”区域的非“代码”段。
------解决方案--------------------
呵呵,恩。我看过一个黑基的动画,讲解如何给红警加钱。


不过,现在的游戏,都对内存控制很严格。
------解决方案--------------------
是啊 我也有疑问哦 其实金山游侠我是常用的  虽然麻烦 但是最安全@!@呵呵
------解决方案--------------------
关注  版主 能写出一个内存扫描工具  。。。。
最好能把实现的代码贴出 并进行一下讲解。。!!!!!
------解决方案--------------------
null