目录

  1. 问题导入
  2. 使用工具
  3. 逆向分析

问题导入

  扫雷的游戏目标是在最短的时间内根据点击格子出现的数字找出所有非雷格子,同时避免踩雷,踩到一个雷即全盘皆输。如果用时破纪录,则会在扫雷英雄榜上留下昵称和用时记录。现在我们通过逆向分析来人为修改这一记录。

使用工具

  Ollydbg:通常称作OD,是反汇编工作的常用工具。本人使用的是看雪学院的优化版OD:OllyICE,可在看雪学院官网进行下载。

逆向分析

  下图为游戏菜单栏,可以看出扫雷英雄榜的点击链接在“菜单栏”-“游戏”-“扫雷英雄榜”,菜单项会响应鼠标点击并显示出英雄榜信息。


  可以看到英雄榜初始化昵称均为匿名,时间均为999。当扫雷在不同电脑运行时,该英雄榜均会初始化,因此该数据应该不是存储在exe中,可能是电脑某个文件,如软件注册表。
</br>
  用Ollydbg打开winmine.exe,得到如下调试界面:

  现在我们需要找到注册表位置,也就是找到注册表相关函数,这些函数都是exe从外部dll库调入的。在反汇编窗口点击右键,选择“查找”-“当前模块中的名称(标签)”,得到exe的导入库函数。
  点击地址字段排序,最前面几个函数均是从ADVAPI32.dll导入的,和注册表有关。

  RegCreateKeyExw函数功能为创建或打开注册表项。默认为创建,当注册表中有此项时,为打开。我们左键选中该函数,右键选择在“每个参考上设置断点”,这样调用该函数位置均会加上断点。

  返回反汇编窗口,快捷键F9(fn+F9)运行程序到断点位置。右下角堆栈窗口即有函数调用的参数信息,可以看到注册表位置路径“Software\Microsoft\winmine”。

  使用Win+R打开电脑运行,输入regedit打开注册表。

  在HKEY_CURRENT_USER下寻找路径software\Microsoft\winmine,找到英雄榜相关信息如下:

  可以看到Name、Time字段,Name都是匿名,Time都是999,与之前看到的英雄榜数据相同,接下来修改相应字段即可。修改后打开扫雷,查看英雄榜,可见信息已经被修改。