文章总结: 这篇文章介绍了逆向工程Windows扫雷游戏的方法,使用OllyDebugger分析程序内存,找到游戏棋盘的内存地址范围,并识别了不同数值代表的含义。作者通过ProcDump工具和Python脚本自动化了寻找地雷的过程,提供了完整的代码示例,帮助读者理解逆向工程的基本流程和方法。文章适合作为逆向工程入门的实践教程。
综合评分: 91
文章分类: 逆向分析,二进制安全,安全工具
逆向入门 | 逆向windows扫雷
白帽子左一
白帽子左一
2025年7月6日 12:00
美国
扫码领资料
获网安教程
来Track安全社区投稿~
赢千元稿费!还有保底奖励~(https://bbs.zkaq.cn)
这篇博客记录了我逆向工程之旅的起点。也是我在逆向工程之路上的基础一步,请多包涵其中的错误。本文中,我对 Windows 的扫雷应用进行了逆向分析,尝试找出所有地雷并完成游戏。这里展示的方法并不是唯一的。
开始逆向!
首先,我们启动 Olly Debugger。本篇博客中我们只使用 Olly Debugger 来进行逆向工程。从菜单中打开 扫雷程序的 exe 文件。Olly 会打开 CPU 信息视图(汇编程序视图),或者我们也可以手动在菜单栏中选择 View > CPU 来访问它。当前应用尚未运行,因此右下角会显示为暂停状态。接下来我们导航到它的 内存转储:在菜单中选择 View > Memory。
什么是内存转储?
内存转储是在计算机意外停止时记录系统内存中所有内容的文件。内存转储可能包含在其生成时运行的进程中的数据。
img
在内存映射窗口中,在“Owner(所有者)”列中搜索应用程序名称,然后就可以在目标应用对应的条目中找到 .text 和 .data 段。
- •
.text—— 存放应用程序的代码。 - •
.data—— 根据使用情况记录应用程序的数据。
img
.data 段似乎是我们的目标,右键点击 .data 并选择 Dump。这将打开应用程序的内存转储视图,但此时应用程序尚未附加到调试器(仍处于暂停状态)。在附加应用程序之前,我们先观察一下转储文件,可以看到其中全是零。这是因为应用程序尚未附加到调试器。
img
因此,要启动应用程序,请点击顶部菜单栏中的 Debug > Run;这将使 CPU 信息从 64 位切换到 32 位,并重复之前的步骤以附加应用程序。现在,应用程序已经被我们的调试器监控,是时候在转储文件中寻找变化了。在内存地址附近的 01005340 处,我们可以观察到数据的变化以及某种模式,看起来就像是我们的游戏棋盘。
img
游戏棋盘似乎位于内存地址 01005340 到 01005480 之间。为了确认这一点,可以在游戏棋盘上尝试操作,并观察目标内存地址范围内的十六进制数值变化。
- • 42 代表数字 2
- • 41 代表数字 1
- • x8f 代表地雷
img
现在,我们可以通过手动识别地雷的内存地址来作弊游戏,但让我们借助 ProcDump 和 Python 来自动化这个过程。
什么是 ProcDump?
ProcDump 是一个命令行工具,其主要用途是监控应用程序的 CPU 峰值,并在峰值期间生成崩溃转储,供管理员或开发者用来分析峰值的原因。
Python 助攻:
import os
# Dump memory
cmd = "del mine.dmp"
os.system(cmd)
cmd = "procdump -ma minesam.exe mine" #Write a dump file with all process memory
os.system(cmd)
# Find gameboard
mark ='x10x10x10x10x10x10x10x10x10x10x10x0F'
line_length = 32
board_size = 500 # characters in whole board
with open("mines.dmp", "rb") as f:
data= f.read()
start = data.find(mark)
if start <0:
print "No Gameboard found"
for i in range(0, board_size, line_length):
line = ''
for j in range(line_length):
g = data[start+i+j]
if g == 'x10':
c = "-"
elif g == 'x0f':
c = " "
elif g == 'x8f':
c = "*"
elif g == 'x00':
c = " "
else:
c = chr( ord(g) - 16 )
line += c
print line
运行脚本后:
img
有了这些信息,我们就能无往不利地找到所有数字。
获取更多精彩内容,尽在Track安全社区~:https://bbs.zkaq.cn
声明:⽂中所涉及的技术、思路和⼯具仅供以安全为⽬的的学习交流使⽤,任何⼈不得将其⽤于⾮法⽤途以及盈利等⽬的,否则后果⾃⾏承担。所有渗透都需获取授权!
如果你是一个网络安全爱好者,欢迎加入我的知识星球:zk安全知识星球,我们一起进步一起学习。星球不定期会分享一些前沿漏洞,每周安全面试经验、SRC实战纪实等文章分享,微信识别二维码,即可加入。
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:白帽子左一 白帽子左一《逆向入门 | 逆向windows扫雷》