鬼泣修改吧 关注:1,385贴子:38,367

用CE来自查自制PS2金手指修改代码的方法:

只看楼主收藏回复

首先把金手指代码输入到PCSX2模拟器的方法见:
http://tieba.baidu.com/p/1223745237
注意在PCSX2模拟器中使用金手指是不需要主识别必须码的。
另外在PCSX2模拟器中只能使用未经加密的金手指,加密金手指必须先用金手指转换工具解密成一般形式才能被模拟器识别。
怎么来区别金手指码是否加过密,比较常见的RAW/XP这种码就是没有经过加密的,对十六进制数比较熟的话就很容易看出来,比如:
Max Orbs
2078EF44 000F423F
这条金手指码,就是未加密的,代码的前段为地址,后段为数值,对十六进制比较熟悉的一眼就能看出来代码后段的000F423F就是十进制的999999,像这样地址和数值都是实际数值的金手指码就属于未经加密的。而:
Max Orbs
1CEF706C 144F25CC
这条金手指码则是经过加密处理的,这样的金手指码通常是看不出其数值的含义,AR2、CB码等等都属于加密金手指,像这类金手指码只能用转换工具解密后才能在模拟器中运行了。
金手指码的含义,当然是未加密的,通常前半段为地址,后半段为数值。其中数值为正常高低顺序,而不像在内存中高低位顺序要反过来。比如:
Max Orbs
2078EF44 000F423F
其中PS2的地址实际上只有7位数字,也就是在上面这条金手指代码中,078EF44才是地址,而最前面一位的数字2则是金手指类别码,常见类别有以0、1、2、4、D、E开头的。
0开头,表示代码后半段处理数值为1字节
0aaaaaaa 000000dd
其中a为地址,d为数值
比如:
0078EF44 000F423F
其代码实际有效数值只有最低位的3F
1开头,表示代码后半段处理数值为2字节
1aaaaaaa 0000dddd
比如:
1078EF44 000F423F
其代码实际有效数值只有低位的423F
2开头,表示代码后半段处理数值为4字节
2aaaaaaa dddddddd
比如:
2078EF44 000F423F
其代码实际有效数值就是后面000F423F全部有效
4开头,表示重复循环处理数值
4aaaaaaa xxxxyyyy
dddddddd 00000000
其中x为重复次数,y为跳跃距离
比如:
406924B8 00280014
FFFFFFFF 00000000
含义为从06924B8开始写入数值FFFFFFFF,再往后每跳过20(14h)个00000000(4字节)(20*4=80个字节)的距离,写入一次数值FFFFFFFF,并连同第一次在内,重复循环40(28h)次。
D开头,为条件判定码
Daaaaaaa dddddddd
代码一
代码二
表示如果在地址aaaaaaa处,数值=dddddddd,那么就执行代码一,否则就跳过代码一运行下一条代码二。
比如
D078EF44 00000000
2078EF44 000F423F
其含义就是如果地址078EF44这里如果等于0了,那么就写入000F423F,否则就没有变化。
这类金手指也通常用来判定按键来开关金手指代码。
E开头,为条件判定码多条版
E0nndddd 0aaaaaaa
其中n为判定开关后面代码的条数。
比如
E003dddd 0aaaaaaa
其含义为如果地址aaaaaaa处的数值等于dddd,那么运行后面3条代码,否则则跳过后面的3条代码。
话说上面这些金手指代码说明我以前在emu-zone论坛发过教程,还是手柄按键开关代码的方法,可以自己找一下,下面是用CE自己来找代码的方法。
用CE选定PCSX2模拟器进程,其内存地址范围固定在20000000~2FFFFFFF,以前老版的模拟器地址是随机分别的,现在新版都固定在这个地址了。
上面已经说到,PS2的内存地址实际上只有7位,所以就正好放在20000000~2FFFFFFF这一段内存中。
简单的说就是用CE搜到的地址-0x20000000就是其实PS2的内存地址。比如:
用CE找到鬼泣3特别版的红魂数量地址为0x2078EF44,那么实际PS2的地址就是0x078EF44,注意这里的首位2和上面金手指类别码首位2的区别。然后根据上面金手指的规则,就可以自己写金手指一些代码了。
但是这仅限于动态数据类的修改,而修改PS2程序本身用CE就不行了,因为CE反汇编的结果是模拟器把PS2处理器指令翻译成PC处理器指令之后的结果,而并不是PS2本身的指令。所以想要修改PS2的程序指令,就只能用专门的PS2反汇编工具了。这个我试过一个,只能静态分析PS2的可执行程序,不能像CE这样动态分析指令,而且PS2的汇编指令和PC也不一样,完全的看不懂……


