Connexion

[NEWS]Explication de l'algorithme NPDRM de la PS3 : News - PS3-Infos

[NEWS]Explication de l'algorithme NPDRM de la PS3   

Les news du Hack PS3 postées sur PS3 Infos

[NEWS]Explication de l'algorithme NPDRM de la PS3

Messagepar Attila » Jeu 6 Oct 2011 20:53

imageAprès le "leak" de certaines clés NPDRM (système pour protéger les applications et données téléchargées du PSN), il nous manquait une explication sur comment décrypter les self NPDRM.
Voici qu'une personne nous explique comment décrypter à la fois les applis/jeux gratuits mais également les applis/jeux payants du PSN.

Bien entendu, pour décrypter les jeux payants, vous devez posséder un identifiant sur votre console qui indique que vous avez acheté ce contenu. Il n'est pas moyen ainsi de "cracker" tel quel le NPDRM si vous n'avez pas au moins une console ayant acheté ce contenu.

Pour rappel, une team pirate a diffusé sur internet des versions crackées de ces jeux PSN utilisant des protections NPDRM.

Voici les instructions (très complexes) permettant de décrypter les SELF (EBOOT.BIN) de type NP-DRM :
THIS DOES NOT ALLOW TO OBTAIN 3.60+ keys

On NPDRM self decryption all the security levels of the PS3 are involved: user space (vsh), kernel space(lv2), hypervisor( lv1) and isolated SPU (metldr + appldr)

The process start on vsh.elf...

VSH:

Once the vsh detects that user is trying to start a self, it looks for the appinfo header type. If the type is 8, then the control digest element type 3 (NPD element) is located. From this NPD header the vsh gets the license type (free, local or network license).

If a free content(type 3) is detected then a generic klicense will be use for further steps (go to LV2). That klicensee is already public (see geohot npdrm_omac_key_1).

However if a paid content is to be loaded the vsh loads the act.dat and the rif associated to the content (if local it will locate a file with the same titleid on NPD element, if remote it will download to vsh process memory)

Then the signature is checked (last 0x28 bytes of both RIF and act.dat). The curves used are on vsh.self. It is a 3 element table, having the first curve nulled. The curve index for rif/act is 2. The curve values are negated as in the apploader and has the following structure

struct curve {
uint8_t p[0x14];
uint8_t a[0x14];
uint8_t b[0x14];
uint8_t N[0x14];
uint8_t Gx[0x14];
uint8_t Gy[0x14];
}

If the curve checks then vsh will process the rif:

struct rif {
uint8_t unk1[0x10]; //version, license type and user number
uint8_t titleid[0x30]; //Content ID
uint8 padding[0xC]; //Padding for randomness
uint32_t actDatIndex; //Key index on act.dat between 0x00 and 0x7F
uint8 key[0x10]; //encrypted klicensee
uint64_t unk2; //timestamp??
uint64_t unk3; //Always 0
uint8_t rs[0x28];
};

struct ACTDAT {
uint8_t unk1[0x10]; //Version, User number
uint8_t keyTable[0x800]; //Key Table
......
uint8_t signature[0x28];
}

Using the RIF_KEY it will obtain the actdatIndex:

AES_KEY rifKey;
int result = AES_set_decrypt_key(RIF_KEY, 0x80, &rifKey);
AES_decrypt(&rif->padding, &rif->padding, &rifKey);

And finally having the actDat key index the execution pass to LV2 syscall 471

LV2

Lv2 is accessed using syscall471 which haves the following syntax:

int syscall_471(uint32_t type, char* titleID, void* klicensee, uint8_t* actdat, uint8_t* rif, int32_t licenseType, uint8_t* magicVersion);

The function has different parameters depending if the content is debug, free or paid:

FREE: syscall471(npd.type, &npd.titleID, freeklicensee, NULL, NULL, npd.license, &npd);
PAID: syscall471(npd.type, &npd.titleID, NULL, &actdat.keyTable[rif.actDatIndex*0x10], &rif.key, npd.license, &npd);

The lv2 keeps a memory table with contentID and the associated key.
When it receives a free content (r5 is not null) then copies the titleID and the klicensee to the table. For a paid content the rif.key is converted to the klicensee using:

AES_KEY IDPSKey, ConstKey, ActDatKey;
uint8_t encrConst[0x10];
uint8_t decryptedActDat[0x10];
uint8_t klicensee[0x10];
int result = AES_set_encrypt_key(&IDPSVariation, 0x80, &IDPSKey);
AES_encrypt(&CONSTACTDAT, &encrConst, &IDPSKey);
result = AES_set_decrypt_key(&encrConst,0x80,&ConstKey);
AES_decrypt(actDat,&decryptedActDat,&ConstKey);
result = AES_set_decrypt_key(&decryptedActDat,0x80,&ActDatKey);
AES_decrypt(rif,&klicensee,&ActDatKey);


