Sunday, August 18, 2013

为什么3K不能刷神电 & HEN 和 CFW 的分别

简单解释一下为什么6.20 TN-C不需要先刷一次系统而5.03 Kxploit 需要。。。



首先我们来了解一下HEN:

6.20 TN-C 是一个HEN,全名 Homebrew ENabler,中文名“母鸡”。。。哦不 =-=,是自制软件引导器。

大家都知道大部分软件是没有经过签名的,在官方系统无法运行,因为在官方系统运行软件是需要验证Key的。


HEN的用处就是通过一个用户漏洞获得官方系统的底层权限,去除运行软件时必须经过的验证


大家要注意,虽然HEN去除了运行软件的验证,因为没有加入加载ISO的模块,所以只能用ISO LOADER运行游戏。

HEN是存在于缓存中的,没有对F0进行任何更改

所以加载HEN很简单:触发漏洞,然后把HEN文件复制到PSP缓存里面,等内存地址跳转然后加载权限。

不需要先刷一次PATAPON 2,因为6.20 TN-C已经把PATAPON 2 触发的漏洞集合在一起了



CFW则不然。

我们都知道PSP 内置芯片的容量是32MB,是一个闪存类型的记忆体,全名是Nand Flash

Nand Flash里面又分为三大区域:IPL、IDStorage、 MASS Storage

IPL  :启动时验证Flash 0 系统文件完整性,一共有6步,验证通过就正常开机,下面有详细解释。。。
IDStorage  :保存机器信息、序号、地区版本、MAC地址、OpenPSID、Key等等信息都在里面。
MASS Storage  :系统文件数据储存区域

然后MASSstorage又含四个子区域:

flash0 40M     系统区域 存放所有系统文件
flash1 05M     系统区域 存放配置文件及用户自定义
flash2 04M     验证区域 用途不明
flash3 09M     未知区域 用途不明


CFW就是通过PSP验证后,再往F0里面写入CFW的系统文件。

5.03 GEN-C系统写入了12个文件:

Flash0:/kd/galaxy.prx
Flash0:/kd/idcanager.prx
Flash0:/kd/march33.prx
Flash0:/kd/popcorn.prx
Flash0:/kd/pspbtjnf_03g.bin
Flash0:/kd/pspbtknf_03g.bin
Flash0:/kd/pspbtlnf_03g.bin
Flash0:/kd/systemctrl_03g.prx
Flash0:/kd/usbdevice.prx
Flash0:/kd/vshctrl.prx
Flash0:/vsh/module/recovery.prx
Flash0:/vsh/module/satelite.prx

CFW 3.70写入了12个文件:
文件列表如下
Flash0:/kd/galaxy.prx
Flash0:/kd/idcanager.prx
Flash0:/kd/march33.prx
Flash0:/kd/popcorn.prx(
Flash0:/kd/pspbtjnf_03g.bin
Flash0:/kd/pspbtknf_03g.bin
Flash0:/kd/pspbtlnf_03g.bin
Flash0:/kd/systemctrl_03g.prx
Flash0:/kd/usbdevice.prx
Flash0:/kd/vshctrl.prx
Flash0:/kd/cfwenctrl.prx
Flash0:/vsh/module/satelite.prx

由于CFW自制系统文件都在F0里面和系统固件共存,而不是保存在缓存里面,所以没刷自制系统情况下我们直接使用5.03 Kxploit就无法找到上述文件从而加载CFW。

同样,6.35系列也是同一个原理,你可以在没有刷过6. 35 PRO(HEN)的情况下直接加载6.35 PRO(HEN),因为它工作在内存里面
但是不能在没有安装过6.35 Pro-A2(CFW)的情况下直接使用6.35 Fast Recovery(6.35 kxploit)加载到自制系统6.35 Pro-A2,因为6.35 Pro-A2工作在F0里面

下面再讲解下为什么V3主板不能使用神电:

V2主板的PSP启动时,在3秒钟以内会:

第一步:
Read IPL Block(from MS or NAND)
读取记忆棒或是NAND里的IPL模块的数据

第二步:
Decrypt block with kirk
用KIRK解读模块的数据

第三步:
Compare checksum value in header with checksum32 of previous block
比较模块数据的值与原来的标题值是否相同(如果不同,会导致loop forever(无限循环验证,此时PSP无法启动)

如果第三步验证成功,则进入第四步:
Copy block to address indicated in header
将模块数据写入标题指定的内存地址中

第五步:
Entrypoint mark
标出接入点(如果成功标出接入点,则进入下一步,如果不成功,则退回到第一步重新读取IPL模块数据)

第六步:
Go to ipl entrypoint
顺利到达IPL接入点,成功导入IPL,PSP开始加载XMB菜单。


3K的PSP启动时,在第二步和第三步之间加入了两个验证过程:

1.Calculate 32 byte from bytes 0-0X40 of decrpted block
计算位于0-0X40位置的32字节的模块数据

2.Compare wih 32 byte at 0xFE0
将前一步的计算结果与0xFE0位置的数据进行比较(若吻合,则进入下一步,若不吻合则进入死循环(loop forever)

可以看出,正是新增加的这两步验证过程阻挡了神电破解的脚步。

据猜测因该是在计算0-0x40的32字节数据这里出了问题,因为目前似乎没有找到算法,也就无法得知这一步是如何计算的。

总结:

[!]删除F0里面任何一个文件 = 变砖并无法使用神电修复

[!]Sony在PSP 3000的主板里面增加了两层新加密了导致无法正常使用神电

[!]6.20 TN-C / 6.35 PRO(HEN) 只存在于缓存中没有对F0做更改

[!]6.20 TN-C / 6.35 PRO(HEN) 的作用是把破解文件写进缓存里面使用,待机不消失,关机就会自动消失

[!]5.03 GEN-C 5.03 MHU / 6.35 PRO-A2 等CFW对F0写入了十几个新的文件,关机依然存留在F0

[!]5.03 Kxploit / 6.35 Fast Recovery 的作用是激活F0写入的文件以达到重新加载CFW的目的
Posted in  on August 18, 2013 by 萌萌囧囧 |   Edit