Revisé el formato del CAS y vi que la estructura era el de NHP que ya había visto antes, pero con el XEX encriptado usando una constante con XOR y no el contador de posición dentro del bloque. Al extraerlo, el archivo quedó corrupto a partir del segundo bloque, es decir, la constante iba cambiando bloque a bloque... esa constante no estaba asociada al número de bloque, tampoco iba incrementando o disminuyendo respecto de la anterior, por lo que tuve que
dentrarle a picar.
Desensamblando el cargador NHP del CAS, observé que hacía doble operacion XOR para desencriptar cada byte: la del contador de posición y la de un contador aparte en página cero. Como ambos contadores incrementaban simultáneamente, un XOR entre ellos entregaba la constante observada... pero el contador de posición no daba la vuelta en 256 como el otro, por lo que en cada bloque se producía una diferencia: la nueva constante.
Para identificar el valor inicial, cargué el CAS en Altirra en modo debug... no tardé en darme cuenta que se trataba del mismo valor que había supuesto originalmente como contante para el primer bloque.
Incorporé ese nuevo contador en mi extractor de XEX para otro NHP de Prisma, le puse el valor inicial y voilá: XEX en disco. Un análisis de la esructura de ese binario me dijo que estaba en lo correcto, sólo que como siempre me sobraban algunos bytes al final (relleno del último bloque), los que pude remover fácilmente con un editor de binarios en el PC (podría haber usado un utilitario mío en el Atari, pero la vuelta era más larga). Sé que debería revisar a fondo el código de NHP para saber dónde cortar los datos del último bloque, pero pareciera que eso siempre está metido en el código del cargador y no en la estructura del XEX, por lo que se me hace más fácil recortar a mano por simple observación de lo extraído.
Como yapa, también extraje la data del ring del segundo CAS. Para ello usé un copiador que hice al vuelo en TurboBASIC XL. Podría haber usado DogCopy o cualquier multicopiador (menos DOS que no soporta C:), pero quería probar en la pasada cómo funcionan las instrucciones BGET y BPUT de esta versión de BASIC (que reemplazaría mi rutina USR
CIO).
Los archivos extraídos son
FightNightCAS.xex y
FightNightRing.dat.
Me queda la duda si tienes los otros 4 CAS con los restantes boxeadores, para recuperarlos también. ¿Estos los hizo Prisma?
Respecto de NHP y los distintos tipos de encriptación, sería interesante saber directamente del Parche si fué él quien hizo todas ellas o si la gente de Prisma le metió mano por su cuenta.