大航海时代2 全村落 探索 MD ROM 静态 HACKER

只愿长相守 提交于 2020-03-11 15:07:02

 开篇 - 来个低级语言的 MC68000汇编  大航海时代2 全村落 MD ROM的 HACKER

     最近心血来潮,看到MD的大航海时代2 ROM,勾起了很多记忆。一直想要周游全世界,仗剑走天涯,看一看世界的繁华,只奈没钱,没时间。

只能回忆当年玩MD大航海时代2的时候的美好时光,因为当年一心想要发现全世界的发现物,但是后来发现是不可能的,开局随机的,一直想要解决这个问题,今天决定HACKER一下这个ROM。

 

目标:大航海时代2 全村落 探索 MD ROM 静态 HACKER

工具:IDA ,REGEN,MESSUI 

要求技术:懂一点摩托罗拉MC68000的汇编

 

找到ROM,大航海时代2纯中文版原版.smd ROM ,感觉这个比较纯,虽然当年玩的都是日文版,那就以这个开始吧。

接下来咋整? 直接运行ROM? 找初始化代码? 没有思路?

看来要找到初始化村落的内存地址,地址怎么找? EC代码呀,去看看有没有,果然发现了 EC代码,说 5C25=64 ?啥意思呢

就是说把内存地址: 5C25 SET 为64(16进制),那么说干就干

下断点:  messui 工具下断点:

 

wp ff5C25,2,w

 

查看一下内存的内容:

注意内存查看要加上 ff5c25

注意看内存:

 ff5c15 都FFFF 的,大胆猜测: ff5c1E 为村落内存开始数据:  ff5c1E 

 刚才运行系统运行到2个断点:

先放过,ROM开始初始化,再次查看内存

 

经过N次测试,花了N多的时间,发现

00A8 010E 000A 8400, 这组数据 一个村落的显示,第一村落应该是英国的石蹲,00A8 010E应该为经纬度,具体算法没有去跟踪,8400 这组数据

8表示无法发现,6表示已经发现,0表示可以发现。

 

那么再次下断点:

wp ff5C24,1,w

进行写入下断点,终于跟踪来的关键代码位置,(当然,这个里面花了N多时间),数据初始化是人物在选择确定后,进行是否能否的初始化工作的。等下贴反汇编代码

定位到关键代码,用IDA工具:

 

 第一行    A2就是我们断点锁定的位置,直接初始化设计为 8X,刚才说过 8表示是无法探索到的,

后面二行是进行循环初始化,一共是  98个村落,

    

然后产生随机数据,选择 50个村落设置为可以探索到。

 

修改思路:

   思路1、直接把初始化村落设置为98个,测试发现死循环。  应该是随机数设定的问题,可以修改指令跳过。 感觉比较麻烦。

   思路2、 能否直接初始化的时候设置为全部可以探索,再随机设置5个保留(可能有国王寻宝的任务)。这个思路应该修改的代码比较少。

我这里采用思路2方式:

 

 ori.b   #$80,6(a2)  修改为 andi #$0,(a2) ,

 cmpi.b  #$32,d2 ; '2'

  32修改为5,下面还有跳转的验证,可以跟踪指令一一去掉,如果遇到死循环,可以单步调试。

修改指令工具可以用:

直接用16进制修改指令, 另外

 

 

 

 这2出也要注意处理一下。 可能存在跳转问题。

 

 好,hacker 基本结束。CRS修正不要忘了。 

 另。我放上我的修改后的ROM:

大航海时代2纯中文版-全村落版.rar

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!