Archivio di marzo 2008

Hacking Crisis Core: Final Fantasy VII (PSP) – Parte 2

Pubblicato il 31 marzo 2008 alle 04:03 da Brisma

Come dire: “detto, fatto” :asd:
Visto che la tentazione di smontare questo gioco era forte mi sono messo all’opera e ho scritto il dearchiviatore (ottimizzato per la versione USA, ma dovrebbe andare anche per la JAP). L’uso è semplicissimo: estraete l’eseguibile in un nuova cartella e copiateci all’interno anche i file discimg.fse e discimg.pkg che trovate nella cartella PSP_GAME\USRDIR\ dell’ISO di FF7CC, infine avviate l’eseguibile e vi estrarrà tutti i dati del gioco in una nuova cartella data. Come mio solito fare, trovate il download dell’eseguibile al fondo di questo articolo, subito sotto i sorgenti C :P

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
/*
 
Crisis Core: Final Fantasy VII Dearchiviatore 1.0beta
               31/03/2008 - Brisma
 
*/
 
#include <stdio.h>
 
long int offset, dimensione, padding, num_file, num_dummy, i, z = 1;
int buffer[160978944]; // 160978944 è la dimensione del
                       // file più grande (nella versione USA)
char stringa[255];
 
FILE *discimg_fse, *discimg_pkg, *estratto;
 
int main()
  {
  printf("Crisis Core: Final Fantasy VII Dearchiviatore 1.0beta by Brisma\n\n");
  if(!((discimg_fse=fopen("discimg.fse", "rb")) == NULL))
    {
    if(!((discimg_pkg=fopen("discimg.pkg", "rb")) == NULL))
      {
      mkdir("data");
      fseek(discimg_fse, 0, SEEK_END);
      num_file=ftell(discimg_fse) / 12;
      fseek(discimg_fse, 0, SEEK_SET);
      for(i = 1; i <= num_file; i++)
        {
        fread(&amp;offset, 4, 1, discimg_fse);
        fread(&amp;dimensione, 4, 1, discimg_fse);
        fread(&amp;padding, 4, 1, discimg_fse);
        if (dimensione > 0)
          {
          printf("Estrazione file discimg.pkg.%d Offset %X Dimensioni %d byte...", z, offset*2048, dimensione);
          sprintf(stringa, "data\\discimg.pkg.%d", z);
          estratto=fopen(stringa, "wb");
          fseek(discimg_pkg, offset*2048, SEEK_SET);
          fread(&amp;buffer, dimensione, 1, discimg_pkg);
          fwrite(&amp;buffer, dimensione, 1, estratto);
          fclose(estratto);
          printf("[OK]\n");
          z++;
          }
        }
      }
    else printf("Impossibile aprire discimg.pkg\n");
    }
  else printf("Impossibile aprire discimg.fse\n");
  _fcloseall();
  printf("Estratti %d file.\n", z);
  getch();
  return 0;
  }

Download Crisis Core: Final Fantasy VII Dearchiviatore 1.0beta (Eseguibile Win32/Sorgenti C).

Hacking Crisis Core: Final Fantasy VII (PSP) – Parte 1

Pubblicato il 31 marzo 2008 alle 10:03 da Brisma

Beh, chi non conosce questo gioco di questi tempi? Crisis Core è la Killer App per PSP, il prequel perfetto di Final Fantasy VII: finalmente tutta la verità su Zack, Cloud, Aerith e Sephiroth raccontata nei minimi dettagli in un gioco che è indubbiamente un capolavoro. Sebbene la versione PAL non sia ancora uscita (ma l’arrivo dovrebbe esser imminente), SquareEnix non ha ancora annunciato se il titolo verrà localizzato nella lingua nostrana o se rimarrà anche per noi in inglese e quindi mi son detto (sì, state pensando bene)… beh, nel qual caso rimanga in inglese… meglio portarsi avanti con i lavori :asd:

Vediamo subito come si presenta il titolo a livello tecnico. La prima cosa che salterà subito all’occhio è la totale assenza di file e cartelle se non per 2 soli file che contengono il tutto: discimg.pkg e discimg.fse. Il primo file contiene tutti i dati del gioco mentre il secondo è semplicemente la “struttura” con cui accedere al primo. Questo sistema di archiviazione, tra l’altro, non è casuale come può sembrare, infatti la struttura del discimg.fse è molto simile a quella di un altro titolo Squaresoft: Legend of Mana. Ma, vi chiederete voi, come funziona? Il file ha una dimensione pari a 288.276 byte, ed è diviso in 24.023 settori da 12 byte, aventi la seguente struttura:

  • 4 byte: Offset del file all’interno di discimg.pkg (da moltiplicare per 2048 per avere l’indirizzo assoluto, quindi offset*2048).
  • 4 byte: Dimensioni del file da estrarre.
  • 4 byte: Puro, semplice ed inutile padding (00 00 00 00).

