距离上一次写PSP破解方面的东西已经过了3年了,这是何等的跨度啊~~~好了,前面两篇算是基础的基础,可以说不管你是想开发自己的程序在自制固件上运行,还是打算走开发自制固件的路,那些都是必备的东西,这篇文章主要是给有兴趣的朋友一个引导,想必有些童鞋对当年L大怎么找到游戏的关键密钥从而破解新的游戏EBOOT.BIN有点好奇吧,现在就来揭开这个秘密。
貌似我忘了规矩,首先感谢在我研究期间帮助过我的1位朋友(之所以这样说的确是破解圈没什么人会告诉你怎么继续下去,很多时候都只能靠你自己不厌其烦的去摸索)noname120,他人很好,虽然在寻找key的研究中并没有其太大作用,但是给了其他很多辅助。其次是一直不知道如何联系到L大,所以只能利用他留下来的一些开源资源去研究;好了,接下来是前期回顾:
∵传送门∴
这里是当年L大破解和平行者的记录,我们可以了解一下顺序。
【版权】转帖请著名出处,本人只在私人博客发布,如果有需要转载请尊重他人的劳动成果!
首先说一下逻辑,根据L大所说,opnssmp.bin是解密的关键,他类似一个密保卡,新的游戏会传递自己EBOOT.BIN偏移0xD0位置大小4位的一个flag去opnssmp.bin,然后利用这个密保卡里面给出的一段120位长度的数据去调用sceMesgLed模组(来自mesg_led_02g.prx)中的一个函数,当然这个模块是6.xx的新功能,所以低于6.xx版本的固件就玩不了新游戏,所以L大才需要对自己开发的prometheus固件的修改让广大的游戏爱好者能玩到6.xx版本下的游戏。
开始分析,首先我们先利用L大工具PSPCipher或者jas0nuk写的PRXDecrypter解密opnssmp.bin文件,当然解密这个固件也需要钥,但是这个密钥可以通过逆向memlmd_??g.prx得到,十分容易。但是如何得到解密memlmd_??g.prx呢?这个密钥需要dump内核内存分析,这个超出本文的畴,就不多赘述了。
module_start:
0x00000000: 0x27BDFFF0 '...'' - addiu $sp, $sp, -16
0x00000004: 0xAFBF0004 '....' - sw $ra, 4($sp)
0x00000008: 0xAFB00000 '....' - sw $s0, 0($sp)
0x0000000C: 0x0C000017 '....' - jal SysMemUserForUser_D8DE5C1E
0x00000010: 0x8CB00000 '....' - lw $s0, 0($a1)
0x00000014: 0x14400008 '..@.' - bnez $v0, loc_00000038
0x00000018: 0x8FBF0004 '....' - lw $ra, 4($sp)
; Data ref 0x00000150 ... 0x00000000 0x00000000 0x00000000 0x00000000
0x0000001C: 0x3C020000 '...<' - lui $v0, 0x0
0x00000020: 0x24030012 '...$' - li