Might as well post a more correct version:
It's part of their "PSPID" generation. The function makes sure that you pass the correct "PSPID" registers (which is actually the FuseID registers which are unique per each PSP) and passes the unique ID back (one half of it, they call the function twice to grab the full ID).
Code:// Pass FuseID Register as addr: 0xBC10009x // FuseID only 6 Bytes but needs to be read // via two word reads at 0xBC100090 and 0xBC100094 u32 uhura_driver_38CF8431(void *addr) { // Ignore least significant nibble (0-3) u32 *mem = (u32)addr & 0xFFFFFFFC; // verify correct register address passed if ((u32)mem - 0xBC100090 > 4) return(0x12345678) // return one half of FuseID return(mem[0]) }
The other function, uhura_driver_AF6F18BA, is identical (though only one of them is actually used).
+0x43EFFF70 is -0xBC100090 in 32bit 2's complement
+0x43EFFF70 is -0xBC100090 in 32bit 2's complement
Are you a machine?... or a god?.... a combination, perhaps?
So do we have the total 100% decompiled eboot then? ... Which can now be 100% fully reversed and thus allow us to sign our own eboots that will work on all known PSP's to date?
Excuse my ignorance, just asking
I do not understand this one letter reply.
So do we have the total 100% decompiled eboot then? ... Which can now be 100% fully reversed and thus allow us to sign our own eboots that will work on all known PSP's to date?
Excuse my ignorance, just asking
You have to decrypt the DATA.PSP in the eboot, so I'm guessing the most we can hope for from reversing it is the ability to write our own code into memory. (This is what I understand from this thread, at least.)
Why do they use the UPDATE folder? Is the signature different there? What exactly must they have found out to encrypt/hash the modules? (See my above post). And why do people keep saying 'sign'? This is nothing like a signature. A signature is basically a hash encrypted with a private key, while the data need not even be encrypted. A signature is UNCRACKABLE short of brute force/leak or exploit in the client side verification process. Under no circumstances can you ever 'sign' your own anything. The PSP was inherently insecure since they just hid the keys (the same keys used by them for encrypting/hashing). It was just security through obscurity, a lot of obscurity.
Why do they use the UPDATE folder? Is the signature different there? What exactly must they have found out to encrypt/hash the modules? (See my above post). And why do people keep saying 'sign'? This is nothing like a signature. A signature is basically a hash encrypted with a private key, while the data need not even be encrypted. A signature is UNCRACKABLE short of brute force/leak or exploit in the client side verification process. Under no circumstances can you ever 'sign' your own anything. The PSP was inherently insecure since they just hid the keys (the same keys used by them for encrypting/hashing). It was just security through obscurity, a lot of obscurity.
Yes, either that (getting own code via "cheatcodes" into mem) or finding an exploit in AR that lets us run own code.You have to decrypt the DATA.PSP in the eboot, so I'm guessing the most we can hope for from reversing it is the ability to write our own code into memory. (This is what I understand from this thread, at least.)
Yes, either that (getting own code via "cheatcodes" into mem) or finding an exploit in AR that lets us run own code.
AR might have more voulnrabilities than current FWs, I'd say....
How do you see that?Yeah, it looks like it was rushed.
How do you see that?
int main(void)
{
char tmpbuf[256];
char lickey[24];
while(1)
{
printf("\nEnter a 18 character string\n");
scanf("%s",tmpbuf);
if(strlen(tmpbuf) >= 18)
{
strncpy(lickey, tmpbuf, 18);
prep_chars(lickey);
gen_key(lickey);
printf("\nLicense Key: %s", lickey);
}
}
return 0;
}
void gen_key(char lickey[])
{
short sum = 0, tmp, x;
for(x = 0; x < 18; x++)
{
tmp = (short)(lickey[x] + sum);
if((tmp & 1) != 0){sum = (short)((tmp / 2) | 0x1000);}
else{sum = (short)(tmp / 2);}
}
sprintf(&lickey[18], "%04X", (sum ^ 0x17D2));
}
void prep_chars(char srcbuf[])
{
int x;
for(x = 0; srcbuf[x]; x++)srcbuf[x] = toupper(srcbuf[x]);
replace_char(srcbuf, 'O', '0');
replace_char(srcbuf, 'I', '1');
replace_char(srcbuf, 'Z', '2');
replace_char(srcbuf, 'S', '5');
replace_char(srcbuf, 'G', '6');
replace_char(srcbuf, 'T', '7');
}
void replace_char(char srcbuf[], char fndchar, char repchar)
{
int x;
for(x = 0; x<18;x++)
{
if(srcbuf[x] == fndchar)
{
srcbuf[x] = repchar;
}else if(srcbuf[x] == 0)break;
}
}
Why do they use the UPDATE folder? Is the signature different there? What exactly must they have found out to encrypt/hash the modules? (See my above post). And why do people keep saying 'sign'? This is nothing like a signature. A signature is basically a hash encrypted with a private key, while the data need not even be encrypted. A signature is UNCRACKABLE short of brute force/leak or exploit in the client side verification process. Under no circumstances can you ever 'sign' your own anything. The PSP was inherently insecure since they just hid the keys (the same keys used by them for encrypting/hashing). It was just security through obscurity, a lot of obscurity.