首页
论坛
课程
招聘
[讨论]扫雷游戏的分析以及一键扫雷脚本
2021-12-1 09:30 9746

[讨论]扫雷游戏的分析以及一键扫雷脚本

2021-12-1 09:30
9746

1. 分析一个扫雷游戏

很经典的一个游戏,虽然已经被大家分析的不能再透了,我还是自己动手学习了一下

2.具体分析过程

2.1exeinfoPE获取基本信息

1,打开exeinfo,将程序拖进exeinfo

 

13

 

2,该程序编译器版本为VC7.1

通过cheatEngine搜索关键数据,获得地址

2.2.1 在CE中改变雷的数量,搜索结果

 

12

 

2.2.2在OD中找到地雷数量的地址验证是否正确

 

得到以下结果

 

1005330

 

1005194 插完旗子后的数量(没用)

 

10056A4 雷的数量

 

2.2.3在雷数量这个位置的上方,发现了一堆内存疑似游戏地图

 

11

 

2.2.4向上查看,找到起始位置

 

10

 

2.2.5经测试此处就是棋盘的位置

2.3分析数据结构

2.3.1分析地图构成

 

在od查看地图内存区域,发现第一行都是10,并且每个两行就有10

 

猜测10是地图的边界,用来区分行,并且每段的开头和结尾都是10,

 

所以每一行最多应该是30个格子,在扫雷中自定义棋盘大小为5050

 

得到的大小是3024,所以高度最多24格,猜想正确

 

2.3.2分析地图数据意义

 

在刚初始化的时候,数据只有0F和8F

 

16

 

点击第一个格子,原来的0f变为42,棋盘的数字是2

 

9

 

再次刷新点击,很多格子变成空格,内存变成40

 

8

 

再次刷新点击,第一个格子是1,内存对应为41

 

7

 

重新设置雷的数量,在一个位置插旗,8f变为8e

 

14

 

将插旗的位置变成问号,内存中变成了8d

 

2.3.3验证雷的位置

 

现在第一个位置是雷,但是在我点击第一个位置后,原来的雷消失了,

 

对比前后的数据截图,发现原来第一个位置雷变到了另一个位置

 

6

 

那么,一键扫雷,是不是把内存的8f雷变成8e就可以过关了呢?验证一下!

 

把8f改成8e后,原来是雷的位置就点不动了,不是雷的位置可以点击,所有方块都点完后就会过关。

 

但是改变内存的方式还需要把所有的位置都点击一遍,应该是不如直接根据位置在棋盘上操作的的方式简单。

3.制作扫雷脚本

3.1脚本分析

3.1.1实现思路

地雷提示:在鼠标悬浮在格子上时显示是否有地雷,通过判断格子的坐标和地图的内存数据进行比对,有雷就设置窗口标题是有雷。

 

一键扫雷:按F7键后判断内存内的地雷位置,没有地雷的发送点击消息,有地雷的就跳过,所有的没地雷的位置都点了就过关了

3.2实现步骤

3.2.1通过spy++找到窗口的回调函数地址

5

3.2.2在消息回调函数的位置假定参数,设置鼠标点击消息断点并触发断点,跟随断点找到处理坐标的位置

15

 

SHR算数右移,这里是取高16位

 

MOVZX 指令

 

格式: MOVZX OPD,OPS

 

功能: 将8位或16位的OPS零扩展为16位或32位,在传给OPD.

 

所谓零扩展,就是把新扩展的高位字节填0,这可以保证无符号数扩展后还是原来

 

的无符号数.

 

此处的意思应该为从ebp+14的位置上取16位当作低16位,并把高16位填零,

 

得到的就是lprama的高16位

 

这里的操作是经过计算得到X,Y的对应的棋盘上数组的下标位置。

 

x = (x + 4) >> 4;

 

​ y = (y - 0x27) >> 4;

3.2.3编写dll函数

定义一个地图类,并且构造函数中初始化

 

4

 

一键扫雷:

 

3

 

在消息回调函数中判断按下F7,对比内存中的地雷位置,循环向主窗口发送消息

 

如果不是地雷就模拟点击,是地雷就什么都不做

 

地雷提示:

 

2

 

在鼠标移动时进行坐标计算,判断当前位置是不是地雷,是地雷就把窗口设置为小心地雷,不是就设置为别的。

4.验证脚本

1

到这扫雷的分析就结束了,但是学习的路永无止境


【公告】欢迎大家踊跃尝试高研班11月试题,挑战自己的极限!

最后于 2021-12-1 12:51 被wx_Van_Zovy编辑 ,原因: 上传附件
上传的附件:
收藏
点赞1
打赏
分享
最新回复 (2)
雪    币: 0
活跃值: 活跃值 (44)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
kofcoco 活跃值 2021-12-1 10:46
2
0
学习了,如果可以把源码放出来就更好了
雪    币: 611
活跃值: 活跃值 (496)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
wx_Van_Zovy 活跃值 2021-12-1 12:49
3
0
kofcoco 学习了,如果可以把源码放出来就更好了
源码已经更新到附件了。把dll注入扫雷进程。F7扫雷
游客
登录 | 注册 方可回帖
返回