使用OllyDbg分析扫雷程序
OllyDebug:
OllyDebug,简称OD,一种反汇编软件,动态追踪工具
程序分析
启用OllyDbg软件,打开扫雷程序
右键选择–“Search for–Name(label) in current module”
搜索:BEGINPAINT
设置在每个参考上设置断点
点击按钮“B”进行断点设置界面
双击断点会进入到反汇编窗口BeginPaint,中间CALL的内容就是我们运行的程序。
右键点击“跟随”或者按“Enter”键进入函数
扫雷界面在使用时,界面没有进行闪烁,怀疑使用双缓存技术。即在“Search for–Name(label) in current module”中找到双缓存技术的核心函数BitBlt。
在核心函数BitBlt上每个参考上设置断点
进入到第二个断点Bitblt的位置,此时显示两层循环,符合二维数组的遍历。
每遍历经过“CALL DWORD PTR DS:[<&GDI32.BitBlt>] ”,扫雷格子就会生成一个
在0x01002700位置按下F2取消断点,在函数的起始位置0x010026A7设置断点
代码中,通过XOR对ESI进行清零,再使用INC进行加一处理,然后会对CMP对ESI进行比较,说明ESI是循环变量。接下来“MOV AL,BYTE PTR [EBX+ESI]”表示将EBX和ESI的值相加赋值给AL。
查看寄存器,EBX是基址寄存器,ESI是它的偏移量
选择EBX基址寄存器,选择“数据窗口中跟随”
数据窗口显示,“0F”较多,应该是空格,“8F”则是地雷,“10”则是墙(换行)。
去掉所有断点,运行代码,点击格子后,其中40表示空格,41代表显示1,42代表显示2,8F代表地雷
以上内容为第三行内容,以此类推,能够通过分析每行存“8F”的位置,判断地雷所在位置。
使用Cheat Engine修改游戏规则
Cheat Engine:
Cheat Engine是一款专注于游戏的修改器。它可以用来扫描游戏中的内存,并允许修改它们。它还附带了调试器、反汇编器、汇编器、变速器、作弊器生成、Direct3D操作工具、系统检查工具等
游戏修改:
自定义雷区高度为9
输入数字9 首次扫描
设置高度16
再次扫描,仅剩4个结果
设置高度20
搜索20,再次扫描
高度地址:
0x01005338
0x010056A8
修改高度
选择的地址更改数值
地址0x01005338、0x010056A8
改成6
发现有了新墙
新墙以上的可以点击,新墙以下的点击无效果,成功实现了游戏修改。
即96个格子,其中有64个雷子。