ps3用ccapi实现cu金手指代码教程

2014-12-10 09:55:44 k73游戏之家 作者:cmos电路

ps3破解

已经破解过的主机PS3对于玩破解游戏的各位而言,需要使用金手指的玩家们会有很多,而很多玩家为了可以自己制定自己需要的功能便学着自己修改,而最近比较流行的ccapi金手指软件便受到了大家的关注,以下教大家如何用ccapi实现cu金手指代码。

Control Console API(CCAPI)是最近比较流行的金手指软件,最新2.6版本支持cfw4.65和混合系统,不过这个版本的pc端软件,目前还只有其自带的客户端,没内存查看器,不好用。所以,现在还是推荐用2.0的mod版本,支持cfw4.46-4.65(混合系统需要切换为一般系统或者把COBRA关掉),pc端软件可用CCCheat 1.01或者CCAPI Debugger 2.2。

CCCheat1.01可以保存代码方便一点,CCAPI Debugger 2.2调试的时候比较好用。本文在下面的举例说明中,将采用CCCheat 1.01作为pc端软件。

常用软件说明:

CCAPI_v2.00_MOD_446-465:PS3端程序,CCAPI_2.0_MOD版本,支持cfw4.46-4.65(混合系统需要切换为一般系统或者把COBRA关掉)

CCCheat 1.01:PC端程序,支持CCAPI 2.0和2.5版本

CCAPI Debugger 2.2汉化版:PC端程序,支持CCAPI 2.0版本

cu2.3格式金手指代码库: 金手指代码库,包含了904个游戏的金手指(按照ps3游戏id来计算),20140619版本,除了新出的游戏,这个代码库应该是很全了。

先简单说一下CCAPI的使用流程:

PS3已经设置好IP,并通过路由器在局域网跟电脑pc相连。

1. 复制安装pkg程序CCAPI_v2.00_MOD_446-465.pkg文件到u盘,插到ps3上,进入install package files,安装。

2.运行刚安装的CCAPI程序,确定,确定,等待PS3重启。PS3重启之后,过10秒左右,右上角会显示CCAPI已运行标识,此后ps3每次启动都会自动加载CCAPI(若要卸载CCAPI,重新运行下CCAPI程序即可)。

3.用MM或IRIS MANAGER等加载游戏,并运行游戏,在游戏中暂停。

4.在PC端运行CCCheat 1.01或者CCAPI Debugger 2.2,输入PS3的IP地址,点击connect,进行操作修改等等。

5.返回ps3,继续游戏。

目前论坛里对CCAPI软件的使用上,基本都是搜索具体数值,或者通过别人发布的静态地址数据来修改游戏,这样实现的金手指功能很少。其实,目前论坛里发布的静态地址金手指代码,大部分都可以用来修改eboot,这样更方便,起码你不用打开pc。

作为一个内存修改器,CCAPI的优势就在于可以实时读取内存,进行即时修改,完全可以用来修改动态地址数据,实现更多的金手指功能。

现在的问题是,如何找到动态地址的规律?如果只用pc端软件CCCheat或者CCAPI Debugger的搜索功能,那么想找到一个不知道具体数值的动态地址,无异于大海捞针,就算偶尔找到了,换个场景,动态地址就变了,又要重新找,很可能搜索时间远比玩游戏的时间长,费时费力,很不划算。

这种情况下,就需要用到以前整理过的金手指代码了,从cfw3.55过来的玩家,应该都知道cu2.3金手指(可惜它不支持cfw4.xx),它的金手指代码里就有很多动态代码,借助已有的cu金手指代码,我们可以快速的定位动态地址,省去了搜索的时间,提高了效率。以前,我们只能使用一小部分的cu金手指代码,现在,利用CCAPI,所有的cu金手指代码都可以实现了。

对于一行cu金手指代码,其一般可分成3部分,每8个数字为一部分:控制代码 地址 数值。其中,地址和数值都是十六进制的。

下面,本文将通过对cu控制代码的解析,来说明如何用CCAPI实现cu金手指代码。

