热门搜索

查看: 27|回复: 2

《PSCE金手指制作教程一》,新手向

[复制链接]
发表于 2026-3-4 18:02:23 | 显示全部楼层 |阅读模式
接下来是:《PSCE金手指制作教程一》,新手向

一、环境准备:
1、下载PSCE工具,
游客,如果您要查看本帖隐藏内容请回复

2、PS4破解成功,且与电脑使用网线连接到同一局域网。
3、打开Debug Settings->Enable Game Debug Settings打开。
4、Servers Settings->FTP Server与Binloader Server都打开。




二、连接PSCE。
1、网络连接查看PS4的IP地址。
2、PSCE切换中文。
3、发送载荷即payload,如已发送请忽略,请次开机只发送一次即可。
4、右侧输入PS4 IP地址并连接。
5、选择线程eboot.bin。
6、输入项目名称,直接输入游戏名也行,支持中文。
7、输入游戏版本号与你的名字作为金手指制作者。

功能1:无限子弹实现过程,这是最简单的功能了。

1、使用Scanner(内存描述器),右侧点刷新,选择eboot.bin,接下来选择内存块,一般不知道找的地址在哪个内存块,所以都选上。这里有些技巧,选择内存块时,可以像操作xls表格一样,使用Ctrl与Shift进行选中,再点击下方的选中已选,就可以勾上了;清空已选是反选的意思。这里还有一些经验,地址基本不会在7EE这些内存块,所以不选它们。我这里选了1到182块区,搜索会把这些内存dump下来,会占用2-3GB的内存,每个游戏不同,所以要保证电脑有空闲内存。



2、查看游戏子弹数量为6,搜索下面输入6,选择4byte,精确值,然后点击首次扫描。一些经验,整数数值一般选4byte(很大可能,首选),小数一般选float;看不到数值的如血条等一般是float,也有可能是整数;一些游戏为了节省内存,整数数值也有可能是2byte,再少量是1byte;另外很多情况要用未知初始值搜索,一般也选4byte,数值变大变小都可以用4byte来搜,使用未知初始值也首选4byte。


3、开一枪,子弹变成5了,输入5,点下次扫描,反复这个过程,直到扫描结果变得很少。


4、扫描结果足够少后,就可以添加到cheat列表进行再一步确认。这里可以右键添加,或双击添加。


5、可以修改数值,与锁定数值,进行开枪测试,最终确定中间这条地址,即是我们需要的。但很多游戏这些地址是动态的,每次重进游戏或新的游戏,这些地址都会变,所以不能通过它来做金手指。这里也有一些经验,一些游戏在修改了数值后,并不会马上看到变化,需要操作游戏让它重新变化才能看到效果,一些地址可以利用锁定来确认。


6、真正制作金手指的,需要定位到代码来修改,比如Cheat Engine找出什么地方修改了本地址、找出什么地方访问了本地址。主机上一般叫内存断点、内存监视,即WatchPoint。接下来切换到PSCE的Debugger选项卡,打开调试器,在cheat地址右键添加到观察点,也可以手动复制地址过去。断点类型需要着重说一下,WRONLY:即仅写入(相当于Cheat Engine找出什么地方修改了本地址),RDWR:即读写(Cheat Engine找出什么地方访问了本地址),一般使用WRONLY。长度都使用LEN_1。接下来是打开使能ON。


7、游戏内让我们断点的内存产生变化,即子弹产生变化,开一枪即可。开枪后发现游戏暂停了,暂停在执行修改子弹内存的地方,PSCE标记的是RIP寄存器所在的地址,实际代码地址是82017969,代码指令为dec dword ptr [rbx + 0x94]。这条指令是什么意思呢,大家可以借用AI询问,实际就是让[rbx + 0x94]所在的内存,每次都减1,而[rbx + 0x94]的地址刚好就是我们断点的地址了。右侧的继续:表示继续等下一个断点,复位:表示关闭OFF本断点,但是功能我还没做,所以需要手动使能先切换为OFF;单步:表示单步走代码。我们这里手动切换为OFF,并点复位,让游戏恢复。


8、要做无限子弹,只要让这条指令无效即可,最简单的我们可以使用空指令NOP替换即可,在指令dec dword ptr [rbx + 0x94]处右键,选直接修改。输入功能名称如无限子弹。



9、因为是直接修改,我默认做的功能就是NOP替换,所以这里只需要输入描述功能(也可以不写描述),点击保存即可。