where CONSTACTDAT is a constant value on lv2, IDPSVaritaion appears to be IDPS (not checked but DRM_Manager_initialize (see graf_chokolo's "bible") to something with the same structure), actdat are the 0x10bytes selected by rif keyIndex, and rif is rif.key (bytes 0x50-0x5f).

Once transformed it is stored on memory table...

I haven't check further steps on vsh nor lv2 so perhaps there are further transformations on the paid case (NOT FOR THE FREE AS I HAVE DECRYPTED THOSE) so we are jumping directly to the appldr

AppLdr

As you can see from graf_chokolo payloads a parameter is passed on spu_args.field60. That parameter is the previously stored klicensee.

However this key must be transformed (again) even for the free case. The transformation is:

uint8_t decryptedKLicensee[0x10]
AES_KEY KLicenseeKey
int result = AES_set_decrypt_key(&KLicenseeDecryptKey,0x80,&KLICENSEEKEY);
AES_decrypt(klicensee,&decryptedKLicensee,&KLicenseeKey);
EY is another key located inside the apploader and klicensee is the parameter.

Then we can finally remove the NPDRM layer using:


AES_KEY key;
uint8_t iv[0x10];
memset(&iv[0],0,0x10);
int result = AES_set_decrypt_key(&KLicenseeDecryptKey,0x80,&key);
AES_cbc_encrypt(self + self->metaoffset + 0x20, self + self->metaoffset + 0x20,0x40,&key,&iv,0);

Once that layer is removed we proceed as normal:
-Decrypt using AESCBC256 with the NPDRM keys to obtain the metadata keys
-Decrypt using AESCTR128 the data sha,hmac,iv keys
-Decrypt the data.

PD: I WILL NOT PROVIDE ANY OF THE KEYS MENTIONED ABOVE


http://www.ps3hax.net/showthread.php?p=259713#post259713Source : http://www.ps3hax.net/showthread.php?p=259713#post259713
Avatar de l’utilisateur
Attila
Administrateur du site
 
Messages: 7572
Inscription: Ven 3 Sep 2010 11:53

Re: [NEWS]Explication de l'algorithme NPDRM de la PS3

Messagepar nenele84 » Ven 7 Oct 2011 05:14

salut et merci,c'est toujours bon d'apprendre mais une traduction aurait ete bien aussi.
nenele84
Petit parleur
 
Messages: 53
Inscription: Dim 26 Sep 2010 07:04

Re: [NEWS]Explication de l'algorithme NPDRM de la PS3

Messagepar tompus » Ven 7 Oct 2011 08:22

@nenele: Tu cherche une traduction Anglais->Français ou "Langage informatique"->"Langage courant" ?
Avatar de l’utilisateur
tompus
Apprenti parleur
 
Messages: 210
Inscription: Lun 20 Sep 2010 13:23

Re: [NEWS]Explication de l'algorithme NPDRM de la PS3

Messagepar Attila » Ven 7 Oct 2011 08:44

une anglais vers français ne te servira pas car pour comprendre son contenu il faut être un pro en informatique, et les pros en informatique comprennent l'anglais
Avatar de l’utilisateur
Attila
Administrateur du site
 
Messages: 7572
Inscription: Ven 3 Sep 2010 11:53

Re: [NEWS]Explication de l'algorithme NPDRM de la PS3

Messagepar nenele84 » Ven 7 Oct 2011 11:22

je n'est jamais pretendu etre un pro,mais sur un site français on traduis les news sinon je vois pas l'interet d'etre inscris sur un site francophone.
nenele84
Petit parleur
 
Messages: 53
Inscription: Dim 26 Sep 2010 07:04

Re: [NEWS]Explication de l'algorithme NPDRM de la PS3

Messagepar Attila » Ven 7 Oct 2011 13:51

en gros ça dit que la ps3 utilise plusieurs fonctions du firmware pour décrypter les fichiers, et dans le cas de contenu payant (par exemple dlc ou jeu du psn complet), la console va utiliser le fichier qui contient la liste de tout le contenu que tu a acheté, va s'en servir pour trouver une clé de décryption, puis décrypte encore d'autres données.

Dans le cas d'un contenu gratuit (comme une mise à jour d'un jeu), le système va utiliser une clé qui a été dévoilé par geohot pour décrypter le contenu.
Avatar de l’utilisateur
Attila
Administrateur du site
 
Messages: 7572
Inscription: Ven 3 Sep 2010 11:53

Re: [NEWS]Explication de l'algorithme NPDRM de la PS3

Messagepar nenele84 » Ven 7 Oct 2011 19:11

merci de ta reponse attila.
nenele84
Petit parleur
 
Messages: 53
Inscription: Dim 26 Sep 2010 07:04


Retourner vers News

 


  • Articles en relation
    Réponses
    Vues
    Dernier message

Qui est en ligne

Utilisateurs parcourant ce forum: Google [Bot] et 18 invités

cron