注:各种控制代码的名称,都是本人自己定义命名的,有可能不太切合,还望见谅。

控制代码01:直写码

CU控制代码00002000开头的,就是直写码。其代码格式如下:

00002000 ssssssss aaaaaaaa

ssssssss是地址,aaaaaaaa是数值,地址和数值都是十六进制的。

直写码的功能,就是把数值aaaaaaaa写入地址ssssssss中,数值类型由要写入的数值大小来决定。例如:

Gold9999999

00002000 00F6D460 0098967F

其中,00F6D460是地址,0098967F是要写入的数值,这就算一组数据。

用CCAPI修改,只要pc端软件添加一个code,数值类型由要写入的数值大小来决定,软件选项有1字节、2字节、4字节和浮点数,当前例子中,数值98967F是3个字节,所以选择type数值类型4字节,输入地址address和对应的数值value就可以了。

代码里数值是十六进制的,而CCCheat 1.01软件需要输入十进制的数值,所以,输入前请先转换进制。可以用计算器(windows附件里自带的)转换进制。

或者,在CCCheat 1.01界面查找部分的Value框中,输入数值,勾选Hex前面的勾选框,就可以进行十进制和十六进制之间的互相转换。

只有直写码的金手指代码,是静态地址金手指代码,可以选择save codes保存,以备下次再用。

不过CCCheat 1.01不会保存数值value,而其他选项都会保存,所以下一次使用load codes载入后,还需要重新填入一次数值。可以在描述命名description中填入需要输入的数值,下一次载入后,照着description输入数值就可以了,省着再去查看代码转换数值了。

另外,CCCheat 1.01软件还有个问题,输入地址和数值时,需要手动输入;或者复制粘贴后删掉最后一个数字,再手动输入刚删掉的数字。

有时候代码不止一组数据,例如:

MaxMoney on Buy

00002000 0076526C 3D207FFF

00002000 00765270 91230564

这时就需要为每一组的数据都添加一个code,上例中就添加两个code,数值类型4字节,分别输入对应的地址和数值。

只有直写码的金手指代码,大部分都可以用来修改eboot(其他控制代码的,都不能用来修改eboot),需要地址-10000(十六进制)。还有一小部分的直写码金手指,其地址-10000后仍然超出了eboot的地址范围,这些就不能用于修改eboot,只能用CCAPI来改。

注意:一个地址存储一个字节,十六进制数值,FF一个字节,FFFF两个字节,FFFFFFFF四个字节。数值类型一定要选对,没选对就会出错。例如:

假设所有地址初始数值都是00,要在地址10存储2字节数值A13F,地址栏填写10,选择数值类型2字节,数值栏填写A13F,存储完毕后,地址10存储了字节A1,地址11存储了字节3F。

如果选错,数值类型选了4字节,那么存储完毕后,地址10字节00,地址11字节00,地址12字节A1,地址13字节3F,数值输入错误了。

如果选错,数值类型选了1字节,那么存储完毕后,地址10字节3F,其他地址字节没变,数值的高位字节A1就被软件自动舍弃,数值输入错误了。

控制代码02:锁定赋值码

CU控制代码00001000开头的,或者是控制代码00000000开头的,就是锁定赋值码。其代码格式如下:

00001000 ssssssss aaaaaaaa

或者

00000000 ssssssss aaaaaaaa

ssssssss是地址,aaaaaaaa是数值,地址和数值都是十六进制的。

锁定赋值码的功能,就是把数值aaaaaaaa写入地址ssssssss中,并锁定数值,数值类型由要写入的数值大小来决定。例如:

InfiniteHealth (Veronica)

00001000 00BDEA9E 000000C8

就是把1字节数值C8(十进制是200),写入地址BDEA9E,并锁定。例子这个代码在游戏里的实际作用,就是锁定血条。

要用CCAPI实现这个金手指代码,只需要添加一个code,输入地址和对应的数值,并勾选上frozen锁定框。

3 小时前 上传

下载附件(8.47 KB)

锁定赋值码,还有些是控制代码00000000开头的,例如:

Unit1

00000000 1A34F8B2 0000001E

00000000 1A34F8B3 00000009

同上面一样,只要为每一组的数据都添加一个code,分别输入对应的地址和数值,选好对应的数值类型,再勾选上frozen锁定框就可以了。

只有锁定赋值码的金手指代码,也是静态地址金手指代码,可以选择save codes保存,以备下次再用。

控制代码03:加法压缩码

CU控制代码00004200开头的(或者控制代码00004100和00004000开头的)一行代码,加上00004nnn开头的一行代码,两行代码一起构成了一个加法压缩码。其代码格式如下:

00004200 ssssssss aaaaaaaa

00004nnn xxxxxxxx yyyyyyyy

或者

00004100 ssssssss aaaaaaaa

00004nnn xxxxxxxx yyyyyyyy

或者

00004000 ssssssss aaaaaaaa

00004nnn xxxxxxxx yyyyyyyy

其中,ssssssss是起始地址,aaaaaaaa是起始数值,nnn是未压缩代码行数,xxxxxxxx是地址间距,yyyyyyyy是数值间距,都是十六进制的。

加法压缩码的功能,就是将多行直写码,压缩成两行,未压缩的地址和对应数值可表示如下:

ssssssss :aaaaaaaa

ssssssss+xxxxxxxx :aaaaaaaa+yyyyyyyy

......

ssssssss+(nnn -1)xxxxxxxx :aaaaaaaa+(nnn -1)yyyyyyyy

总共nnn组数据(地址:数值),数值类型由要写入的数值大小来决定。

在cu代码里,数值间距yyyyyyyy基本上都是0,还没见过是其他数值的代码。另外,再强调下,金手指代码里nnn等数据都是十六进制的,若nnn为010,则共有16组未压缩数据,而非10组数据。

下面举个例子:

QuickFinish Quest

00004200 3345B8CF 000000FF

00004007 0000004C 00000000

起始地址3345B8CF,起始数值FF(十进制为255)是1个字节(数值类型选择1字节),未压缩代码行数为7行,地址间距4C,数值间距为0。所以,未压缩的地址和对应数值可表示如下:

3345B8CF :FF

3345B91B :FF

3345B967 :FF

3345B9B3 :FF

3345B9FF :FF

3345BA4B :FF

3345BA97 :FF

共7组数据,要用CCAPI实现这个金手指代码,就需要为每一组的数据都添加一个code,分别输入对应的地址和数值就可以了。

加法压缩码,还有些是控制代码00004100和00004000开头的,区别就在于00004200开头的只写入一次,而00004100和00004000开头的保持锁定。例如:

MaxStats Aoto

00004100 015E5C82 0000FFFF

00004004 00000004 00000000

起始地址15E5C82,起始数值FFFF(十进制为65535)是2个字节(数值类型选择2字节),未压缩代码行数为4行,地址间距4,数值间距为0。

和上面一样,算出未压缩的地址,用CCAPI为每一组的数据添加一个code,分别输入对应的地址和数值,并保持锁定就可以了。

有时候一个金手指代码里不止一个加法压缩码,例如:

AllCharacters HP 999/999

00004000 012D366C 000003E7

00004007 0000018C 00000000

00004000 012D3678 000003E7

00004007 0000018C 00000000

00004000 012D3694 000003E7

00004007 0000018C 00000000

有3个加法压缩码,每一个有7组未压缩数据,总共21组数据,CCAPI要实现这个金手指代码,就需要把这些数据全部输入。以前cfw3.55能用cu2.3的时候,这个步骤是软件自动计算输入的,现在就只能自己手动输入了,略显麻烦。不过加法压缩码一般是用在物品装备或者解锁人物之类的代码上,基本上只需要输入一次,还算可以接受吧。上面这个例子的数据稍微有点多,这里就不列举具体数值了。

另外,只有加法压缩码的金手指代码,也是静态地址金手指代码,可以选择save codes保存,以备下次再用。

控制代码04:指针寻址码