10、切换到Project Info选项卡,可以看到刚才保存的功能显示到这里了,点击开关切换成ON状态,可以看到游戏内可以实现无限子弹功能了。


11、支持直接导出为json金手指,默认勾选Auto 0x400000,大部分游戏需要勾选。导出的json传到PS4,可以发现无限子弹功能同样实现了。到了这里首个功能完成。



功能2:十倍分数实现过程,这个需要动到代码了,难度比上个功能要难些了,需要用到代码注入。

1、分数搜索内存地址就不细写了,数值大的往往更好搜索,直接4byte精确值搜索,很快就可以搜到地址,添加到WatchPoint内存观察点,开枪打敌人产生断点如下。


2、可以看出,地址在82036BE8,实际代码为add dword ptr [rbx + 0xE0], r14d。代码不懂的还是问AI啊,意思就是把r14d的值加入到[rbx + 0xE0]这个内存地址,增加的分数值就是r14d的值。需要多倍效果,只要使r14d的值变成多倍即可。这里右键->代码注入,来写功能。


3、代码注入功能,按我的理解描述一下,就是在某句代码换成跳转语句,跳转到另外一段内存执行功能,执行完成后再跳转回来。流程图我画了一下,如下:


4、十倍效果实现,实际就是在写入前,让r14d乘以10即可,实际代码为imul r14d,0x0a。0x0a是十六进制,换成十进制就是10的意思,需要其它倍数都可以修改。


5、保存后测试功能,发现10增加效果实现了,但是被扣分时,也是10倍的扣,所以要做判断。断点发现,在敌人打时,r14d的值是负数,也就是扣分,这里做一个r14d是否小于0的判断即可,如果小于0,直接返回,不给扣分,这很可以。因为是增加了代码,所以cave代码地址这里删除原来的地址,让它变空白,变成自动分配地址,这里要注意。修改后测试功能都正常了。



功能3:无限生命实现过程,难度就更高点了,需要判断敌多双方,因为是共用代码。

1、生命值的扫描,具体就不写了,写一下思路,因为被打6次,就会重来。按理说应该是6,5,4,3这样变化的,所以搜4byte,精确值搜索,但是搜不到。最后通过4byte未知初始值搜出来的,实际它也是6,5,4,3这样变化,但它是float浮点数,所以这里用float精确值搜索也可以搜出来的。


2、搜到内存后,添加WatchPoint断点,让敌人打一次,游戏暂停产生断点。可以看出真正修改的地址为81F38E19,指令为vmovss dword ptr [rbx + 0x3C], xmm0,指令意思为浮点数赋值。在这里的意思,是扣血后的值,再写回血量的地址。按理说让本条指令无效,换成空指令NOP即可,说干就干(这步要做,后面会用到),直接右键进行直接修改,保存后测试,我是无限血量了,敌人也是无限血量了。说明这是敌我伤害共用代码,需要判断出敌我双方才行。


3、判断敌我双方的方法,大家可以参考一下Cheat Engine的教程,B站也有。我理解的有2种,一种是通过寄存器判断,找出寄存器差异进行判断;一种是内存判断,找出敌我血量所在内存片段差异进行判断。我这里用内存判断,在vmovss dword ptr [rbx + 0x3C], xmm0这条语句右键添加到断点,或是手动复制地址过去断点,这里的断点是代码地址断点,每次程序跑到这里会产生断点。


4、前面搞的敌多双方都无敌了,就是为了在这里,找出敌人的血量。这里的BreakPoint设置到ON,然后快速打一枪敌人,产生断点。就可以计算出敌人的血量地址了。打开计算器,切换为程序员,切换为HEX,地址就是[rbx + 0x3C],找出RBX的值,再+3C,就是敌人的血量地址了,在cheat列表手动添加这个地址。用同样方法,找出另一个敌人的血量(如果没有2个敌人,1个也可以)。这里需要注意,如果是敌人打你,也会产生断点,并非我们需要的,这里需要先关闭断点,再点右测的继续或复位,让游戏恢复。


5、找出敌人的地址后,需要使用到内存比较工具。添加敌我双方的地址,点击隐藏相等,我们发现,在0x50偏移处,可以辨别敌我双方,当然其它偏移也可以。


