Bon ,j'ai toujours pas de réponse de cdvdmania...
En revanche j'ai parcouru le code source de pcsx2, et dans le fichier cdvd.c il y a des trucs interessant sur secrman :
Code:
case 0x8F: // secrman: __mechacon_auth_0x8F
SetResultSize(1);//in:0
if (cdvd.mg_datatype == 1){// header data
u64* psrc, *pdst;
int bit_ofs, i;
if (cdvd.mg_maxsize != cdvd.mg_size) goto fail_pol_cal;
if (cdvd.mg_size < 0x20) goto fail_pol_cal;
if (cdvd.mg_size != *(u16*)&cdvd.mg_buffer[0x14]) goto fail_pol_cal;
SysPrintf("[MG] ELF_size=0x%X Hdr_size=0x%X unk=0x%X flags=0x%X count=%d zones=",
*(u32*)&cdvd.mg_buffer[0x10], *(u16*)&cdvd.mg_buffer[0x14], *(u16*)&cdvd.mg_buffer[0x16],
*(u16*)&cdvd.mg_buffer[0x18], *(u16*)&cdvd.mg_buffer[0x1A]);
for (i=0; i<8; i++)
if (cdvd.mg_buffer[0x1C] & (1<<i))
SysPrintf("%s ", mg_zones[i]);
SysPrintf("\n");
bit_ofs = mg_BIToffset(cdvd.mg_buffer);
psrc = (u64*)&cdvd.mg_buffer[bit_ofs-0x20];
pdst = (u64*)cdvd.mg_kbit;
pdst[0] = psrc[0]; pdst[1] = psrc[1];//memcpy(cdvd.mg_kbit, &cdvd.mg_buffer[bit_ofs-0x20], 0x10);
pdst = (u64*)cdvd.mg_kcon;
pdst[0] = psrc[2]; pdst[1] = psrc[3];//memcpy(cdvd.mg_kcon, &cdvd.mg_buffer[bit_ofs-0x10], 0x10);
if (cdvd.mg_buffer[bit_ofs+5] || cdvd.mg_buffer[bit_ofs+6] || cdvd.mg_buffer[bit_ofs+7])goto fail_pol_cal;
if (cdvd.mg_buffer[bit_ofs+4] * 16 + bit_ofs + 8 + 16 != *(u16*)&cdvd.mg_buffer[0x14]){
fail_pol_cal:
SysPrintf("[MG] ERROR - Make sure the file is already decrypted!!!\n");
cdvd.Result[0] = 0x80;
break;
}
}
cdvd.Result[0] = 0; // 0 complete ; 1 busy ; 0x80 error
break;
Cela prouve bien ma théorie du bloc header et du bloc data, et en plus il y a même des flags...
De plus on voit même que notre fameux ID magicgate des fichiers cryptés, et on voit qu'il est composé de 2 partie de 16 octets, la BIT key et la content key.
dans le code a mon avis mg c'est pour MagicGate.
Et je pense que la BIT key a un rapport avec l'argument bit de la fonction de secrman :
Code:
int SecrCardBootHeader(int port, int slot, void *buf, void *bit, int *size);