Win32汇编学习笔记11.游戏辅助的实现-C/C++基础-断点社区-专业的老牌游戏安全技术交流社区 - BpSend.net
游戏基址
游戏基址的概念
- 游戏基址是保持恒定的两部分内存地址的一部分并提供一个基准点,从这里可以计算一个字节数据的位置。基址伴随着一个加到基上的偏移值来确定信息准确的位置(绝对地址)。
- 根据结构体成员特性:向下找偏移,向上推地址。
全局基址 一级基址 二级基址 三级基址的关系
- 第一步:计算机内存一般分为四级存储。
- 第二步:在最底下的,往往是游戏的全局基址(决定用户界面以及一些细节等)和一些响应用户操作而对应实施的命令。
- 第三步:该是传递基址了。现在网游的基址往往是动态的。这个是因为底层的基址不会直接传递给上一级内存。它会加上一个偏移量,然后再传递。这个传递就是指针了。
- 第四步:当传递到第四层的时候,就会表现在游戏的用户界面。
- "----->"表示"指针指向":
-
- 基址(存放的内容是一级基址起始地址)----->一级基址(存放的内容是二级基址的起始地址:假定为a);
- [一级基址(a) + 偏移量]----->二级基址(存放的内容是三级基址的起始地址:假定为b);
- [二级基址(b)+偏移量]----->三级基址;
- 三级基址-------->游戏界面。
- 自己制作游戏修改器必须要找到一级基址。
- 注意:对于单机游戏 ,游戏基址是不变的。对网络游戏, 更新时可能会变。(因此才会有游戏更新后,某外挂不可以使用。其本质可能是基址改变的。)
- 问题:基址无非就是一块内存,同时基址又不可以改变,如果计算机中该块内存被占用了,然后再安装基址为0x006A9EC0的游戏,此时会不会写入失败,造成无法安装呢?
- 解析:不会,基址0x006A9EC0是虚拟内存,会经过页面地址重地位,将虚拟地址转换成本机的物理地址,即不存在地址冲突问题。即使十个游戏的基址都是0x006A9EC0都不会存在冲突问题。
CE用法
第一关:下载并安装CE
一、先下载CE ,打开CE目录下的2个文件:
三、附加进程(图示):
操作到此就结束了。这个教程就是如此简单,下一关同样如此。
第二关:精确扫描
紧接着,我们继续第二关,第二关的作用还是很简单的,主要目的是遍历出我们想要的动态数据,比如角色的生命,人物的魔法,某火线上飞刀的搜索等,都会用到精确扫面,可以说这一关是既简单又实用的东西
教程第二关,需要扫描的精确数值是100
现在开始搜索精确数值 100 数值中输入 100 点击 首次扫描 按钮
一般游戏就是4字节,这里不需要改动,默认就好。
这次扫描我们得到 59 个结果,里面肯定有我们要找的那个血值,不过好像太多了。
关键一步:回到 Tutorial 点击 打我 按钮,此时血值已有变化了:
我们再输入 96 点击 再次扫描 按钮 结果只剩1个(这就是我们要找的),我们双击此地址将其添加到地址栏:
只有1个结果了,这个就是我们要找的内存地址,双击将其加入到地址栏
图示操作:
把 95 改成 1000 点击 确定 按钮
此时教程的 下一步 按钮变成可用
闯关成功。
第三关:未知数值扫描
第三关,主要用来搜索进度条,任务血条等,我们无法直接看到的数据,我们通过变更的数据一步步找到动态地址
第3关的密码是 419482
这一关很重要,因为某些游戏中血显示的不是数字而是血条,这样的话教程2中的方法就失效了。
本关就你要教会你如何修改这些讨厌的未知数
此时点击 新扫描 然后选择 未知初始数值
点击 首次扫描 然后出现了肯定是N多的结果,因为太多了,CE没有显示出来。
老办法,回到 Tutorial ,点击打我 ,CE会告诉你血量减了多少,比如-1
这里面我们换个思路,假设CE没告诉我减少了多少或者我根本没看清,这时应该怎么办呢?注意看下面的操作
一、扫描减少的数值
下拉框,选择减少了的数值,按再次扫描(此时血量减少了)
二、扫描不变的数值
然后选择 没变动的数值(此时血量没有变化)
三、反复操作
再回到Tutorial ,点击 打我 => 扫描减少了的数值 => 扫描没变动的数值 反复操作,最后就会只剩14个地址
四、简单判断
简单判断下(Tutorial中告诉你了这个数值是小于500的),很容易就找到了最终的地址。
双击把地址加到地址栏,然后更改数值为5000,就可以过关了(前面教程有说过,这里就不再重复了)闯关成功。
大家一定要明白这样操作的思路:
血量减少=>CE搜索减少的数值
血量不变=>CE搜索不变的数值
血量增加=>CE搜索增加的数值
这样反复筛减&