1楼2011-10-21 20:20回复
    新教程必顶~~


    IP属地:山东2楼2011-10-21 20:41
    回复
      就等这个呢


      IP属地:浙江3楼2011-10-22 15:09
      回复
        重新整理补充一下:
        0aaaaaaa 000000dd
        8位写数值dd到地址aaaaaaa
        1aaaaaaa 0000dddd
        16位写数值dddd到地址aaaaaaa
        2aaaaaaa dddddddd
        32位写数值dddddddd到地址aaaaaaa
        301000nn 0aaaaaaa
        8位加数值nn到地址aaaaaaa
        302000nn 0aaaaaaa
        8位减数值nn到地址aaaaaaa
        3030nnnn 0aaaaaaa
        16位加数值nnnn到地址aaaaaaa
        3040nnnn 0aaaaaaa
        16位加数值nnnn到地址aaaaaaa
        30500000 0aaaaaaa
        nnnnnnnn 00000000
        32位加数值nnnnnnnn到地址aaaaaaa
        30600000 0aaaaaaa
        nnnnnnnn 00000000
        32位减数值nnnnnnnn到地址aaaaaaa
        4aaaaaaa xxxxyyyy
        dddddddd 00000000
        32位连续xxxx次写数值dddddddd到地址aaaaaaa~aaaaaaa+yyyy*4
        5aaaaaaa nnnnnnnn
        0bbbbbbb 00000000
        从地址aaaaaaa复制nnnnnnnn字节数值到地址bbbbbbb
        Daaaaaaa 0000dddd
        当地址aaaaaaa处16位数值等于数值dddd时则后面一条代码有效
        Daaaaaaa 0010dddd
        当地址aaaaaaa处16位数值不等于数值dddd时则后面一条代码有效
        Daaaaaaa 0020dddd
        当地址aaaaaaa处16位数值小于数值dddd时则后面一条代码有效
        Daaaaaaa 0030dddd
        当地址aaaaaaa处16位数值大于数值dddd时则后面一条代码有效
        Ennndddd 0aaaaaaa
        当地址aaaaaaa处16位数值等于数值dddd时则后面nnn条代码有效
        Ennndddd 1aaaaaaa
        当地址aaaaaaa处16位数值不等于数值dddd时则后面nnn条代码有效
        Ennndddd 2aaaaaaa
        当地址aaaaaaa处16位数值小于数值dddd时则后面nnn条代码有效
        Ennndddd 3aaaaaaa
        当地址aaaaaaa处16位数值大于数值dddd时则后面nnn条代码有效


        4楼2011-11-15 19:12
        回复
          再次眼晕。。


          IP属地:陕西5楼2011-11-15 20:01
          回复
            鬼泣1日版的真斯巴达魔人金手指,根据美版金手指推算而来的,已测有效……
            201378f0 00000000
            202c0590 03e00008
            202c0594 00000000
            202d343c 24030003
            202d344c 24030003
            前提条件是必须有普通难度21关以后的存档,读档后即可一直使用真斯巴达魔人,进门问题可以在门口先按一下挑衅键,再马上按进门键。


            6楼2011-11-18 19:22
            回复
              老大,飞行的斯巴达魔人咋改的


              IP属地:浙江7楼2011-12-01 16:02
              回复
                http://tieba.baidu.com/p/1305167500


                8楼2011-12-02 11:58
                回复
                  看了一遍,有点晕的说


                  IP属地:浙江9楼2011-12-16 14:36
                  回复
                    这个教程有点晦涩的说,能不能出个通俗一点的教程,最好拿个游戏试试


                    IP属地:浙江10楼2011-12-16 17:24
                    回复
                      不懂的话建议先看一下CE的用法教程……
                      用CE选定PS2模拟器进程,然后将内存搜索范围限定在20100000~23FFFFFF之间,手柄输入状态在内存中的值为:
                      L2 0001
                      R2 0002
                      L1 0004
                      R1 0008
                      △ 0010
                      〇 0020
                      × 0040
                      □ 0080
                      SELECT 0100
                      L3 0200
                      R3 0400
                      START 0800
                      ↑ 1000
                      → 2000
                      ↓ 4000
                      ← 8000
                      组合键,数值相加,比如L1=0004/R1=0008,那么L1+R1=000C
                      用CE搜索2字节整数,在模拟器游戏行动状态下,按住R1不放,然后按ESC暂停模拟器运行,用CE找08,然后恢复模拟器运行,什么键也不按,再用CE找00,然后再在模拟器游戏中按住L1不放,再按ESC暂停模拟器运行,然后用CE找04,反复几次后剩下最后几个结果。因为CE可以随时反应内存数值的变化,这个时候再看在模拟器中按键,数值是否按照上面的一样变化,如果是就记下地址。以鬼泣1日版为例,最后可能有几个地址数值都是一样的,但是只要数值是和手柄按键变化完全相同就没问题。
                      比如记下20753ea0这个,再减去模拟器的地址20000000,实际游戏机的地址就是00753ea0
                      用D开头的金手指码来判定按键状态,比如
                      d0753ea0 00001008 //如果当手柄按下R1+十字键↑
                      105b9ff0 00000000 //那么武器值切换到00
                      d0753ea0 00002008 //如果当手柄按下R1+十字键→
                      105b9ff0 00000001 //那么武器值切换到01
                      d0753ea0 00004008 //如果当手柄按下R1+十字键↓
                      105b9ff0 00000003 //那么武器值切换到03
                      d0753ea0 00008008 //如果当手柄按下R1+十字键←
                      105b9ff0 00000004 //那么武器值切换到04
                      再比如2代日版的超魔人
                      201dc518 1020000d //这是正常魔人代码
                      d056fb30 00000008 //如果手柄键R1按下时
                      201dc518 1400000d //就执行这个超魔人代码
                      至于中文版手柄状态值的地址,你要像上面这样用CE自己来找……
                      


                      11楼2011-12-16 18:23
                      回复
                        我就想让但丁的体力值和魔法值无限。我用ce怎么才能搜到这两个的地址,分开搜的
                        我扫描类型为未知的初始值,然后再搜减少的数值(我让怪打我,让血减少;我变身魔人,让魔法值减少)
                        然后再次扫描,可是地址好多啊,搜到最后就搜不到了
                        我不会弄金手指代码,但是用ce来修改也行啊,您只要告诉我这俩的地址怎么搞出来吧
                        我已经自己找到了红魂和大绿魔石的地址,能修改锁定,因为这两个有具体的数值,只要一直改变再搜索就能找到,可是血量和魔法值真心不会弄
                        


                        IP属地:浙江12楼2011-12-16 18:29
                        回复
                          多谢,这个我先试试


                          IP属地:浙江13楼2011-12-16 18:30
                          回复
                            新开游戏,满血的初始值好像是5000,满魔的初始值好像是3600,两个类型都是2字节整数,先找具体值,然后再找减少应该结果会更少吧……


                            14楼2011-12-16 18:34
                            回复

                              如图我找到了魔法值的地址,但是有3个地址,我只要锁定我选中的这个地址为3600就实现了魔法无限,是不是我只要保存这个地址就行了


                              IP属地:浙江15楼2011-12-16 18:43
                              回复