CU控制代码00003000开头的,就是指针寻址码。其代码格式如下:

00003000 ssssssss yyyyyyyy

其中,ssssssss是指针地址,yyyyyyyy是数值间距,指针寻址码数值类型都是4字节。

指针地址ssssssss储存的数值+数值间距yyyyyyyy=动态地址数值。

指针寻址码的功能,就是计算出动态地址数值,将此动态地址数值作为下一行代码的地址。

指针地址ssssssss储存的数值(数值类型是4字节),是ps3游戏程序自行生成的,而且不固定,一般读档后就变,有些动画和转换场景之后,也会改变。

指针寻址码一般和一个直写码或者锁定赋值码构成一组数据。例如:

(WitchPower) 9999999

00003000 0115AD94 00000048

00002000 00000000 0098967F

指针寻址码来确定地址,初始指针地址0115AD94所储存的数值(数值类型为4字节)+数值间距00000048=地址数值。

直写码写入数值,00000000表示上一行代码计算得出的地址数值作为此行代码的实际地址,0098967F是需要修改的数值,要填入实际地址中。

用CCAPI来实现代码,首先需要查看初始指针地址0115AD94所储存的数值(数值类型为4字节)。直接添加new code(此code可保留,用于实时查看地址变动),地址栏输入这个地址0115AD94,数值类型选4字节,显示出来储存的数值目前为361353232。

361353232转换成十六进制,数值为1589D010,这样地址数值=1589D010+00000048=1589D058。

添加金手指new code,刚算出来的地址数值1589D058作为实际地址,输入修改数值0098967F(CCCheat 1.01填入的是十进制9999999),98967F是3个字节,所以数值类型选4字节,这时金手指就起作用了。

有时候指针寻址码不止一行,这就包含了多重指针。例如:

PlayerMP Maximum 1000

00003000 01B4EF9C 00000008

00003000 00000000 00000020

00002000 00000000 000003E8

第一行指针寻址码,假设初始指针地址01B4EF9C所储存的数值为a(转换为十六进制,数值类型为4字节),则a+00000008=地址数值b。

第二行指针寻址码,地址00000000表示上一行代码计算得出的地址数值b作为此行代码的指针地址,地址b所储存的数值为c(转换为十六进制,数值类型为4字节),则c+00000020=地址数值d。

第三行直写码,00000000表示上一行代码计算得出的地址数值d作为此行代码的实际地址,000003E8(十进制为1000)是需要修改的数值,要填入实际地址d中,这里3E8是1.5个字节,所以数值类型选择2个字节。

更多行的指针寻址码以此类推。

包含指针寻址码的金手指代码,都是动态地址金手指代码,因为实际地址是变化的,具体应用的时候,还是需要查看金手指代码来计算动态地址,所以没必要用软件保存codes,最多保存下初始指针地址,用于实时查看下地址变动。

控制代码05:键位条件码

CU控制代码0000Cnnn开头的,就是键位条件码。其代码格式如下:

0000Cnnn 00000000 aaaaaaaa

其中,nnn是键位条件码控制的代码行数,00000000是当前手柄键位数值,aaaaaaaa是条件数值。

键位条件码的功能,就是只有当满足给定的条件“当前手柄键位数值等于条件数值aaaaaaaa”时(手柄按下对应按键后),那么执行一次键位条件码下面的nnn行代码。例如:

Grenade999 (Press Select)

0000C001 00000000 00010000

00002000 1090EDE8 000007FF

条件数值00010000对应手柄按键Select,就是当按下Select键时,CU金手指程序执行一次键位条件码下面的1行代码,例子的金手指代码效果就是直写码赋值,只是多了一行键位条件码控制。

键位条件码对我们来说没什么用,用CCAPI来实现的,就在需要修改的时候,忽略这一行的键位条件码,直接实现后面代码的效果。

控制代码06:数值复制码

CU控制代码00005000开头的(或者控制代码00005100开头的)一行代码,加上00005000开头的一行代码,两行代码一起构成了一个数值复制码。其代码格式如下:

