街机hack,从早期的街霸-降龙版
?到后期对各种街机的各种改动版本
这些成果,就是对街机游戏的代码进行逆向分析的结果。对于大部份街机游戏,是基于摩托罗拉68000的CPU,使用的是一套特别的汇编指令集。
我们想要对游戏进行逆向分析,首先我们需要的是一个可以查看游戏中的汇编代码的工具,这里选择也只能选择的是一款比较流行的多机种模拟器工具,MAME。
下载地址:MAME | Latest MAME Release
在撰写该篇文章时,MAME所对应的最高版本为0.261。
该文件本身为一个EXE文件,但其实为一个自解压的压缩包,我们可以选择直接运行安装,也可以选择用压缩工具来把里面的文件解压出来。
artword??????? - 布局管理文件
bgfx???????????? - BGFX着色器、着色器链和效果的定义
ctrlr????????????? - 键盘按钮映射
docs ?????????? - 使用说明文档
hash??????????? - 所有可模拟的游戏或软件列表
hlsl????????????? - 滤镜文件
ini??????????????? - 配置文件
language???? - 语言文件
plugins??????? - 插件文件
roms???????? ?? - ROM文件
samples?? ?? - 一些声音样本文件
其主要运行文件为mame.exe,直接双击可以运行MAME:
和mameplus不同,官方的mame没有窗口化的界面。
此时,我们还没有任何ROM文件,所以无法运行任何游戏。要运行需要的游戏,我们还需要要下载对应的ROM文件,我们去MAME官网下载一些网友原创非商业用途的游戏来进行测试。
下载地址:MAME | ROMs for Free Download
我们选择一个叫carpolo的小游戏来测试
下载该ROM文件,放到roms文件夹中。
我们可以用多种方法来运行该游戏:
?双击"Car Polo"运行该游戏。
选中该批处理文件,右键,选择编辑或用文本编辑工具打开该文件,在文件中输入批处理命令:
mame.exe carpolo
?双击该批处理文件,运行游戏:
运行成功会显示游戏的基本信息,按任意键继续:
?
如果该ROM文件还存在问题,会出现提醒,该ROM的问题为"还未正确地模拟声音功能",按任意键继续:
?进入游戏:
?因为不太会玩该游戏,这里不做说明。
此时,我们只能看到游戏的运行,并不能观察到游戏的程序代码,我们如果需要查看游戏的程序代码,需要加入一些参数来启运MAME。我们下面将测试一款非常流行的游戏来测试如果查看游戏的程序代码,该游戏名为"Cadillacs and Dinosaurs(中文名:恐龙新世纪)"。这里因各种原因,无法提供该ROM的下载。
该游戏下载到的ROM文件文件名为dino.zip的压缩包,和之前的游戏一样,我们同样把该文件放到roms文件夹下。在mame.exe相同的文件夹中,新建一个批处理文件"dino.bat",在该文件中输入:
mame.exe dino -debug -window
pause
参数:
??????? -debug :打开debug调试选项
??????? -window :以窗口模式运行该游戏
因为如果出现错误,我们可能需要观察错误提示,我们加入一行"pause"命令。
在下载ROM文件时,经常见到的问题是会出现缺少某个ROM文件的情况:
比如这里是提供缺少dl-1425.bin文件,同样因为一些原因,这里无法提供该文件的下载。请自行搜索下载该文件。 把下载到的缺少的文件添加到dino.zip压缩包中:
再次测试运行:
如果正常运行,我们可以看到,除了游戏窗口,多了一个debug调试窗口,在这里,我们可以查看该游戏的运行代码。
这里说明一下该窗口菜单的一些功能:
New Memory Window??????????????????????????????? - 新建内存窗口
New Disassembly Window??????????????????????? - 新建汇编窗口
New Error Log Window???????????????????????????? - 新建错误日志窗口
New (Break|Watch)points Window?????????? - 新建中断列表窗口
Run?????????????????????????????????????????????????????????? - 运行游戏(不关闭debug窗口)
Run and Hide Debugger????????????????????????? - 运行游戏(同时关闭debug窗口)
Run to Next CPU??????????????????????????????????????? -运行(直到下一个CPU)
Run until Next interrupt on This CPU??????? - 运行(直到该CPU中的下一个中断)
Run until Next VBLAND??????????????????????????? - 运行(直到下一个VBLAND)
Step Into??????????????????????????????????????????????????? - 步入
Step Over????????????????????????????????????????????????? - 步过
Step Out??????????????????????????????????????????????????? - 步出
Rewind Step????????????????????????????????????????????? - 步回
Soft Reset????????????????????????????????????????????? ? ? - 软重启
Hard Reset??????????????????????????????????????????????? - 硬重启
Exit????????????????????????????????????????????????????????? ? - 退出游戏
Set breakpoint at cursor??????????????? - 在光标处设置一个中断
Disable breakpoint at cursor???????? - 在光标处取消一个中断
Run to cursor??????????????????????????????? - 运行到光标处
Raw opcodes??????????????????????????????? -显示原始数据
Encrypted opcodes?????????????????????? - 显示加密的数据
Comments??????????????????????????????????? - 显示注释
Save Window Arrangement??????? -保存窗口的排列
Light Background??????????????????????? - 亮色背景
Dark Background??????????????????????? - 深色背景
我们如果需要关闭debug调试窗口,可以在选中调试窗的情况下,按"F12"键,来关闭调试窗口并进入游戏。
以上就是对于街机游戏逆向工程所需用到的MAME模拟器的基本介绍,在之后的章节,会一步步地尝试如何去逆向分析一个游戏的运行。并测试改变程序的运行逻辑,来改变程序的运行结果。
在后续的文章中,会要求可以熟练地使用MAME模拟器,比如按键的设置,能熟练地进行游戏的存档和读档,这些操作不要本教程的介绍范围。可以搜索对应的文章来了解。