扫雷——CE逆向分析

发布于:2022-11-14 ⋅ 阅读:(1207) ⋅ 点赞:(1)

目录

前言

一、棋盘内存地址范围

1.1 初级棋盘内存地址

1.2 中、高级棋盘内存地址

二、雷数、笑脸、计时器的内存地址

2.1 雷数的内存地址 

2.2 笑脸的内存地址

2.3 计时器的内存地址

总结


前言


  扫雷这个游戏大家应该都听说过,我们每个人的电脑里都会有,相信很多人应该都玩过这个游戏,排雷是一个非常有趣的过程,但也是一个相对繁琐的过程,尤其是中级棋盘和高级棋盘,那么这篇文章我们就尝试利用CE来找出棋盘、雷数、笑脸以及计时器的内存地址。


一、棋盘内存地址范围

        首先,我们打开ce(如图1),同时打开扫雷,之后在ce进程中添加扫雷进程(如图2)

图1
图1
图2

 

1.1 初级棋盘内存地址

        第一步   在ce界面的右侧,单击取消“快速扫描”,扫描类型改为“未知的初始值”,之后点击棋盘的第一个格子,然后进行首次扫描,可以看到结果的数量非常巨大,所以我们接着进行下一步。

图4

         第二步 点击笑脸刷新棋盘,再次点击棋盘的第一个格子,如果数值与上一次相同的话,则扫描类型选择“未变动的数值”,如果不相同则扫描类型选择“变动的数值”。

图3
图4

 如图3所示,数值与上一次扫描结果不同,则选择“变动的数值”再次扫描(如图4)、

        第三步 重复第二步,直到找到唯一的绿色基址(如图5)

图5

        第四步 双击绿色的基址记录,将其添加到下方(图6),右键选择“浏览相关内存区域”,内容如图7所示

图6
图7

 刷新棋盘,再点击棋盘第一个格子,观察下方内存数据的变化,可以看出第一个格子的地址为01005361。

图8
图9

 找最后一个格子基址的步骤与上述找第一格子的方法相同,最终得到最后一个格子的基址为010057A4。

        综上可得,初级棋盘地址范围为01005361~010057A4。

1.2 中、高级棋盘内存地址

        在扫雷中将模式调为中级或高级。中级、高级棋盘内存地址的寻找方法同初级相同,即首先进行未知初始值扫描,然后判断前后两次扫描结果是否相同,之后根据上述的第二步继续扫描,直到找到绿色基址。第一格与最后一格的基址全部找到后,内存范围也就出来了。

图10
中级第一格基址
中级最后一格基址

 中级棋盘地址范围为01005368~01005556。高级棋盘的寻址方法也是一样,这里我就不多做阐述了。

二、雷数、笑脸、计时器的内存地址

2.1 雷数的内存地址 

        第一步 找棋子的地址,我这里以中级棋盘为例。过程如下,如图11所示,首先查看扫雷程序的左上角,雷的个数一共是40个,然后在ce的右侧选择“精确数值”扫描类型,并输入40,点击“首次扫描”。

图11
图12

之后在任意一个格子放置旗子,雷的数量变为39,我们将精确扫描的数值改为39进行“再次扫描”,然后就可以找出旗子的基址了,如图12所示,旗子的基址为01005194

         第二步 扫描雷的内存地址。之所以要先找旗子的基址,是因为旗子和雷的初始数据是一样的。在这一步骤中,我们首先将扫雷的模式改为初级(如图13),第一次扫初级棋盘的数量为10,然后转换到中级棋盘,再次输入旗子数量40,得到三个地址,如图14所示。

图13
图14

 可以看到,这三个地址中,有一个地址和旗子的地址是一样的,所以排除这个地址。剩余的俩个地址中,我们通过修改它们的数值,观察棋盘的变化来判断雷真正的地址。如图15所示,我将01005330地址的数值修改成了1,棋盘没有发生变化,那么基本就可以确定雷的地址为010056A4了,接下来我们修改010056A4的数值来确定一下我们前面的判断。

图15
图16

 

如图16所示,修改010056A4的数值为1后,刷新棋盘,棋盘的雷数也变为了1,点击某一个格子,发现通关了,如下图所示,所以010056A4就是我们最终要找的雷的内存地址。

2.2 笑脸的内存地址

        第一步 选择扫描类型为“未知的初始值”,此时的表情是笑脸,点击首次扫描,结果依旧很多,我们继续下一步。

图17

        第二步 我们通过点击棋盘改变表情。若表情变化了,则扫描类型修改为“变动的数值”;若未发生变化,则扫描类型选择“未变动的数值”。然后点击“再次扫描”,反复进行扫描,最终得到两个地址,如图18所示。

图18

        第三步  如图18所示,观察棋盘,由于我踩了雷,所以此时的表情为“难过”,看到第二个地址的数值为2。我们再点击棋盘改变表情,观察上面的两个地址的数值变化,发现当表情变成“微笑”时,下面的地址数值为0;当表情变成“惊讶”时,数值为1;成功时,表情变成“骄傲”,此时数值为3,最终可以确定表情的内存地址为01005160.

2.3 计时器的内存地址

        输入游戏时间“0”,选择扫描类型“精确数值”,开始游戏后游戏时间就会发生变化,则扫描类型选择“变动的数值”,点击“再次扫描”,扫描后发现数据很多(),没有办法直接找到地址,此时我们就反复扫描,直到出现绿色基址,如下图所示,最终得到计时器的内存地址为0100579C。

        


总结

        通过上面的案例,我们可以看出在使用ce去寻找基址的时候,要找到它和别人不同的点或者严格的来说是特征,这是我们可以迅速找到它的内存地址的关键点,快速准确找到内存地址是进行其他逆向分析的前提,所以这也是我们练习的目的,这篇文章就到这里啦!希望可以帮到大家,由于我也是刚刚接触逆向和CE不久,所以肯定会有错误的地方,有不足之处欢迎大家指正。

(文章参考了double_piga的原创文章,仅参考,不存在抄袭!!!)

本文含有隐藏内容,请 开通VIP 后查看