针对“扫雷”游戏,完成详细逆向复现报告
针对“扫雷”游戏,完成详细逆向复现报告
2.1 分析“初级”、“中级”和“高级”的棋盘内存地址范围 3
四、利用思维导图分析“扫雷”游戏软件的工作原理(设计原理) 11
游戏名称:扫雷。
(1)旗子数:左上角显示的数字是为了显示当前剩余的旗子数。
(2)笑脸:笑脸按钮用于重置当前游戏,重置包括。
(3)时间:用于计数时间。
(4)游戏按钮:可调节游戏属性。
CE软件、扫雷游戏
(1)初级棋盘
首先点击棋盘第一格,之后再CE中搜索“未知的初始值”
再重置游戏,再次点击第一格,与第一次进行比对,在CE中搜索变动或者未变动的值
重复多次操作得到上图所示的基地址,就是第一格的地址
之后寻找最后一格的地址,与上述操作相同
所以初级棋盘的地址范围是:01005361—01005469
(2)中级棋盘
同初级棋盘操作
所以中级棋盘的地址范围是:01005361—01005550
(3)高级棋盘
综上(1)(2)得出
高级棋盘的地址范围是:01005361—0100555E
地雷数的改变,需要在初中高三级棋盘之间变化,并且不断扫描精确数值,得到地雷数的内存地址
此时会得到“雷数”的内存地址:010056A4
因为笑脸没有准确的数值,所以我们没有办法根据数值进行精确扫描,但是我们可以发现笑脸只有两个状态:一个是游戏进行的时候,一个是还原游戏的时候,所以我们通过o和1进行扫描,游戏进行状态输入1进行扫描,还原游戏之后输入0进行扫描,首先是游戏进行状态,输入1进行扫描
再点击笑脸,将游戏还原,输入0开始扫描
如此反复进行扫描
此时得到“笑脸”的内存地址为:01005164
计数器的时间也是一个具体的值,所以我们也可以通过精确数值扫描出来,游戏开始之前计数器上的数是0,所以我们扫描0。
因为第一次扫描的结果太多,选择介于什么数值之间再次扫描。
此时得到“时间”的内存地址为:0100579C
(1)运用了数据结构,在存放雷区信息时用到二维数组。算法上随机函数随机布雷扫雷游戏要求在M 行、N 列的一块网格游戏区内随机地布上MineNum 个雷,且MineNum 的取值应该小于M 和N 的乘积。这可以在一张M×N 的网格上通过满足均匀分布的随机算法实现。其中有MineNum 个网格是雷区,剩下的网格为非雷区。游戏的目标是尽可能快地找到所有的雷区,而不踩到地雷。
(2)JAVA 提供了实现随机算法的类Math,通过Math 类的random () 方法,这样可以很方便地实现随机布雷功能,实现随机布雷。
(3)该算法:for (int x = i - 1; x < i + 2; x++) { for (int y = j - 1; y < j + 2; y++) { if ( ( (x != i) || (y != j)) && (x >= 0) && (y >= 0)………………….. }这样可以对这九个格子进行遍历(i-1, j-1)(i-1, j)(i-1, j+1)(I, j-1)(i,j)(I, j+1)(i+1, j-1)(i+1, j)(i+1, j+1)。
(4)运用递归算法,可以对翻开格子的上下左右进行检查,点击一个位置,如果是0,也即是无雷,那么就翻开他的上下左右8个格子,然后对这八个格子进行检查,如果当中某个格子也是0,那么继续,如此反复。