Silver VII escribió:Gracias Calantra, sigo apoyando la idea, hay muchas sugerencias e iddeas que me parecen que ayudarian, como las que mencionas o algun tipo de base de datos que vaya eliminando posibilidades que ya sabemos que son nulas, no se si me explico o si es demasiado complicado.
Te quería pedir un favor, si pudieras explicar un poco el funcionamiento del programa, aunque no lo entendamos la mayoria seguramente tapara algunas bocas, y quizás inspire a alguien y complete el programa, supongo que compararás las keys conocidas o nosé, venga un saludo crack.
Por supuesto que puedo dar una explicación:
tanto los cargadores Apploader,isoloader,lv1loader como lv0 contienen una cabecera embeida conocida como "meta data" que esta cifrada con una llave aescbc256, esta cabecera una vez descifrada a su vez contiene una serie de llaves aes128 que descifran el resto de secciones del fichero. La peculiaridad de esta "metadata" es que al ser descifrada deja unos espacios en blanco "Ceros" reservados para las IV's de las llaves aes128, una vez sabemos esto podemos comprobar la autenticidad de la llave a probar:
{* prueba la llave *}
Procedure tform1.testmeta;
var
tmp : array [0..64-1] of byte;
const
iv : array [1..16] of Byte = (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); // esto es irrelevante solo para el uso con AES
// Estos son los datos de unas cabeceras autenticas , no son mas que eso, números sin sentido por lo que no le vamos a tener miedo al COCO de que nos demande...
{lv0} lv0meta : array [1..16] of LongWord = (2626276755, 2375922298, 3689834797, 1525574696, 1066391909, 4172057485, 1909459759, 4031331336,
986848741, 2255776357, 1816842367, 712672675, 1838089829, 3165343335, 146369270, 3362187819);
{met} metmeta : array [1..16] of longword = (829464153, 790246718, 3100314556, 3133489900, 1308467002, 628843994, 4278123661, 2501507690,
2397652503, 2280974692, 824894977, 3200932179, 3216255001, 335303580, 3672707467, 871184235);
// aqui comprobamos la cabecera sgun el tipo que elegimos //
begin
case sel of
0 : tools.decaes256cbc(@lv0meta,@tmp,@key,@iv,$40);
1 : tools.decaes256cbc(@metmeta,@tmp,@key,@iv,$40);
end;
metaok := true; // por defecto decirmos que es valida siiiiii.....
inc (tested);
{ urolled bucle }
// ... en las posiciones reservadas para las ivs encontramos unos bonitos CEROS
if tmp[16] > 0 then metaok :=false;if tmp[50] > 0 then metaok :=false; // si un solo dato de estos es diferente de 0 la llave es mala //
if tmp[20] > 0 then metaok :=false;if tmp[55] > 0 then metaok :=false;
if tmp[24] > 0 then metaok :=false;if tmp[59] > 0 then metaok :=false;
if tmp[31] > 0 then metaok :=false;if tmp[63] > 0 then metaok :=false;
end;
TACHANN!!!! y eso es lo que hacen los hackers, ver estas cosas y aprovecharse de ellas...
Ahora Sony ya lo puede tapar cuando quiera
Salu2.