Vuolà, tutto qui :D Ora non resta che scrivere un de/archiviatore per questo simpatico formato e proseguire con l’analisi. Stay tuned ;)

Aggiornamento a WordPress 2.5

Pubblicato il 30 marzo 2008 alle 03:03 da Brisma

Anch’io come tanti altri ho provveduto ad effettuare l’aggiornamento di WordPress alla versione 2.5. Devo dire che sono cambiate un paio di cosette (in special modo nella sezione dell’admin), ma tutto sommato non è niente di così “spaesante”. L’unico inconveniente che si è presentato riguardava l’upload di immagini/file che restituiva sempre un generico “HTTP Error”; ho risolto andando a modificare il file “.htaccess” presente nella root della cartella di WP con il seguente codice:

1
2
3
4
5
6
<ifmodule mod_security.c>
<files async-upload.php>
SecFilterEngine Off
SecFilterScanPOST Off
</files>
</ifmodule>

E tutto è tornato a funzionare in modo corretto. Semplice, no :D ?

Hacking Tales of the World: Radiant Mythology (PSP)

Pubblicato il 29 marzo 2008 alle 09:03 da Brisma

Qualche giorno fa ho provato questo simpatico RPG per PSP e, come mia norma fare, ho subito iniziato ad analizzarlo a livello tecnico con ottimi risultati (per il tempo che gli ho dedicato).

Il gioco si presenta con una classica struttura a cartella (quindi niente mega archivi come Final Fantasy Tactics o Crisis Core: Final Fantasy VII), ma presenta tantissimi file. Questi file altro non sono che degli archivi; si presentano quasi tutti con l’estensione .ARC. Così facendo mi sono messo subito al lavoro per capire che tipo di archivio fossero e che tipo di compressione usasse e, con mia fortuna, con ottimi risultati.

La struttura è la seguente:

  • 0×00 – 8 byte: compare la scritta EZBIND, che rappresenta l’header di questi file.
  • 0×08 – 4 byte: indica il numero di file presenti nell’archivio.
  • 0×0C – 4 byte: 40 00 00 00 non ha un significato preciso, ma fa parte dell’header di ogni file.

Ora inizia il bello, per N volte (dove N è il numero di file presenti nell’archivio) si ripeteranno questi 16 byte:

  • 4 byte: offset a cui inizia il nome dell’archivio (terminante per 0×00).
  • 4 byte: dimensioni dell’archivio da estrarre.
  • 4 byte: offset dell’archivio da estrarre.
  • 4 byte: sconosciuti, ma analizzando altri file ho notato che variano al variare della dimensione dei file.

Questa è la struttura di questi file .ARC (che sono presenti anche in altri giochi PSP). Fortunatamente in TOTW gli archivi compressi contenuti nei file .ARC non sono poi così tanto misteriosi come sembra, infatti si tratta di semplicissimi file GZip (come già avvenuto in Final Fantasy VII). Infatti basta rinominare i file con estenzione .gz e potrete estrarne il contenuto bello che decompresso, pronto da esser dumpato e tradotto :P
Inoltre, tramite il semplice GZip potrete ricomprimere i file estratti e reinserirli nell’archivio senza il minimo problema (in quanto la compressione è proprio lei, i file ricompressi non risultano né più piccoli né più grandi degli originali).

Download GZip 1.2.4 (Eseguibile Win32).

Beh, con questo è tutto per ora, anche perché non ho fatto ulteriori test :P

Hello World!

Pubblicato il 29 marzo 2008 alle 02:03 da Brisma

E come ogni tradizione che si rispetti, prima che me ne dimentichi, direi di innaugurare per bene questa funzione comoda comoda per postare i sorgenti dei vari linguaggi di programmazione:

1
2
3
4
5
6
#include <stdio.h>
int main()
  {
  printf("Hello World!");
  return 0;
  }

Carino, no :D ?

E dalle ceneri… la fenice!

Pubblicato il 29 marzo 2008 alle 02:03 da Brisma

No Phoenix, non ce l’ho con te :P
Ho deciso di cancellare il vecchio forum che c’era in quanto era praticamente morto ed inattivo, o come comunemente si dice: non lo cagava nessuno :asd:

In compenso ho deciso di aprire questo blog, il perché è semplice, mi è molto più facile da gestire e si nota molto di meno la carenza di utenti (per non dire la totale assenza :look: ).

Cosa ne farò di questo blog? Beh, sto pensando di utilizzarlo come “magazzino” per tutti i lavoretti che faccio a livello di hacking, un po’ come il diario di bordo. Tra l’altro penso che posterò spesso sorgenti di programmi che scrivo o anche solo semplici funzioni che mi possano tornare utili in futuro, non si sa mai ^^

Beh, con questo è tutto per oggi :P