00005000 rrrrrrrr wwwwwwww对应数值类型4字节

00005000 00000001 00000000

或者

00005100 rrrrrrrr wwwwwwww对应数值类型2字节

00005000 00000001 00000000

其中,rrrrrrrr是读取地址,wwwwwwww是写入地址,第二行00000001表示读取数值,00000000表示写入数值。

数值复制码的功能就是把读取地址rrrrrrrr储存的数值复制到写入地址wwwwwwww中。

00005100和00005000的区别就在于数值类型不同,00005000开头的代码复制4字节数值,00005100开头的代码复制2字节数值。例如:

NinjaMagic Max

0000C002 00000000 00000030

00005000 0171F630 0171F634

00005000 00000001 00000000

第一行是键位条件码,忽略。第二行和第三行就是数值复制码,00005000对应数值类型4字节,其作用就是把读取地址0171F630储存的4字节数值复制到写入地址0171F634中。

用CCAPI来实现,先添加一个code,地址填0171F630,数值类型选4 bytes,可以看见其储存的数值为十进制数1128792064;再添加一个code,地址填0171F634,数值类型选4 bytes,复制读取地址0171F630储存的数值1128792064,填入value中,这样,金手指就生效了。

再看一个例子:

HPMax

00005100 1028C7E4 1028C7B4

00005000 00000001 00000000

00005100 1028C7E4 1028C7E6

00005000 00000001 00000000

总共两个数值复制码,00005100对应数值类型2字节,其作用就是把读取地址1028C7E4储存的2字节数值复制到写入地址1028C7B4和1028C7E6中。

用CCAPI,就是填入读取和写入地址,选好数值类型,把value中的数值复制一下就可以了。

只有数值复制码的金手指代码,也是静态地址金手指代码,可以选择save codes保存,以备下次再用。

控制代码07:暂存码

CU控制代码00003003和00003006开头的,或者00003002和00003005开头的,或者00003001和00003004开头的,就是暂存码。其代码格式如下:

00003003 00000000 0000000 对应数值类型4字节

00003002 00000000 0000000 对应数值类型2字节

00003001 00000000 0000000 对应数值类型1字节

功能是读取当前地址(源地址),将其储存的数值写入暂存;

00003006 00000000 0000000 对应数值类型4字节

00003005 00000000 0000000 对应数值类型2字节

00003004 00000000 0000000 对应数值类型1字节

功能是读取暂存,将暂存中的数值写入当前地址(目标地址)。

暂存码总是成对出现,00003003和00003006匹配,00003002和00003005匹配,00003001和00003004匹配。

暂存码一般与键位条件码及指针寻址码配合使用,每一对就完成一次两个不同地址之间的数值复制。

暂存码和数值复制码的区别,就在于地址类型不同,数值复制码用于静态地址,暂存码用于动态地址。例如:

(PressL1) To P1 Infinite Health

0000C006 00000000 00000004

00003000 32A8F1B0 00000CF0

00003000 00000000 00000224

00003003 00000000 00000000

00003000 32A8F1B0 00000CF0

00003000 00000000 00000220

00003006 00000000 00000000

第一行键位条件码控制,就是当按下L1键时,CU金手指程序执行一次下面的6行代码。对我们来说没用,忽略。

第二行,指针寻址码,初始指针地址32A8F1B0当前储存的数值为868244224(十六进制为33C05B00),则地址数值=33C05B00+00000CF0=33C067F0。

第三行,指针寻址码,地址00000000表示上一行的计算结果地址数值33C067F0作为本行指针地址,地址33C067F0当前储存的数值为868242032(十六进制为33C05270),则地址数值=33C05270+00000224=33C05494。

第四行,暂存码00003003,对应数值类型4字节,读取当前地址(源地址),将其储存的4字节数值写入暂存,地址00000000表示上一行的计算结果地址数值33C05494作为本行当前地址,源地址33C05494当前储存的4字节数值为十进制数30000,则暂存中的4字节数值变为十进制数30000。

第五行,指针寻址码,由于当前例子的第五行和第二行是一样的,则地址数值=33C067F0。