6、找出区分敌我的方法后,就可以修改了,思路就是判断0x50处是0还是非0,如果是0,说明是敌人,继续执行扣血代码,如果是非0,说明是主角,直接返回不执行扣血。因为前面拿地址是[rbx + 0x3C],这里再加上0x50的偏移,所以判断代码就改为[rbx + 0x8C],如下图。

cmp dword ptr [rbx + 0x8c], 0
jne backAdderss
vmovss dword ptr [rbx + 0x3C], xmm0
jmp backAdderss

[color=rgb(51, 102, 153) !important]复制代码
7、保存。先关闭前面敌我双方都无敌的功能,再把它删除掉。再打开本次功能进行测试,发现功能正常了。

功能4:一击秒杀实现过程,其实和前面无限血量差不多。

1、上面代码上方一点实现即可,同样需要判断敌我双方,直接使用上面的方法cmp dword ptr [rbx + 0x8c], 0判断就行。思路是,往上看2行代码,发现语句,vmovss xmm0, dword ptr [rbx + 0x3C],把血量值读出到xmm0,vsubss xmm0, xmm0, xmm1后面这句是扣血,xmm1是扣多少血量。本功能做在vmovss xmm0, dword ptr [rbx + 0x3C]上,简单的就是不要读了,直接让xmm0变为0即可,直接血量写0。后面直接上图了。

cmp dword ptr [rbx + 0x8c], 0
jne Label_User
pxor xmm0, xmm0
jmp backAdderss
Label_User:
vmovss xmm0, dword ptr [rbx + 0x3C]
jmp backAdderss


[color=rgb(51, 102, 153) !important]复制代码
2、这里用到了label,用于为后面的代码做一个指引,一般用于跳转。解释一下上面的代码,判断cmp dword ptr [rbx + 0x8c], 0,如果是非0,跳转到Label_User后面执行,即取主角的血量。如果是0,说明是敌人,pxor xmm0, xmm0是让xmm0达到清0效果,接着直接返回。

到这里,教程就先结束了。没发过这么长的贴子undefined。

忘了说了,代码注入至少需要5字节的内存,如果一行少于5字节长度,可以选多行,在跳转后注意处理前面跳转丢失的代码。
[/hide]
2、PS4破解成功,且与电脑使用网线连接到同一局域网。
3、打开Debug Settings->Enable Game Debug Settings打开。
4、Servers Settings->FTP Server与Binloader Server都打开。




二、连接PSCE。
1、网络连接查看PS4的IP地址。
2、PSCE切换中文。
3、发送载荷即payload,如已发送请忽略,请次开机只发送一次即可。
4、右侧输入PS4 IP地址并连接。
5、选择线程eboot.bin。
6、输入项目名称,直接输入游戏名也行,支持中文。
7、输入游戏版本号与你的名字作为金手指制作者。

功能1:无限子弹实现过程,这是最简单的功能了。

1、使用Scanner(内存描述器),右侧点刷新,选择eboot.bin,接下来选择内存块,一般不知道找的地址在哪个内存块,所以都选上。这里有些技巧,选择内存块时,可以像操作xls表格一样,使用Ctrl与Shift进行选中,再点击下方的选中已选,就可以勾上了;清空已选是反选的意思。这里还有一些经验,地址基本不会在7EE这些内存块,所以不选它们。我这里选了1到182块区,搜索会把这些内存dump下来,会占用2-3GB的内存,每个游戏不同,所以要保证电脑有空闲内存。



2、查看游戏子弹数量为6,搜索下面输入6,选择4byte,精确值,然后点击首次扫描。一些经验,整数数值一般选4byte(很大可能,首选),小数一般选float;看不到数值的如血条等一般是float,也有可能是整数;一些游戏为了节省内存,整数数值也有可能是2byte,再少量是1byte;另外很多情况要用未知初始值搜索,一般也选4byte,数值变大变小都可以用4byte来搜,使用未知初始值也首选4byte。


3、开一枪,子弹变成5了,输入5,点下次扫描,反复这个过程,直到扫描结果变得很少。


4、扫描结果足够少后,就可以添加到cheat列表进行再一步确认。这里可以右键添加,或双击添加。


5、可以修改数值,与锁定数值,进行开枪测试,最终确定中间这条地址,即是我们需要的。但很多游戏这些地址是动态的,每次重进游戏或新的游戏,这些地址都会变,所以不能通过它来做金手指。这里也有一些经验,一些游戏在修改了数值后,并不会马上看到变化,需要操作游戏让它重新变化才能看到效果,一些地址可以利用锁定来确认。


