-
-
[下载][原创]小白也能逆向分析扫雷游戏
-
发表于:
2020-10-7 08:29
18855
-
应用程序名称:winmine.exe(扫雷)
说明:一款基础的扫雷游戏
系统环境:Win7 32位
工具:
OllyDbg(动态调试代码)
Cheat Engine(搜索数据)
Spy++(寻找窗口回调函数)
PEID/exeinfo(查壳,查编译环境)
Visual Studio2019(开发程序)
MFCInject(注入工具)
1)标注某处是否有雷
2)一键通关
首先将游戏拖拽到PEID上会发现是由C++编写的程序
当我们打开游戏时是一个窗口,而不是一个黑框框,猜测是SDK或MFC编写的
猜测是SDK编写的,这是由于
1)点击子系统箭头,点击导入表箭头,会发现列表中有msvrt.dll,这是微软的运行时库,故多半是SDK编写
2)列表中没有MFC特有的库
3)查看该游戏大小只有100kb,若是MFC静态编译则会有1M左右
若游戏是由SDK编写的,这意味着会有一些相关的函数可供我们查找与调用
如
CreateWindowExW/CreateWindowExA(创建窗口)
GetWindowTextA/GetWindowTextW(将指定窗口的标题拷贝到一个缓冲区内)
SetWindowTextA/SetWindowTextW(改变控件的文本内容,窗口也是一个控件)
rand(产生随机数函数)
1)动态调试,即从API函数入手
由于是由SDK编写的代码,那么必定含有windows的api函数,那么就可以用OllyDbg进行调试,来探究这款游戏内部的逻辑,得到更多的信息
2)数据分析,即从变化的数据入手
由于扫雷是一款游戏,必定有一些数据来代表着游戏的内容,诸如雷的数量,时间等信息。像雷的分布,可能会有一个数组来标注,那么我们可以通过获取数组的地址,来得到雷的分布数据。对于以上这些信息,通过Cheat Engine不仅可以获得,还可以进行修改,通过修改,可以验证我们的一些猜想。
通过观察,左上角有自定义游戏选项,可自定义高度,宽度,雷的数量,右上角的时间计时与左上角的已判断雷数计数
其中游戏通关与否与时间和待判定雷数无关,高度,宽度可用于表示坐标,雷数是用于判断的重要指标并与多项游戏机制相关,所以主要寻找高度,宽度,雷的数量这三项数据即可
Cheat Engine添加扫雷进程
通过自定义选项改变游戏的高,宽,雷数,不断搜索这些数值,筛选到最后,剩下绿色标记的就是基地址(不会因为重新打开游戏而变化的地址),最终得到6条地址信息
通过更改地址,得到访问数据的地址信息
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
最后于 2020-11-27 09:52
被哦哈哈哈哈编辑
,原因: