返回列表 发帖

光明力量3第二部反汇编和高级修改

目标游戏 光明力量3第二部
工具:IDA,yabause IDA处理器选项中找不到sh2,用sh4B代替
首先利用yabause在人物属性结构中魔法编号(网上可找到现成的金手指)的地址下断
                mov.b        @r10, r4        ; 断在此处,取魔法编号
                mov.l        dword_80CA74C, r0 ; 此处反汇编与yabause不同,可能是cpu选的有问题
                jsr        @r0                ; 取魔法属性地址,
                extu.b        r4, r4
                mov.l        @r9, r1                ; 1->r1 @r9存的应该是魔法的等级
                mov        r0, r2
                add        #-1, r1
                shll2        r1
                add        r2, r1                ; r1=魔法属性地址
                mov.b        @r8, r2                ; 取人物的现有MP值
                add        #6, r1
                mov.b        @r1, r1                ; 取该编号的魔法MP消耗值
                extu.b        r2, r2
                extu.b        r1, r1
                cmp/hs        r1, r2
                bt        loc_80CA64E        ; MP够了则跳
                mov.w        080CA746, r5        ; 猜测下面代码的作用是显示MP不够
                mov.l        dword_80CA750, r4 ; h'1D3E38EA
                mov.l        dword_80CA754, r1 ; h'EBBEAACF
                mov        #1, r7
                jsr        @r1
                mov        #h'78, r6
                bra        loc_80CA38A
                mov        #h'63, r10

get_MagicAddress:
code:080ACF44                 exts.w  r4, r4          ; r4=魔法编号
code:080ACF46                 extu.w  r4, r2
code:080ACF48                 mov.w   word_80ACF5E, r1 ; h'FF
code:080ACF4A                 cmp/hi  r1, r2
code:080ACF4C                 bf      loc_80ACF50
code:080ACF4E                 mov     #0, r4
code:080ACF50
code:080ACF50 loc_80ACF50:                            ; CODE XREF: get_MagicAddress+8j
code:080ACF50                 mov     #h'14, r1
code:080ACF52                 muls    r1, r4          ; 编号*常数,这是明显标志,这个常数表示每个魔法属性结构所占的字节数
code:080ACF54                 sts     macl, r2
code:080ACF56                 mov.l   dword_80ACF60, r1 ; h'602E658
code:080ACF58                 mov     r2, r0
code:080ACF5A                 rts
code:080ACF5C                 add     r1, r0         ;r1存的就是魔法属性的基址
code:080ACF5C ; End of function get_MagicAddress
code:080ACF5C

分析魔法属性结构:
支援魔法属性(每个魔法占0x14字节)
  02 01 00 00 10 02 05 00 20 03 09 00 00 01 00 00  
  00 01 00 00  
+0 使用对象 02-对自己人 01-对敌人
+1 魔法类型 1-能力变化 0-减血
+4 一级距离 31-一至三格
+5 一级范围  04-全体
+6 一级MP消耗值
+7 一级威力
后面3字节代表二级、三级、四级属性

根据以上的方法又找到物品和必杀技的属性结构
必杀技属性(每个占4字节)
01 0A 10 24                                    
+3 威力 不能设得太高  最高可设为4A


半人马之箭(BC)属性:占24个字节:
  75 30 46 10 01 32 1F 07 03 00 04 10 05 0F 03 03
  13 07 07 02 12 79 18 02                        
+00 价格

+02 物品相性

+03物品属性   10-不会损坏  11-可以损坏 12-装备后处于诅咒状态

+04装备限制

+05使用范围 32-2至3格  31-1至3格  最大3格

+06 增加的攻击力
+07 增加的防御力
+0E 加强的属性为速度
+14 装备学会的能力 11表示魔法 12表示必杀技
+15 魔法或者必杀技的编码
+16 使用产生魔法类型 1604全体加HP 1702全体加MP 1D升级效果  10吸血吸魔
+17 魔法等级
(01攻击 02防御 03速度 04移动 05运气  11装备学会的魔法
12必杀技, 13会心率 14反击率 0E光属性防御 08每回合增加的MP 07每回合增加的HP,不能放最后的一个字 )

ss的内存不是06开头的吗????

TOP

在yabause中是06开始,以上代码是我用IDA载入bin文件反汇编后导出来的,是以08开头的,因为没sh2处理器可选,有些命令翻译得有些问题

TOP

那还不如直接dump 06000000-06100000这段内存出来,我记得程序区是从06004000开始的?

另外你前面没编号后面又有编号的,看起来有点乱啊~

TOP

yabause应该不能dump,ida刚开始用,有些功能还不会用,以前用的是OD,但是OD又不能调试SS游戏

TOP

请yzb指教一下,IDA应如何设置才能方便的调试SS游戏

TOP

请yzb指教一下,IDA应如何设置才能方便的调试SS游戏
jinxin8889 发表于 2011-4-28 20:28



Yabause不是有抽取内存的选项吗 = =!
   


另外ida 按个人习惯设置,比如我习惯按以下设置

因为主程序是从06004000开始的
附件: 您需要登录才可以下载或查看附件。没有帐号?注册

TOP

非常感谢.............

TOP

恩,推荐多出这样的原创帖。PS,SS游戏选择SH4没错,另外,内存结构通常我是用RAM不是Rom。
我就是我

TOP

好复杂啊。需要学习。

TOP

返回列表