第六行,指针寻址码,地址00000000表示上一行的计算结果地址数值33C067F0作为本行指针地址,地址33C067F0当前储存的数值为868242032(十六进制为33C05270),则地址数值=33C05270+00000220=33C05490。

第七行,暂存码00003006,对应数值类型4字节,读取暂存,将暂存中的4字节数值写入当前地址(目标地址),在第四行中暂存中的4字节数值已经变为了十进制数30000,地址00000000表示上一行的计算结果地址数值33C05490作为本行当前地址,则目标地址33C05490储存的4字节数值变为十进制数30000。

此例子实质上就是通过暂存作为中转,复制源地址33C05494储存的数值到目标地址33C05490中。此例子在游戏中产生的效果,就是把人物当前生命值变为最大生命值。

用CCAPI来实现,就是找出源地址和目标地址,然后把源地址储存的数值复制到目标地址中。注意不同代码对应的数值类型,上例中00003003和00003006对应的数值类型是4字节,源地址33C05494,目标地址33C05490。

暂存码都是用在动态地址中,因为实际地址是变化的,具体应用的时候,还是需要查看金手指代码来计算动态地址,所以没必要用软件保存codes。

控制代码08:主码

CU代码里名称叫做Master Code的就是主码。例如:

MasterCode

00000100424C4A4D 60389018

以前要用金手指,在usb金手指狗或者金手指光盘软件里,主码必须开启,同一游戏的其他代码作为附属码,才可以使用。但是现在用CCAPI直接改内存,可以直接改附属码,所以主码Master Code对我们来说完全没用,可以忽略。

控制代码09:描述信息码

CU代码里名称叫做Info的就是描述信息码。例如:

Info- [For 01.01]

0000000000000000 00000000

描述信息码Info一般是关于金手指的信息,比如游戏版本、注意事项、按键提示等等,其本身不起任何作用,所以看下就行了。

总结

本文已经全面具体的解析了cu2.3格式的金手指代码,对各个代码的基本信息总结如下表:

代码名称

控制代码

数值类型

地址

直写码

00002000

写入数值决定

静态

锁定赋值码

00001000

写入数值决定

数值锁定

静态

00000000

加法压缩码

00004200和00004nnn

写入数值决定

静态

00004100和00004nnn

写入数值决定

数值锁定

00004000和00004nnn

指针寻址码

00003000

4字节

动态

键位条件码

0000Cnnn

忽略

忽略

数值复制码

00005000和00005000

4字节

静态

00005100和00005000

2字节

暂存码

00003003和00003006

4字节

动态

00003002和00003005

2字节

00003001和00003004

1字节

主码MasterCode

忽略

忽略

忽略

描述信息码info

忽略

忽略

忽略

用CCAPI来实现CU金手指代码的基本流程,就是通过代码,能快速定位地址和得到要修改的数值,选好对应的数值类型,添加codes,金手指就生效了。

纯静态地址的金手指代码,可以用CCCheat 1.01的save codes保存,以备下次再用。而任何包含了动态代码的金手指,都是动态地址的金手指代码,由于实际地址是变动的,没必要用save codes保存。

使用金手指时,请注意游戏版本匹配,并及时存档。尤其对动态地址的金手指代码,请慎用锁定。当读档、动画或场景变动时,动态地址会改变,如果此时锁定,有可能会造成ps3死机。除非你相当清楚地址改变的触发时机,否则不推荐锁定动态地址金手指。比如,在打boss的时候,先锁定动态地址金手指,当boss就剩血皮的时候,暂停,在pc端取消锁定,回去打死boss,此时一般是剧情动画,之后游戏程序会重新分配地址,由于刚才取消了锁定,所以不会造成内存地址冲突,也就没了死机的风险。总之,锁定动态地址金手指是有死机风险的,看个人取舍了。

最后,在这里感谢CMP论坛的bungholio整理cu金手指代码,还要感谢一下国内外各大网站论坛的金手指提供者。

玩家评论

相关阅读

手游掌机排行