下载
https://github.com/eastmountyxz/Reverse-Engineering-01-Saolei
1,分析“初级”、“中级”和“高级”的棋盘内存地址范围
思路:要找到棋盘内存地址,则需要找到第一格和最后一格的地址,即知道该棋盘,在内存上的地址。对于这两个格子没有精确的数值描述,但我们可以用是否有雷去分析,不断点击第一格格子,根据是否有数值变动就可以找到基质。
初级:先点击最后一格格子,进行未知初始值扫描,然后不断重开游戏,观察值是否变动去扫描,最后得到该格子的基址。
步骤:
1.先扫描未知的初始值(记得取消快速扫描)
2.开始不断重开游戏,每次去点击第一格的地址,观察是否有变化(有空白,雷,数字三种形态),根据变动的值/未变动的值去不断扫描,直到找见该内存地址。
第一次为空白,扫描未知的初始值
第二次依旧为空白,扫描未变动的初始值
第三次为数字,扫描变动的数值
以此类推,最后找到地址
中级与高级步骤与此相同不再演示。
初级棋盘 0100535E ~ 01005469
中级棋盘 0100535E ~ 01005550
高级棋盘 0100535E ~0100555E
2,找出“雷数”、“笑脸”和“计时器”的内存地址
雷数
思路:
在自定义中可以去修改雷数,可以去直接搜索雷数,然后不断修改雷数然后搜索。
步骤:
不断去修改并且搜素雷数,最后得到三个地址
接着,通过右键插旗帜,减少雷数,看看对应哪个内存的值变动
笑脸:
思路:
笑脸有不同的状态,刚开始时候为笑脸,点击时候为惊叹的表情
炸到后胜利后通过笑脸表情的变化不断扫描。
步骤:
1.笑脸时候,扫描未知值
2.哭脸时候,扫描变动的值
3.再次点击恢复笑脸后,再扫描变化的值
小技巧:可以将难度调到最低,通过不断切换胜利和笑脸的表情去搜索(也可调到最高,通过不断切换失败和笑脸的表情去搜索)
通过编写程序的经验,对于这类只有三四个选项的变量时,往往会编写一个变量,每个值代表一个选项,而且根据经验而谈,这类flag值一般都设为个位数,即0,1,2,3…
最后找到笑脸地址
计时器:
思路:
计时器是一个不断增加的数字,当游戏结束时候会停止增加,可以由此去扫描变化的值/增加的数值
步骤:
1.首先扫描未知的初始值
2.随着计时器的增加不断扫描增加的数值
3,分析地雷存放的算法
将雷数修改到最高,发现无论几次都不会第一次就点到雷,所以说地雷的生成是在点击第一次以后,再调用函数生成。随机生成坐标中的几个点,将里面安放雷,每次点击时候,计算该点周围八个格子的雷数并相加后返回。