6、真正制作金手指的,需要定位到代码来修改,比如Cheat Engine找出什么地方修改了本地址、找出什么地方访问了本地址。主机上一般叫内存断点、内存监视,即WatchPoint。接下来切换到PSCE的Debugger选项卡,打开调试器,在cheat地址右键添加到观察点,也可以手动复制地址过去。断点类型需要着重说一下,WRONLY:即仅写入(相当于Cheat Engine找出什么地方修改了本地址),RDWR:即读写(Cheat Engine找出什么地方访问了本地址),一般使用WRONLY。长度都使用LEN_1。接下来是打开使能ON。


7、游戏内让我们断点的内存产生变化,即子弹产生变化,开一枪即可。开枪后发现游戏暂停了,暂停在执行修改子弹内存的地方,PSCE标记的是RIP寄存器所在的地址,实际代码地址是82017969,代码指令为dec dword ptr [rbx + 0x94]。这条指令是什么意思呢,大家可以借用AI询问,实际就是让[rbx + 0x94]所在的内存,每次都减1,而[rbx + 0x94]的地址刚好就是我们断点的地址了。右侧的继续:表示继续等下一个断点,复位:表示关闭OFF本断点,但是功能我还没做,所以需要手动使能先切换为OFF;单步:表示单步走代码我们这里手动切换为OFF,并点复位,让游戏恢复


8、要做无限子弹,只要让这条指令无效即可,最简单的我们可以使用空指令NOP替换即可,在指令dec dword ptr [rbx + 0x94]处右键,选直接修改。输入功能名称如无限子弹。



9、因为是直接修改,我默认做的功能就是NOP替换,所以这里只需要输入描述功能(也可以不写描述),点击保存即可。


10、切换到Project Info选项卡,可以看到刚才保存的功能显示到这里了,点击开关切换成ON状态,可以看到游戏内可以实现无限子弹功能了。


11、支持直接导出为json金手指,默认勾选Auto 0x400000,大部分游戏需要勾选。导出的json传到PS4,可以发现无限子弹功能同样实现了。到了这里首个功能完成。



功能2:十倍分数实现过程,这个需要动到代码了,难度比上个功能要难些了,需要用到代码注入。

1、分数搜索内存地址就不细写了,数值大的往往更好搜索,直接4byte精确值搜索,很快就可以搜到地址,添加到WatchPoint内存观察点,开枪打敌人产生断点如下。


2、可以看出,地址在82036BE8,实际代码为add dword ptr [rbx + 0xE0], r14d。代码不懂的还是问AI啊,意思就是把r14d的值加入到[rbx + 0xE0]这个内存地址,增加的分数值就是r14d的值。需要多倍效果,只要使r14d的值变成多倍即可。这里右键->代码注入,来写功能。


3、代码注入功能,按我的理解描述一下,就是在某句代码换成跳转语句,跳转到另外一段内存执行功能,执行完成后再跳转回来。流程图我画了一下,如下:


4、十倍效果实现,实际就是在写入前,让r14d乘以10即可,实际代码为imul r14d,0x0a。0x0a是十六进制,换成十进制就是10的意思,需要其它倍数都可以修改。


5、保存后测试功能,发现10增加效果实现了,但是被扣分时,也是10倍的扣,所以要做判断。断点发现,在敌人打时,r14d的值是负数,也就是扣分,这里做一个r14d是否小于0的判断即可,如果小于0,直接返回,不给扣分,这很可以。因为是增加了代码,所以cave代码地址这里删除原来的地址,让它变空白,变成自动分配地址,这里要注意。修改后测试功能都正常了。



功能3:无限生命实现过程,难度就更高点了,需要判断敌多双方,因为是共用代码。

1、生命值的扫描,具体就不写了,写一下思路,因为被打6次,就会重来。按理说应该是6,5,4,3这样变化的,所以搜4byte,精确值搜索,但是搜不到。最后通过4byte未知初始值搜出来的,实际它也是6,5,4,3这样变化,但它是float浮点数,所以这里用float精确值搜索也可以搜出来的。


