目录

1.查找“雷数”和旗子的内存地址

2.查找“笑脸”的内存地址

3.查找“计时器”的内存地址

4.查找“初级”、“中级”和“高级”的棋盘内存地址范围


首先,用CE打开扫雷软件。(本次使用的版本为CE6.7)

1.查找“雷数”和旗子的内存地址

首先,将游戏难度设置为“初级”。

 可见此时雷数为“10”,使用CE扫描类型“精确数值”输入10,进行“首次扫描”。

 可以看到查出的地址很多,不利于我们找出需要的地址。

所以我们需要再将游戏难度设为“中级”,此时可见雷的数量变为了“40”。

我们输入40,点击“再次扫描”:

可见地址数量大大减少,然后我们再将游戏难度设置为“高级”,此时雷数为“99”,我们查找99,进行再次扫描 

 这时,我们发现仍然有三个地址,这是因为在游戏(以高级难度为例)中,旗子的数量和雷的数量都是99,所以这三个地址中一定有一个是旗子的地址。

在“扫雷”游戏中,点击右键可以插旗子,每插一个旗子的数量会-1,

 由此可见:我们在插了一个旗子后,“扫雷.exe+5194”地址的当前值变为了98,可以得出结论:“旗子”的地址值为“扫雷.exe+5194”我们双击这个地址并记录。

剩下两个地址其中一个表示雷的地址,我们可以依次修改地址的数值为1,再刷新游戏,找出我们需要的雷的地址。

我们在修改01005330的值为1时,刷新游戏雷数无变化;

我们在修改010056A4的值为1时,刷新游戏雷数为1;

由此得出:雷的地址为“扫雷.exe+56A4”

2.查找“笑脸”的内存地址

“笑脸” 是一个抽象的数据,我们在查找时,就要考虑使用“未知的初始值”进行查找

首先我们要知道,扫雷游戏中“笑脸”的状态共有三种:分别是“笑脸”、点到雷时的“哭脸”和赢得游戏时的“墨镜耍酷🕶脸”

(接上文)CE点击“新的扫描”,扫描类型选择“未知的初始值”,点击“首次扫描”

 

 共有上百万种结果,不要着急,我们可以通过点击笑脸刷新,此时还是笑脸,我们就可以在扫描类型里选择“未变动的数值”,点击“再次扫描”。此步骤可以重复几次进行筛选。

 当我们点到雷时,我们的“笑脸”会变为“哭脸”,我们就可以在CE中扫描类型里选择“变动的数值”,点击“再次扫描”。

过关时,“笑脸”会变为“耍酷脸”。

以上两步可以重复多次,筛选出更少的地址。(“笑脸”变“笑脸”时,选择“未变动的数值”-->“再次扫描,当新的表情与上一次表情不同时,选择“变动的数值”-->“再次扫描”)

闭店撒
不断扫描,地址越来越少

最后只剩下两个地址(即使更多也不要紧,我们要找的是绿色的地址(基址)),我们已知“笑脸”共有三种状态,再次操作扫雷,可以发现:当表情为“笑脸”时,“扫雷.exe+5160”地址对应的当前值为0,“哭脸”时为2,“🕶”时为3。综上所述,“笑脸”的内存地址为“扫雷.exe+5160”。(另一个地址验证后会发现,笑脸为1,哭脸和🕶均为16,故排除)

3.查找“计时器”的内存地址

“计时器”的内存地址查找方法较为简单,观察可知,我们在点击任一格开始游戏后(除雷外),右边的计时器便会逐秒增加,所以我们可以使用“增加的数值”进行查找。

为了方便查找,这里先设置为“初级”难度。游戏开始前,计时器为0,故我们CE“新的扫描”-->输入0-->“首次扫描”-->扫描类型选择“增加的数值”,此时一切就绪,点击棋盘使计时器开始计时,然后我们只需在计时器每秒增加数值时,点击“再次扫描”即可。

 很快我们就找到了仅存的一个地址,通过比较发现游戏的计时器的值和该地址的当前值相等也可验证此地址就是我们要找的计时器的地址。

把“计时器”地址记录下来​​​​​

4.查找“初级”、“中级”和“高级”的棋盘内存地址范围

要查找棋盘内存地址范围,需要我们浏览相关内存地址,通过点击棋盘查找,但是我们如何找到相近的位置呢?

首先我们需要找到首地址(1,1)。已知扫雷在点击棋盘时,有空白、数字和雷三种情况,我们可以扫描类型选择“未知的初始值”进行扫描,然后重新开始游戏后(点击笑脸即可重置游戏)第一格的数值与之前的进行比较,观察变化与否采用变动的数值/未变动的数值进行扫描

注:此方法需要取消“快速扫描”勾选

扫描类型 选择 “未知的初始值”,点击初级棋盘上第一格,进行“首次扫描”

如图,我们记住这次第一格的数值为1。

重新开始游戏,点击第一格

 由图可知,此次第一格显示为空,与上一次不同,因此我们扫描类型选择“变动的数值”-->“再次扫描”

重置棋盘,点击第一格,又是空白,故扫描类型选择“未变动的数值”-->“再次扫描”...
重复进行以上操作,直到出现基址,我们把这个地址保存下来,右键点击该地址,选择“浏览相关内存区域”

打开内存区域后,我们点住棋盘左上角第一格的时候,可以看到内存区域里有一个地址变红了,即可以推知,该地址对应的即为扫雷初级棋盘的第一格,如图:

 可以得知初级棋盘第一格对应地址为:01005361

当我们点住棋盘最后一格的时候:

 可以得知初级棋盘第一格对应地址为:01005469

由此可以得出结论:“初级”棋盘的内存地址范围为: 01005361-01005469

按照同样方法,可以求出“中级”棋盘和“高级”棋盘的内存地址范围,这里不在赘述。(注:查找“中级”和“高级”棋盘内存地址范围时,在浏览内存时,第一格与最后一格跨度很大,需要拖动滚轮查找

 如下图(“高级”棋盘第一格和最后一格地址相差甚远):

综上,
“初级”棋盘内存地址范围:01005361 ~ 01005469
“中级”棋盘内存地址范围:01005361 ~ 01005550
“高级”棋盘内存地址范围:01005361 ~0100555E

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