街机模拟游戏逆向工程(HACKROM)教程:[19]思路的多样性

在上一章,我们找到了检测敌人出现条件的地方,并测试成功,但是找到这个位置的思路并不只有这个方法,这里我们提供另一个思路。

我们已经知道,敌人出现需要一个条件,当这个条件满足时,敌人的出现,程序会需要初始化这个敌人出现的位置,也就是说,我们可以利用敌人的坐标位置来一步步找到敌人出现的条件检测位置。

首先,我们需要找到敌人坐标位置的地址,进入游戏,向前走,让敌人出现,我们初始化搜索:

ci sw

我们回到游戏观察敌的走动,我们猜测敌人向左走时敌人的坐标会减少,向右时会增加,我们发现敌人移动了,就进入调试器,如果敌人向左移动了,使用

cn -

如果向右移动了,使用

cn +

同样循环多次,筛选出足够少的地址:

我们可以测试这些数据,当改变数据时敌人会发生突然的移动,那这个地址就是敌人的坐标数据:

通过测试,我们找到了ffd7dc这个地址为敌人的坐标数据。

我们回到游戏开始,向前走一点,走到敌人马上就要出现的临界点,为什么要走到临界点,是因为在敌人出现前,会出现两个飞龙,因为敌人的内存很多是共享的,这两个飞龙很可能会占用掉这个地方的内存。我们需要确保这两个飞龙消失后,再让这个敌人出现。

我们需要注意,这些不起眼的元素,很可以会景响我们的测试结果。

这时,该地址应该为0

我们监控这个位置

wp ffd7dc,1,w

然后,我们向前走,让这个敌人出现,会出现中断

我们可以猜测,这里是设置敌人一些出现数据的子程序。我们查看运行历史:

00FC98: move.w  ($744,A5), D1
00FC9C: cmp.w   D1, D0                    //
00FC9E: bhi     $fd02
00FD02: movea.l ($c,A4), A2
00FD06: tst.b   ($4dc,A5)
00FD0A: beq     $fd1e
00FD1E: move.w  (A2), D0
00FD20: move.w  ($744,A5), D1
00FD24: cmp.w   D1, D0                    //
00FD26: bhi     $fd44
00FD2A: bsr     $fdae
00FDAE: move.w  ($2,A2), D0
00FDB2: btst    #$7, D0
00FDB6: beq     $fdc0
00FDC0: move.w  D0, D1
00FDC2: andi.w  #$60, D1
00FDC6: beq     $fdec
00FDEC: move.w  D0, D1
00FDEE: andi.w  #$18, D1
00FDF2: beq     $fe1a
00FE1A: andi.w  #$7, D0
00FE1E: add.w   D0, D0
00FE20: add.w   D0, D0
00FE22: lea     (-$de,PC) ; ($fd46), A0
00FE26: movea.l (A0,D0.w), A0
00FE2A: jsr     (A0)
00483C: tst.w   ($65f8,A5)                //
004840: beq     $485a
004844: move.l  A4, -(A7)
004846: movea.w ($6602,A5), A4
00484A: movea.w (A4)+, A0
00484C: move.w  A4, ($6602,A5)
004850: subq.w  #1, ($65f8,A5)
004854: movea.l (A7)+, A4
004856: or.b    D0, D0
004858: rts
00FE2C: bcs     $fe64
00FE30: move.b  #$1, ($0,A0)
00FE36: move.w  ($4,A2), ($20,A0)
00FE3C: move.w  ($6,A2), ($8,A0)
00FE42: move.w  ($8,A2), ($10,A0)

我们向上寻找,找到数据对比的指令,很可能就是我们要找的地方,因为我们在上一章已经找到了这个地址,我们很容易就可以看出来:

00FD1E: move.w  (A2), D0
00FD20: move.w  ($744,A5), D1
00FD24: cmp.w   D1, D0                    //

所以,找到自已希望的程序位置并不是只有一个方法,如果一个方法很难找到想要的位置,可以尝试换一个思路,也许可能更快地找到你想要的。

  • 18
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

字节狂徒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值