2、搜到内存后,添加WatchPoint断点,让敌人打一次,游戏暂停产生断点。可以看出真正修改的地址为81F38E19,指令为vmovss dword ptr [rbx + 0x3C], xmm0,指令意思为浮点数赋值。在这里的意思,是扣血后的值,再写回血量的地址。按理说让本条指令无效,换成空指令NOP即可,说干就干(这步要做,后面会用到),直接右键进行直接修改,保存后测试,我是无限血量了,敌人也是无限血量了。说明这是敌我伤害共用代码,需要判断出敌我双方才行。


3、判断敌我双方的方法,大家可以参考一下Cheat Engine的教程,B站也有。我理解的有2种,一种是通过寄存器判断,找出寄存器差异进行判断;一种是内存判断,找出敌我血量所在内存片段差异进行判断。我这里用内存判断,在vmovss dword ptr [rbx + 0x3C], xmm0这条语句右键添加到断点,或是手动复制地址过去断点,这里的断点是代码地址断点,每次程序跑到这里会产生断点。


4、前面搞的敌多双方都无敌了,就是为了在这里,找出敌人的血量。这里的BreakPoint设置到ON,然后快速打一枪敌人,产生断点。就可以计算出敌人的血量地址了。打开计算器,切换为程序员,切换为HEX,地址就是[rbx + 0x3C],找出RBX的值,再+3C,就是敌人的血量地址了,在cheat列表手动添加这个地址。用同样方法,找出另一个敌人的血量(如果没有2个敌人,1个也可以)。这里需要注意,如果是敌人打你,也会产生断点,并非我们需要的,这里需要先关闭断点,再点右测的继续或复位,让游戏恢复。


5、找出敌人的地址后,需要使用到内存比较工具。添加敌我双方的地址,点击隐藏相等,我们发现,在0x50偏移处,可以辨别敌我双方,当然其它偏移也可以。


6、找出区分敌我的方法后,就可以修改了,思路就是判断0x50处是0还是非0,如果是0,说明是敌人,继续执行扣血代码,如果是非0,说明是主角,直接返回不执行扣血。因为前面拿地址是[rbx + 0x3C],这里再加上0x50的偏移,所以判断代码就改为[rbx + 0x8C],如下图。

  • cmp dword ptr [rbx + 0x8c], 0
  • jne backAdderss
  • vmovss dword ptr [rbx + 0x3C], xmm0
  • jmp backAdderss

[color=rgb(51, 102, 153) !important]复制代码

7、保存。先关闭前面敌我双方都无敌的功能,再把它删除掉。再打开本次功能进行测试,发现功能正常了。

功能4:一击秒杀实现过程,其实和前面无限血量差不多。

1、上面代码上方一点实现即可,同样需要判断敌我双方,直接使用上面的方法cmp dword ptr [rbx + 0x8c], 0判断就行。思路是,往上看2行代码,发现语句,vmovss xmm0, dword ptr [rbx + 0x3C],把血量值读出到xmm0,vsubss xmm0, xmm0, xmm1后面这句是扣血,xmm1是扣多少血量。本功能做在vmovss xmm0, dword ptr [rbx + 0x3C]上,简单的就是不要读了,直接让xmm0变为0即可,直接血量写0。后面直接上图了。

  • cmp dword ptr [rbx + 0x8c], 0
  • jne Label_User
  • pxor xmm0, xmm0
  • jmp backAdderss
  • Label_User:
  • vmovss xmm0, dword ptr [rbx + 0x3C]
  • jmp backAdderss


[color=rgb(51, 102, 153) !important]复制代码

2、这里用到了label,用于为后面的代码做一个指引,一般用于跳转。解释一下上面的代码,判断cmp dword ptr [rbx + 0x8c], 0,如果是非0,跳转到Label_User后面执行,即取主角的血量。如果是0,说明是敌人,pxor xmm0, xmm0是让xmm0达到清0效果,接着直接返回。

到这里,教程就先结束了。没发过这么长的贴子undefined

忘了说了,代码注入至少需要5字节的内存,如果一行少于5字节长度,可以选多行,在跳转后注意处理前面跳转丢失的代码。


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×

0

主题

4

回帖

10

积分

新手上路

积分
10
发表于 昨天 14:21 | 显示全部楼层
非常感谢你的教程,详细

0

主题

2

回帖

6

积分

新手上路

积分
6
发表于 5 小时前 | 显示全部楼层
谢谢分享
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|品技论坛tekqart

GMT+8, 2026-3-21 06:02 , Processed in 1.109490 second(s), 23 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.