Hotdry.

Article

南极遗失34年的DOS游戏LAN-LOK逆向工程:软盘镜像提取与x86实模式分析实践

从软盘物理介质到可运行二进制,完整梳理DOS游戏逆向工程的技术路径:FAT12文件系统解析、x86实模式内存布局分析、以及复古游戏数字保存的工程实践要点。

2026-05-24systems

背景:数字考古的紧迫性

软盘介质的平均寿命约为 30 年,这意味着 1990 年代初期发行的 DOS 游戏正处于物理载体失效的关键窗口。南极科考站遗留的 LAN-LOK 游戏软盘正是典型案例 —— 在零下环境中保存了 34 年后,磁性介质仍面临氧化、消磁和机械损伤的风险。这类 "遗失媒体" 的抢救不仅关乎游戏史,更涉及早期数字文化遗产的 preservation 方法论。

DOS 游戏的逆向工程与当代软件分析存在本质差异:x86 实模式运行环境、直接硬件访问、以及缺乏标准化调试符号。本文以 LAN-LOK 项目为切入点,系统梳理从物理介质到可运行代码的完整技术链路。

软盘镜像提取:从物理层到逻辑层

介质读取与镜像生成

5.25 英寸软盘的提取面临多重技术障碍。首先需确认磁密度(DD 360KB 或 HD 1.2MB)和编码格式(MFM)。推荐使用 KryoFlux 或 SuperCard Pro 等专业设备执行低级别读取,生成原始流文件(RAW/CTR 格式)。若使用普通软驱,可通过dd命令配合块大小参数获取标准镜像:

# 读取3.5英寸1.44MB软盘
dd if=/dev/fd0 of=lanlok.img bs=512 count=2880

# 处理坏扇区(设置错误处理策略)
dd if=/dev/fd0 of=lanlok.img bs=512 conv=noerror,sync

FAT12 文件系统解析

DOS 软盘采用 FAT12 文件系统,引导扇区(Boot Sector)包含 BPB(BIOS Parameter Block)关键参数:每扇区字节数、每簇扇区数、保留扇区数、FAT 表数量、根目录项数等。解析逻辑需按以下顺序执行:

  1. 引导扇区验证:检查 0x1FE-0x1FF 处的 0x55AA 签名
  2. FAT 表定位:从保留扇区后读取,解析 12 位簇链
  3. 根目录遍历:定位数据区起始,提取 8.3 格式文件名
  4. 碎片重组:通过 FAT 簇链还原非连续存储的文件

对于存在物理损伤的软盘,需结合多次读取结果进行数据恢复,优先保证可执行文件(.EXE/.COM)和关键资源文件的完整性。

x86 实模式内存布局分析

实模式地址空间结构

DOS 游戏运行在 x86 实模式下,CPU 可直接访问 1MB 地址空间(0x00000-0xFFFFF)。理解内存布局是逆向分析的基础:

地址范围 用途 说明
0x00000-0x003FF 中断向量表 256 个中断向量,每个 4 字节
0x00400-0x004FF BIOS 数据区 设备状态、内存容量等
0x00500-0x9FFFF 常规内存 DOS 和应用程序可用
0xA0000-0xBFFFF 显存 / 适配器 VGA 图形模式使用
0xC0000-0xDFFFF 可选 ROM 显卡 BIOS 等
0xF0000-0xFFFFF 系统 BIOS 主板固件

LAN-LOK 作为早期 DOS 游戏,极可能采用传统内存模型:程序加载至 0x100 以上的可用内存,通过 INT 21h DOS 中断进行文件操作,直接写入 0xA0000 显存实现图形渲染。

代码入口与重定位

.COM 文件加载至 0x100 偏移处,CS=DS=ES=SS 指向同一段。.EXE 文件包含重定位表,加载器根据可用内存调整段寄存器。逆向分析时需关注:

  • 程序段前缀(PSP):0x00-0xFF 包含命令行参数、环境变量指针
  • INT 21h 调用:文件操作、内存分配、程序终止
  • INT 10h/INT 16h:视频输出和键盘输入
  • 直接端口访问:通过 IN/OUT 指令操作硬件(声卡、定时器)

逆向工程实践:静态与动态分析

静态分析工具链

针对 DOS 可执行文件的静态分析,推荐以下工具组合:

IDA Pro / Ghidra:加载 DOS 可执行文件后,需手动指定 16 位 x86 处理器模式。关键配置包括:

  • 段寄存器假设(CS、DS、ES、SS 的初始值)
  • 中断向量识别(标记 INT 调用对应的 DOS/BIOS 功能)
  • 数据交叉引用(追踪字符串、图形资源的引用位置)

DOSBox 调试器:内置 DEBUG 命令支持断点设置、寄存器查看、内存转储。对于需要验证假设的场景,动态调试比静态分析更高效:

DEBUG LANLOK.EXE
-U 100 L 20        ; 反汇编20字节
-G 2F0            ; 运行至地址2F0
-D 1000:0 L 100   ; 查看内存

关键分析目标

针对 LAN-LOK 这类复古游戏,逆向工程的核心目标包括:

  1. 图形模式识别:检测 INT 10h 设置的视频模式(13h 320x200 256 色最常见)
  2. 资源文件解析:定位精灵图、关卡数据、音效的存储格式
  3. 输入处理逻辑:追踪键盘扫描码到游戏动作的映射
  4. 存档机制:分析文件写入模式,验证存档格式的可移植性

游戏 Preservation 的工程实践

元数据标准化

完整的游戏保存不仅包含可执行文件,还需记录运行环境参数:

  • 硬件配置:CPU 频率(建议使用 cycles 参数模拟)、内存容量、显卡类型
  • 依赖组件:DOS 版本、驱动程序、运行时库
  • 校验信息:SHA-256 哈希、原始介质标识(卷标、序列号)

容器化与可复现性

使用 DOSBox 的 conf 配置文件固化运行环境,确保未来研究者能够复现相同的执行状态:

[cpu]
cores=1
cputype=386
cycles=fixed 3000

[dosbox]
memsize=16
machine=svga_s3

[autoexec]
mount c ./lanlok
c:
LANLOK.EXE

格式转换与长期存储

原始 IMG 镜像应转换为开放格式(如 IPF、CT Raw)并归档至多重冗余存储。对于包含版权保护(如物理坏道、非标准磁道格式)的软盘,需在元数据中明确记录保护机制类型,以便未来开发兼容性层。

技术要点总结

DOS 游戏逆向工程的核心挑战在于 bridging the gap between 物理介质退化与数字保存需求。关键参数包括:

  • 镜像提取:优先使用专业设备获取原始流数据,标准 IMG 作为降级方案
  • 内存分析:牢记实模式段:偏移寻址,关注 INT 21h/10h/16h 调用
  • 工具选择:IDA/Ghidra 用于静态分析,DOSBox DEBUG 用于动态验证
  • 保存规范:记录完整元数据,使用配置文件固化运行环境

LAN-LOK 项目的价值不仅在于恢复一款遗失游戏,更在于验证了从物理软盘到可运行数字档案的完整技术链路。随着软盘介质持续老化,这类 preservation 工作的时间窗口正在快速收窄。


资料来源

  • Total DOS Collection 档案索引
  • DOSBox 官方文档与调试指南
  • x86 实模式编程参考资料

systems

内容声明:本文无广告投放、无付费植入。

如有事实性问题,欢迎发送勘误至 i@hotdrydog.com