Sunday, August 18, 2013

PSP ISO 游戏解密:浅谈 BOOT、EBOOT、OPNSSMP

首先要从PSP 早期的ISO说起。

以前,ISO 文件里面有一个BOOT文件,BOOT文件是计算机中用于标识设备的一种通用文件,用于设备验证当前载入的数据是否为系统可正常识别的数据。
简单形象的说,BOOT就是告诉PSP系统,这个ISO是符合PSP格式的ISO。但是由于Sony在BOOT中留下的后门,使得其成为早期破解的开口。


后来索尼改用EBOOT,封锁了这个后门,所以现在boot只是不含信息的空文件。

EBOOT是当前比较流行的一种加密引导方式,也就是加密过的BOOT文件。

编程人员将必要的确认信息(系统配置,硬件要求,软件要求,软件信息等)写入EBOOT中,通过算法加密生成。设备通过读取eboot从而被引导到数据端。

具体的psp引导确认方法简述如下:

现在,当你进入游戏后,PSP首先会去读取并验证EBOOT,确认ISO符合EBOOT中的要求后才开始读取数据,读取成功后我们就可以玩游戏。
其中一个要求就是,确认系统为官方系统。

PSP GEN 小组破解了EBOOT的加密方式,正常打开了EBOOT文件。并删除了系统确认信息,添加了ELF(Executable and Linking Format)可执行连接格式,这样自制系统把游戏识别为一个自制软件,这样我们就可以直接在GEN系列的自制系统下使用破解软件并玩到ISO游戏。
我们从2009年10月份到现在用到的替换EBOOT方法,玩破解ISO游戏就是基于这个原理。

因为正版UMD的EBOOT没有破解,所以在自制系统环境下确认系统版本不能通过,所以在GEN、PRO、Prometheus等等系统无法使用UMD,需要恢复官方系统才能正常执行。
大家常用的ISO TOOL工具,EBOOT Decrypt一项,就是同样的原理。
由于在正版UMD上不可能破解EBOOT,所以也就无法在自制系统上面直接运行UMD

被攻破EBOOT后,Sony在6.20版本的游戏上面又做了手脚,加入了新的加密方式:动态加密方式。

那么什么是动态加密呢?

首先,用WQSG等软件打开ISO后,在以往存放EBOOT的SYSDIR文件夹你会发现一个名为opnssmp.bin的文件,这个就是动态加密文件。

它是多组密钥的函数库,每当你进入游戏时,首先opnssmp.bin文件会生成一个随机的密钥,并发送给EBOOT。系统通过读取EBOOT中的密码与opnssmp中的密钥进行比对,如果符合,则继续验证EBOOT中的其他信息,通过后就能正常读取游戏数据。

这样子,动态加密就令到我们通常使用的替换和修改EBOOT方法失去了作用。

破解的EBOOT中只删除以往的系统确认信息,但是不含有与opnssmp比对用的密钥,所以游戏就不能正常运行了。

或者,没有加入opnssmp破解的EBOOT,只含有一组密钥,而不可能与第二次进入游戏时的密钥相同(当然有可能相同,相同的概率非常非常低),所以游戏还是不能运行。

简单地说,opnssmp就是一个类似于登录魔兽世界的时候,需要输入的一组动态验证码。

通过Liquidzigong开发的Prometheus补丁,可以有效地破解此种解码方式,使用ISOTOOL集成的ME631补丁,会给游戏加入Prometheus补丁、对应的EBOOT和6.31系统文件,以保证游戏的正常运行。


好了,就写到这里吧。。。反正也很少人会去认真看。。。关于OPNSSMP,部分资料借鉴了CG - lcalmjhyc的帖子。非常感谢。
Posted in  on August 18, 2013 by 萌萌囧囧 |   Edit