免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!
内容参考于:易道云信息技术研究院
上一个内容:98.游戏的启动与多开-分析与实现多开器
下图中红框位置显示的数据,只有下图红框位置显示了那么在内存中一定是存在的,存在中存在就一定可以找得到,找到就可以显示,找的方式剑侠情缘找的方式是很简单的只需要在 Cheat Engine 中输入数字就可以得到
字节对应char,2字节对应short,4字节对应int,8字节对应long long,4字节和8字节原则上来讲它包含了float和double,如果使用精确的值搜索float和double类型使用4字节个8字节是搜不出来的只能模糊搜索,字节数组是一个一个的数据以空格分开
字符串默认是char类型的数组,如果把UTF-16勾选上那么就是w_char类型
搜索游戏中数据是类型的选择,比如说要找它的生命,先看它的范围,它的范围是1562,然后再看936这个数据分析它用char类型够不够如果不够再分析它用short类型够不够如果不够就用int、longlong,很显然936这个数据用short类型可以存下,虽然可以用short找936并不代表游戏中就是使用的short类型存储的,但是只要数据满足short类型那么数据是一定可以找到的,即使当时是用int存储的也一定是可以找到的
可以找到原因是比如有一个数据是1000,1000是可以用short类型存放的,但实际上游戏中是用的int类型存放的
然后1000再内存中的样子是 e8 03 00 00,由于1000使用int类型4字节的方式存放所以是e8 03 00 00, 然后1000这个数字实际上内存占用的情况只需要e8 03就可以表达了,00 00现在是没用的,所以使用short类型搜索内存时是可以把1000给搜到的,然后在不知道数据是以什么类型存放的时候找数据要采用这种最小存放单位来找,使用int类型找时不一定会找得到,但是使用short类型是一定可以找到的,只要找2字节然后再确认它后面是不是0再判断它是不是int类型或者longlong类型
下图使用2字节就找到了血量的内存地址
然后确认类型,把找到的血量改成以4字节显示看看数据变不变如果不变那它可能是4字节
然后改成8字节数据变了,然后这样就可以确定血量这个数据一定是4字节的也就是当时写游戏时是 int hp;这样声明的
现在计算机发展的比较好内存资源不是很紧俏所以一般都会是4字节。
然后有时候搜索数据时会找到多个一模一样的数据,如下游戏它的血量就搜索出了三个
然后吃了一个药三个值也都变满了
它的数据也时4字节
然后一个游戏只有一个血量不可能会有三个血量,但是现在就找到了三个这时就涉及到一个区分真伪的操作,但是这三个都是真的,因为它能够根据血量的变化而变化,但是它们都不是真正原始的数据,使用 Cheat Engine 改它们的数据会立马变回原来的值(236),这个游戏叫火炬之光它不是一个网络游戏只是一个单机游戏,这个时候修改不了数据并不是加密了而是它有一段代码会不停的给这三个内存地址重新赋值,我们找到的并不是它真正的的血量,游戏中有人物信息或者其它位置有用到血量,这三个值很可能就那些地方的,而真正的血量现在可以得出它并不是int类型,它时float类型
所以当一个单机游戏搜索到多个等同的值这并不是加密而是一个正常的行为,出现多个等同的值可以理解位游戏中有个界面有用到血量这个值这些等同的值就是那些界面中用的。
然后一个网络游戏,它的坐标是6460然后6460也可以用short类型存放然后它可以搜到一堆
然后坐标更改之后点再次扫描什么数据都找不到了
然后使用浮点型再找一次,也可以找到
然后更改坐标,不用点再次扫描都可以看出没找到坐标,刚刚找火炬之光没有找到是因为数据类型不对使用浮点型之后是可以正常找的,而下图中的游戏short与float都用的也没找到这种情况是因为它加密了当内存找不到的时候有两种情况第一种数据类型错误,第二种数据加密,如果找到两个说明用的数据副本,加密的数据如何找后面会写