Crimson Gem Saga Unpacker

Pubblicato il 16 febbraio 2010 alle 01:02 da Vash

Un altro rapido articoletto.

Tempo fa scrissi questo estrattore per l’archivione di Crimson Gem Saga e già che ci sono perché non piazzarlo qui?

Da notare che in giro per la rete trovai già degli altri programmi per questo archivio ma, non so per quale motivo, sono tutti incompleti. Il sistema di archiviazione è semplice e i file sono compressi con Zlib a chunk per cui basta decomprimere ogni chunk e poi rinuire il tutto nel file unico finale…indi per cui se avete un estrattore che vi fa crea dei file xxx.001 xxx.002 xxx.003 etc sapiate che è errato e che sono semplicemente pezzi di un unico file.

Ad ogni modo, l’utilizzo è molto semplice, estraete la iso, posizionate il tool insieme al file Asto2.dat e doppiocliccate il programmino.

Per il download cliccate qui

Alla prossima.

Kingdom Hearts Chain Of Memories Uncomplete Toolset

Pubblicato il 16 febbraio 2010 alle 11:02 da Vash

Cover Buongiorno a tutti, ecco come promesso un altro rapido aggiornamento a questo blog.

Qualche tempo fa (credo ormai un anno) mi misi a giochicchiare con la versione NTSC/US di Kingdom Hearts Chain Of Memories e si rivelò più tosto del previsto. I maledetti alla square non si smentiscono mai e qui hanno usato una custom TOC (ovvero, se si apre la iso normalmente non si vede nulla a parte l’eseguibile e un altro paio di file inutili ai nostri scopi) ma fortunatamente quella non è stata particolarmente un problema quanto invece il formato degli archivi che contenevano il testo.

Beh, a farla breve dopo una settimana riuscii a scrivere 4 programmi che ora vi lascerò:

-isoextr

Vi permette di estrarre i file veri dalla iso

isoextr file.iso

- datextr

Vi permette di estrarre i file dat

datextr file.dat

-bindumper & ctddumper

Vi permettono di estrarre il testo in formato intelleggibile. Consiglio Notepad++

bindumper file.bin

ctddumper file.ctd

Detto questo, passo e chiudo, alla prossima.

Per il download cliccate qui

Shiren The Wanderer Unpacker

Pubblicato il 15 febbraio 2010 alle 02:02 da Vash

Dopo quasi un anno preciso, torno a ripopolare un po’ questo Blog (ripromettendomi di farlo più spesso) con un programmino che ho scritto questa mattina in un’oretta di libertà. Questo gioco per WII  è una specie di RPG…credo..ok, non ho la minima idea di cosa sia sto gioco ma mi piaceva la copertina. Fatto sta che dando una rapida occhiata al formato dell’archivio l’ho trovato abbastanza semplice e ispirante perciò, ecco a voi un simpatico unpacker.

Da notare che dentro ci sono dei file…come dire…curiosi come enckey.key da 16 byte e signkey.pub da 256 byte. Adoro quando crittano tutto e forniscono la chiave :D

Dubito seriamente di continuare l’hacking di questo gioco, se servissero altre informazioni però, potete contattarmi senza problemi.

Per il download, cliccate qui

Star Ocean: First Departure Unpacker

Pubblicato il 17 febbraio 2009 alle 02:02 da Brisma

Star Ocean FD PSPUhuh, ma guarda un po’ cosa sono andato a ripescare dall’hard disk oggi :P
Non si tratta di nulla di particolare, semplicemente un paio di mesi fa (Ottobre) avevo iniziato ad analizzare questo gioco, giusto per vedere com’era strutturato (per giunta la versione USA, in quanto la PAL non era ancora uscita in commercio.
Per capire l’archivio ci è voluto ben poco, una delle tanti varianti di casa Square, nulla di nuovo insomma. Invece la cosa curiosa sono proprio i file contenuti in esso: si tratta niente di meno che… di file compressi!
Beh, anche qui non c’è nulla di nuovo penserete… ed invece c’è una piccola curiosità: utilizzano la stessa identica compressione di Valkyrie Profile PSX/PSP, difatti sono tranquillamente de/comprimibili utilizzando il decompressore di VP :)

Sfortunatamente, tale decompressore non è ad opera mia, ma bensì di Scorpio, indi per cui non posso pubblicarlo senza il suo consenso, ma tuttosommato nessuno mi vieta di pubblicare uno dei miei tanti dearchiviatore brutti, mal ottimizzati, senza nessun controllo etc etc ma che funzionano sempre, e perciò ecco il dearchiviatore, non si sa mai che a qualcuno può tornare utile :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
#include <stdio .h>
 
unsigned long int num_file, i, offset, dimensione, indice;
unsigned char buffer[209715200], stringa[32]; // 200Mb - > W lo spreco XD
FILE *input, *output;;
 
int main()
  {
  input=fopen("so1pack.bin", "rb");
  mkdir("SO1_UNPACK");
  fread(&num_file, 4, 1, input);
  fseek(input, 0x08, SEEK_SET);
  fread(&indice, 4, 1, input);
  fseek(input, 0x10, SEEK_SET);
  for(i = 0; i < num_file - 1; i++) // Esclude l'indice delle dimensioni
    {
    fseek(input, 0x10 + (i * 4), SEEK_SET);
    fread(&offset, 4, 1, input);
    fseek(input, indice + (i * 4), SEEK_SET);
    fread(&dimensione, 4, 1, input);
    fseek(input, offset, SEEK_SET);
    printf("File so1pack.%d Offset: %X Dimensione: %d byte\n", i, offset, dimensione);
    fread(&buffer, dimensione, 1, input);
    sprintf(stringa, "SO1_UNPACK\\so1pack.%d", i);
    output=fopen(stringa, "wb");
    fwrite(&buffer, dimensione, 1, output);
    fclose(output);
    }
  return 0;
  }

Download Star Ocean FD Unpacker 0.1 (Eseguibile Win32/Sorgenti C).

Aggiornamento a WordPress 2.7.1

Pubblicato il 12 febbraio 2009 alle 12:02 da Brisma

WordPress LogoPiccola comunicazione di servizio per informare che ho provveduto ad aggiornare il blog alla versione 2.7.1 di WordPress. Parecchio interessante la nuova funzione per l’auto aggiornamento… peccato però che mi abbia distrutto tutto il tema che mi ero modificato.

Sfortuna ha voluto che non avessi neanche un backup con gli ultimi ritocchi (una settimana fa) ma per fortuna ci ha pensato la cache di Google a salvarmi e con un paio di copia-incolla sono riuscito ad aggiustare il tutto :P

Zelda: Ocarina Of Time – VC Wii

Pubblicato il 9 febbraio 2009 alle 03:02 da Brisma

Logo Zelda OOTAvevo accennato qualche giorno fa di un certo Zelda: Ocarina Of Time e di come mi stessi occupando non della normale rom PAL/USA, ma bensì della versione emulata su Virtual Console del Wii. Dunque mi son detto: perché non mostrare cosa sto realmente facendo :P ?
Partiamo dalle basi: come prima cosa è bene precisare che i giochi per VC non sono altro che rom nude e crude “incapsulate” in un canale con apposito manuale/trailer relativo al gioco. Ne consegue che, una volta estratti i dati del canale, è stato facile estrarre la rom di OOT che funziona perfettamente su qualsiasi emulatore di Nintendo64. Per la precisione, quella proposta per VC è sostanzialmente un aggiornamento della stessa rom apparsa qualche anno fa su un Bonus Disc per GameCube. Per chi avesse avuto modo di provarla al tempo, saprà che si tratta semplicemente di una rom Multi3 (Inglese, Tedesco, Francese) con qualche censura e qualche testo rivisto qua e là. I più attenti alla scena del romhacking italiano sapranno anche che già da diversi anni esiste una traduzione per OOT ad opera di xxcentury che rappresenta un’ottima localizzazione del gioco, ma sfortunatamente è priva di ogni qual forma di hack grafico (al tempo era irrealizzabile) e sprovvista anche di un font accentato (sebbene il gioco USA contenesse comunque un font già accentato). Il mio lavoro è stato in primo luogo quello di cercare di importare la traduzione di OOT USA in OOT VC: è stato un processo non proprio facilissimo in quanto molti blocchi erano diversi, ma comunque è stato possibile attuarlo in una sola giornata. Tecnicamente ora il testo del gioco è tutto in italiano e funziona perfettamente ma… dato che i tempi ora sono maturi, perché fermarsi al semplice testo se è possibile de/comprimere la grafica e modificarla ad opera d’arte ed inserire un font accentato come si deve?
Per il font non è stato un problema, dovrò solamente revisionare un 200Kb di script alla ricerca di tutti gli accenti e modificarli con le rispettive corrispondenze secondo il font di OOT VC, ma è facilmente fattibile come nello screen seguente:

Zelda OOT M3 Beta02

Per quanto riguarda la grafica non è un’operazione così semplice: in primo luogo perché c’è comunque moltissimo testo grafico nel gioco (come ad esempio tutti i luoghi che si visitano, tutti i boss, tutti gli oggetti e via dicendo) ed in secondo luogo per via della compressione/palette utilizzata che richiedono una manualità un po’ particolare, ma tutto sommato fattibile:

Zelda OOT M3 Beta01

Come si nota in quest’ultimo screen in special modo sulla scritta “Seleziona la tua Lingua” c’è uno strano alternarsi di colori chiari e scuri, il tutto è normale, ho utilizzato il semplice Paint per tradurre la scritta con conseguenza “perdita” della palette originale nelle zone editate: ma il tutto è facilmente risolvibile con qualche click di Photoshop :)

Beh, per ora è tutto, alla prossima!

WAD, certificati e Wii

Pubblicato il 7 febbraio 2009 alle 01:02 da Brisma

Ultimamente, passando gli ultimi giorni di vacanza a giochicchiare con l’hacking dei fantomatici file WAD, che per chi non lo sapesse non sono altro che il dump dei canali del Wii, mi sono imbattuto in un simpatico argomento: può esistere un modo alternativo per sapere cosa contiene un WAD senza passare per l’ID, e di conseguenza la relativa ricerca in rete di cosa corrisponda? Ebbene, anche questa volta, la mia curiosità ha trovato la sua risposta, ovvero Sì. Il tutto andando ad analizzare l’header (non poi troppo diverso da quello dei classici giochi NDS/PSP) ho scoperto che è possibile arrivare con pochi calcoli all’offset assoluto del file certificato, dove è presente niente popò di meno che il titolo che compare sotto l’icona del canale nella dashboard del Wii quando ci si passa sopra con il Wiimote :P
Ed ecco dunque che ho scritto al volo un semplice programmino che dandogli in pasto un file Wad, restituisce il suo titolo :)

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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
/*
 
Ottenere il titolo di un WAD dal certificato :P
06/02/2009 - by Brisma
 
- - -
 
Inutile spiegare tutta la struttura dell'header dei file WAD,
scriverò giusto come arrivare al certificato da cui ottenere
il titolo del WAD (ovvero l'offset assoluto del file .cert).
 
Si ottiene con:
 
DimensioneWAD - (64 - (DimensioneCERT % 64)) - DimesnioneCERT
                |
                -->  solo se (DimensioneCERT % 64) > 0
 
Arrivati fin qua facciamo un semplice controllo se effettivamente
il certificato può in linea teorica contenere il titolo dell'app
con il semplice calcolo di 240 + (84 * 6) = 744 byte, quindi
se è più piccolo di questa dimensione (che dovrebbe esser la minima
teorica) il file .cert non contiere nulla :P
A questo punto si aggiunge il valore 240 che ci porterà
all'inizio esatto del titolo del WAD e leggiamo 84 byte che
sono codificati a 16bit, quindi in realtà vi sarà una stringa di
42 lettere (caratteri nulli inclusi).
 
Ovviamente nella parte della disinstallazione non è necessario andare
a ricalcolare l'offset etc etc, basterà aprire il file .cert (con un
semplice strstr() per controllarne il nome), e spostarsi nuovamente
di 240 byte qual'ora la dimensione sia superiore a 744.
 
*/
 
#include <stdio .h>
 
unsigned long int dimensionewad, dimensionecert, offsetcert;
char nomeApp[84];
 
FILE *filewad;
 
// Conversione da Little Endian a Big Endian
int litte2big(int i)
{
    return((i&0xff)< &lt;24)+((i&0xff00)<&lt;8)+((i&0xff0000)>>8)+((i>>24)&0xff);
}
 
int main(int argc, char *argv[]){
    filewad=fopen(argv[1], "rb");
    fseek(filewad, 0, SEEK_END);
    dimensionewad = ftell(filewad);
    fseek(filewad, 0x1C, SEEK_SET);
    fread(&dimensionecert, 4, 1, filewad);
    dimensionecert = litte2big(dimensionecert);
    if (dimensionecert < 744)
      {
      printf("Il file .cert non contiene informazioni.\n");
      getch(); // Cancellare
      return 0;
      }
    if ((dimensionecert % 64) != 0) offsetcert = dimensionewad - (64 - (dimensionecert % 64)) - dimensionecert;
    else offsetcert = dimensionewad - dimensionecert;
    //
    // offsetcert contiene l'offset del wad dov'e' presente il file .cert
    // Ora non resta che aggiungere 240, leggere 84 byte, e mostrare il titolo
    // alternando i byte (è a 16bit) :P
    //
    offsetcert+=240;
    fseek(filewad, offsetcert, SEEK_SET);
    fread(&nomeApp, 84, 1, filewad);
    int i = 0;
    for(i = 1 ; i < 42; i+=2) if(nomeApp[i] != 0x00) printf("%c", nomeApp[i]);
    getch(); // Cancellare
    return 0;
    fclose(filewad);
    }

Download WAD_Title (Eseguibile Win32/Sorgenti C).

2009 – Anno nuovo…

Pubblicato il 26 gennaio 2009 alle 03:01 da Brisma

…ma che fine ha fatto Brisma!?

Ebbene sì, sono ancora tra voi, sebbene non aggiorni questo blog da circa 6 mesi :P
Dunque veniamo subito alle novità: la prima e più importante è che avendo trovato lavoro a maggio scorso il mio tempo si è letteralmente minimitizzato e questa è la ragione per cui non ho più aggiornato di recente.
Come seconda “novità”, per quei pochi che magari se la sono persa, qualche mese fa io e gli altri colleghi di SadNES cITy abbiamo portato a termine la nostra avventura su Final Fantasy Tactics PSX/PSP con ottimi risultati: abbiamo superato noi stessi contro ogni ottimistica prospettiva ^_^

Al momento sono fermo per quanto riguarda le mie “solite avventure solitarie” su nuovi titoli, anche se durante questi mesi in realtà ho buttato un occhio su Star Ocean PSP, Final Fantasy I PSP, Jeanne d’Arc PSP, Zelda OOT Wii-VC, ma di questi parlerò in altre occasioni.

Per ora è tutto, a presto :)

Tales Of Vesperia Hacking Parte 1

Pubblicato il 15 settembre 2008 alle 12:09 da Vash

Nonostante non sia ancora chiaro quando uscirà una versione PAL (europea) del gioco e se verrà localizzato ufficialmente in italiano, ho deciso di studiarne lo stesso la struttura.

Appena estratta la iso si nota subito la presenza di archivi in quanto, oltre ad audio e filmati, sono presenti solo file SVO. Da lì a capirne la struttura il passo fortunatamente è stato breve, e ancora più breve è stata la stesura del codice che ha portato alla creazione di un estrattore che potete scaricare qui.

A presto per un nuovo aggiornamento :)

Convertire un PMF in AVI e viceversa (File Video PSP)

Pubblicato il 29 luglio 2008 alle 11:07 da Brisma

Ebbene sì, tutti la cercano ma nessuno la trova. Di cosa stiamo parlando? Ma è ovvio! Della passer… ehmmm di una guida in italiano che spiega tutti i passaggi su come convertire i video della PSP in normalissimi AVI (DivX/XviD o quel che volete)… ed ovviamente di come poterli ricreare.

In poche parole spiegherò la tecnica ideata da me che ho usato personalmente per encodare i video di Final Fantasy Tactics subbati in italiano per la traduzione SadNES cITy.

Per prima cosa spieghiamo subito che questa non è la solita guida scopiazzata da alcuni howto che spiegano come utilizzare mplayer e mencoder per decodificare i flussi audio/video, anche perché quella tecnica è quanto obsoleta quanto inefficace con moltissimi file video (ad esempio proprio con FFT non era possibile utilizzarla).
In che modo quindi è possibile fare il tutto? Semplice, utilizzando un vero codec H.264/AVC che supporti lo stesso formato PSP. Non assicuro la compatibilità al 100% con qualsiasi video, ma sicuramente molto più di quella di mplayer.

Ecco la lista di tutto il materiale occorrente:

Bene, una volta che vi sarete procurati tutti questi programmi avrete tutto il necessario per convertire i vostri video con tanto di audio e senza perdere qualità :P

  • Convertire PMF -> AVI

Iniziamo subito con la prima parte della guida, ovvero la conversione da PMF ad AVI. La prima operazione da effettuare è separare il flusso video dal flusso audio tramite mplayer. Nulla di complicato; copiate mplayer ed il vostro video in una cartella e dal prompt dei comandi eseguite queste due operazioni:

mplayer -dumpvideo filmato.pmf
mplayer -dumpaudio filmato.pmf

In questo modo otterrete una prima volta uno stream.dump contenente il flusso video (che potrete rinominare come Video.avi ad esempio) e la seconda volta uno stream.dump contenente l’audio (che rinominerete con stream.at3).

Ora passiamo alla parte più facile, ovvero convertire il flusso audio in un normalissimo WAV.
La prima cosa da fare è copiare l’AT3Decoder Test su PSP, creare una cartella di nome at3 nella root della vostra memory stick e copiarci all’interno stream.at3. Ora, eseguendo l’AT3Decoder Test dalla vostra psp, vi creerà un file WAV nella root della vostra MS contenente l’audio del filmato pronto per esser utilizzato.

Ed ora la parte più interessante, ovvero come ottenere il video in formato AVI. Per prima cosa installiamo MainConcept H264 Decoder, che ci permetterà di visionare e decodificare il flusso video anche tramite programmi come WMP/WinAmp. Ora che il video è normalmente visualizzabile è tempo di esportarlo in AVI con S.U.P.E.R. Prima di effettuare ciò il mio consiglio è quello di installare il codec Huffyuv, esso altro non è che un codec che permette di salvare un video in formato non compresso, in modo da non perdere qualità delle immagini (più il video è ad alta definizione, migliore sarà la resa nel momento della recodifica in PMF).
Ora possiamo avviare S.U.P.E.R. Scegliamo come tipo di output “avi” e come codec “huffYUV”, inoltre scegliamo come decodificatore ffmpeg e mettiamo la spunta a “DirectShow Decode” (altrimenti il codec H264 installato prima non verrà preso in considerazione). Inoltre, per portarci un po’ avanti nel lavoro ed evitarlo di farlo in seguito, impostiamo Frame/Sec a 29.97 (il video framerate nativo della PSP) e lasciamo Video Scale Size su “NoChange” in modo da lasciare i video a 480×272. Nel profilo Audio possiamo tranquillamente mettere la spunta a Disable Audio (daltronde l’abbiamo già la nostra traccia audio bella e pronta :P).
Infine trasciniamo il video nella parte inferiore della schermata e clickiamo Encode per ottenere il nostro AVI (privo di audio per ora).

Ed ora passiamo al muxing finale, ovvero unire audio al video ed eventualmente encodarli in qualche formato compresso (chi ha detto DivX/Mp3?).

Questa volta sarà il turno di VirtualDub. Apriamolo e scegliamo di aprire subito il nostro video encodato con S.U.P.E.R. privo di audio. Ora dal menu Video possiamo scegliere di mettere la spunta su Direct Stream Copy (che non effettuerà alcun encoding, si limiterà semplicemente a copiare pari pari il flusso video), o se scegliere il Full Processing Mode e selezionare l’eventuale codec da usare da Compression. Infine, dal menu Audio selezioniamo WAV Audio… per andare a selezionare il nostro bel WAV creato con la PSP (ed eventualmente la compressione da utilizzare sempre dal solito menu).
Fatto ciò non ci resterà che premere F7 e salvare il nostro nuovo fila AVI contenente il nostro filmato bello e pronto per qualsiasi utilizzo :P

  • Convertire AVI -> PMF

Ed eccoci arrivati alla parte più interessante (o per lo meno per me :P) di questa guida.

Premetto che per effettuare questa operazione sarà necessario l’uso dell’UMD Stream Composer, un software utlizzato e creato direttamente dalla Sony, inutile dire che possederlo senza avere la licenza originalmente e l’SDK Sony PSP è illegale :P

Ora, considerando che a me non frega niente di come, dove, quando lo avete ottenuto vi spiegherò semplicemente i passaggi da effettuare (sono molto meno di quelli precedenti) per ottenere il vostro MPS (sìsì, tranquilli, dopo lo trasformiamo in PMF).

Apriamo UMD Stream Composer e creiamo un nuovo progetto. Inseriamo un nome per il progetto ed andiamo avanti, in questa schermata è importante spuntare “PSP movie format (for game)” e clickiamo su Fine.

Ora non ci resta che trascinare il nostro video (con l’audio) nelle apposite barre sottostanti in modo da avere una statistica della dimensione del video di output indicata sotto la voce “Clip Size(MB)”; sicuramente non saranno quelle che vi interessano se volete reinserire il video in una ISO PSP, quindi dovremo abbassare la qualità del video per rientrare nelle dimensioni originali. Per farlo clickiamo su Video Enc Settings ed abbassiamo un po’ il bitarate (ad esempio io su FFT usavo 560), medesima operazione da effettuare per Audio Enc Settings per abbassare un po’ la qualità audio. Ogni volta che modificherete questi valori il Clip Size cambierà dandovi una statistica delle nuove dimensioni del video encodato.
Una volta trovato il giusto compromesso clickiamo su Start… e scegliamo la voce “Encode + Multiples” e nuovamente Start. Così facendo parterà il processo di encoding del vostro video nel formato MPS. Troverete il video nella cartella Mux del vostro progetto (che si troverà a sua volta nella cartella UmdStreamComposer in Documenti).

Ed ora è il turno di PMF Creater 0.2, il suo utilizzo è banale, dategli in pasto il file MPS appena creato ed il file di output, sotto inserite la lunghezza del filmato in Minuti/Secondi e non mettere la spunta per crearne un’icona.

Fine, questo è tutto, il vostro video è bello che pronto per esser reinserito su PSP :)

Spero che questa semplice guida vi sia servita, è frutto della mia esperienza e sicuramente non è la più completa (ad esempio mi è capitato con un solo video di FFT di non poterne decodificare l’audio in WAV, in tal caso ho dovuto registrarne il WAV tramite la Linea in ingresso del PC e trattarlo con Audacity per pulirlo e renderlo Stereo).

Aggiornamento a WordPress 2.6

Pubblicato il 29 luglio 2008 alle 02:07 da Brisma

Sebbene questa volta un po’ in ritardo rispetto al solito, anch’io mi sono conformato al nuovo WordPress 2.6 provvedendo a dare anche una rapida aggiornata a tutti i plugin attivi che ho :P

Sebbene sia passato molto tempo e l’interesse per il sito sia calato notevolmente presto (se non direttamente in giornata) mi metterò al lavoro per dargli un tocco di novità in più; chissà, magari qualche guida interessante o qualche screenshot nuovo :P

Penny Arcade: On the Rain-Slick Precipice of Darkness Episode 1

Pubblicato il 20 giugno 2008 alle 02:06 da Vash

Titolo infinito per un giochetto di nicchia da poco uscito che certo farà scalpore solo fra gli afecionados del noto(?) fumetto Penny Arcade.

Ieri sera, finito di studiare per uno schifossimo esame di Database ho acceso Steam per fare una partitina a Audiosurf e ho visto nelle news questo giochetto di cui avevo letto su GMC qualche tempo prima, così ho scaricato la demo e ho visto che era il gioco intero solo a tempo, così, dopo essermi assicurato che non esistesse in italiano, mi sono dedicato un po’ all’hacking e in poco ne sono venuto a capo. Il testo è dentro degli archivi hha che non sto a descrivere troppo in quanto non li ho hackati io ma per fortuna ho trovato un de/compressore già pronto in questo forum (versione 0.3 per Win32 o Linux). Estratti quei file ho subito individuato il file incriminato (English.lso dentro la cartella Language :P) ma ho visto che non era un semplice txt ma un formato, fortunatamente, semplicissimo:

1 byte = Totale lunghezza frase
x byte = Frase

e così fino alle fine..

in pochi minuti era pronto un bel tool per l’estrazione e il reinserimento del testo. La versione 1.0 la trovate qui completa di codice sorgente.

Un problema un po’ più gravoso sono i filmati che sono in SWF, cioè in flash, ma armati di un decompilatore e di molta pazienza volendo si possono tradurre pure quelli.

Saluti, alla prossima

Patch Final Fantasy IX [Pal-Ita]

Pubblicato il 3 maggio 2008 alle 04:05 da Brisma

Se qualcuno se lo fosse perso, quasi un anno fa, rilasciai una patch per Final Fantasy IX per inalibire la protezione che affliggeva la versione Pal del gioco, rendendolo di sorta inemulabile (se non tramite particolare plugin/sub) su pc o su altre console. Basandomi sul lavoro svolto dagli altri team, in special modo tedeschi/francesi, ed armato di tanta pazienza e pochissime nozioni di assembly, mi sono messo al lavoro su questo gioco e nel giro di una settimana circa sono riuscito ad ottenere i risultati prefissati :P

Infatti, applicando le dovute patch, è possibile emulare il gioco in versione italiana anche su PSP e su Xbox senza nessun problema :D

Dato che la rete a volte è un po’ infame, ho deciso di pubblicare la patch anche sul mio sito, prima che scompaia e diventi introvabile :P

Download Patch Final Fantasy IX [Pal-Ita] (PPF/PSX).

Aggiornamento a WordPress 2.5.1

Pubblicato il 29 aprile 2008 alle 05:04 da Brisma

Piccola comunicazione di servizio per annunciarvi che ho provveduto ad aggiornare WordPess alla versione 2.5.1.

Pur essendo una versione minore, gli sviluppatori, dovrebbero aver sistemato un sostanziale numero di bug (ben 70 se ho ben capito) che affliggevano la precedente versione 2.5.0.

Beh, speriamo che a questo giro non si presentivo nuovi (più o meno gravi) inconvenienti :P

Nuovo Hacker, Nuove Inutilità

Pubblicato il 29 aprile 2008 alle 02:04 da Vash

Salve a tutti, sono Vash.

Il buon Brusba mi ha gentilmente concesso questo spazio (graaaaaaaazie brusba) per poter dare in pasto al web le mie inutilità che, come lui, programmo o studio nel tempo libero.

La mia prima inutilità riguarda un j-rpg (Japanese Role Play Game per i profani) per PSX, Hoshigami.
Potrei scopiazzarvi un breve riassunto da qualche sito per farvi capire di cosa parla questo gioco e per farvene un’idea, ma la verità è che non ne ho la minima idea manco io per cui se non lo so io, che vi frega a voi? Qualcuno dirà:”Ma perché ti metti a sfacchinare su un gioco che manco conosci?” e io risponderò:”Bella domanda, ogni tanto me la pongo anche io”.

Vabbè… chiudiamo l’angolo dell’ilarità e torniamo alle cose serie. Ho programmato un bel Dumper (sempre per i profani, estrattore di testo) per i dialoghi (NB SOLO i dialoghi) di, appunto, Hoshigami. Prima che chiediate il codice sorgente per analizzarlo e capacitarvi del mio genio sappiate che questo programma merita il premio di Dumper più vago del secolo. Mi spiego meglio. Il testo del gioco sta tutto in un file chiamato Demo.DAT (emo scriviamolo in minuscolo, va..) che, presumo, è un archivio. Non trovando i puntatori di questo archivio dopo una rapida ricerca stavo per abbandonare tutto quando ho visto che il testo era in un formato molto strano e aveva delle costanti alla fine e all’inizio del testo, così basandomi su una intuizione e affidandomi alla fortuna ho scritto questo bel dumper.

Qualcuno schifato dirà:”Bhè bravo, ma ora non si può nemmeno espandere…” e io, facendomi grasse risate dirò:”Buah buah buah (le grasse risate ndV), il mio culo non ha limiti, in questi dump metà spazio è occupato da commenti in giapponese (quindi unicode ndV) assolutamente inutili, per cui una volta tradotto il testo basterà riportare il file al suo peso originale e reinserirlo.”

Ora un esempio pratico su come, eventualmente, tradurre.
Ecco un Dump:

(! =============================================
ƒfƒBƒ\[ƒ‹Š×—Ž
=============================================
—- MAP —-
‚È‚µ:ƒAƒhƒxƒ“ƒ`ƒƒƒp[ƒg
—- Character ID —-
1:ƒtƒ@ƒY
4:ƒVƒ‹ƒtƒ@ƒgƒX
7:ƒŒƒCƒ}ƒŠ[
—- Global Flags —-
nothing
—- Temporary Flags —-
nothing
—- Special Animation —-
nothing
—- Face in Window —-
0:04ƒtƒ@ƒY ‹Á‚«
1:32ƒVƒ‹ƒtƒ@ƒgƒX ‰ö‚µ‚Þ
============================================= )

(!–BGM–)(ply -1)
(!–”wŒi–)(%bp 0)

(wtm 60)

(%fp 1)(wtm 20)(win 2)
(say “Silphatos\n\”I have some disturbing news…\”")(wfg 127)
(win 0)(wtm 5)

(%fp 0)(wtm 10)(win 2)
(say “\h\n\”What’s wrong?\”")(wfg 127)
(win 0)(wtm 5)

(%fp 1)(wtm 10)(win 2)
(say “Silphatos\n\”I just received word that the town of\n Dissoal was attacked by the Valaimian\n army.\”")(wfg 127)
(win 0)(wtm 5)

(end)

Le parti da tradurre sono tutte quelle precedute da (say ” e, la prima parola (a meno che non sia la continuazione delle frasi precedenti) è il nome di chi parla, Silphatos in questo caso. Quel /n vuol dire che la frase va a capo per cui usatelo saggiamente (non avrete spazio infinito a schermo). Se vorrete aggiungere una finestra potrete farlo ma dovrete stare attenti a rispettare certi parametri, prendiamo come esempio questa frase, presa da un altro dump:

((win 1)
(say “\f01Zelstan\n\”If you knew that much…”)(wfg 127)
(say “\f01 If you knew that Vugtis is\n intent on destroying\n everything, why do you still”)(wfg 127)
(say “\f01 want him to return to\n Mardias?\”")(wfg 127)
(win 0)

potrete aggiungere una frase così:

(win 1)
(say “\f01Zelstan\n\”If you knew that much…”)(wfg 127)
(say “\f01 If you knew that Vugtis is\n intent on destroying\n everything, why do you still”)(wfg 127)

(say “\f01 want him to return to\n Mardias?\”)(wfg 127)

(say “\f01 frase nuova\”")(wfg 127)

(win 0)

Come vedete ho aggiunto una frase finale, rispettando la sintassi comune del gruppo di frasi, togliendo le doppie virgolette alla ex-ultima frase e aggiungendole all’ultima creata da me. Superfluo dire che questa cosa è inutile perché volendo basta continuare a scrivere sulla stessa riga aggiungendo /n vari, ma sta a voi decidere. Passiamo alla fase di pulizia. I commenti da, eventualmente, cancellare…quali sono? Facile, è tutto ciò che è compreso fra (! e ) ovvero se per esempio trovate:

(! =============================================
ƒfƒBƒ\[ƒ‹Š×—Ž
=============================================
—- MAP —-
‚È‚µ:ƒAƒhƒxƒ“ƒ`ƒƒƒp[ƒg
—- Character ID —-
1:ƒtƒ@ƒY
4:ƒVƒ‹ƒtƒ@ƒgƒX
7:ƒŒƒCƒ}ƒŠ[
—- Global Flags —-
nothing
—- Temporary Flags —-
nothing
—- Special Animation —-
nothing
—- Face in Window —-
0:04ƒtƒ@ƒY ‹Á‚«
1:32ƒVƒ‹ƒtƒ@ƒgƒX ‰ö‚µ‚Þ
=============================================)

Questo è tutto un commento e potrete usarlo. Occhio a non cancellare l’apertura o la chiusura del commento altrimenti mandate tutto in vacca… Per ora questo è tutto, se mi verrà in mente altro o ci saranno domande scriverò qualcosa di nuovo.

Download Hoshigami Dumper 0.9 (Eseguibile Win32).

A presto per il reinseritore!

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

Pubblicato il 5 aprile 2008 alle 01:04 da Brisma

E per concludere questo capitolo temporaneamente mi sembrava d’obbligo pubblicare anche il rearchiviatore. In pratica si tratta sempre dello stesso programma di prima, soltanto che a questo giro al posto di estrarre dal discimg.pkg non farà altro che reinserire i file precedentemente estratti dal dearchiviatore pubblicato qualche giorno fa. Insomma, quanto di più facile si potesse fare :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
/*
 
Crisis Core: Final Fantasy VII Archiviatore 1.0beta
               05/04/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 Archiviatore 1.0beta by Brisma\n\n");
  if(!((discimg_fse=fopen("discimg.fse", "rb")) == NULL))
    {
    if(!((discimg_pkg=fopen("discimg.pkg", "r+b")) == NULL))
      {
      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(&offset, 4, 1, discimg_fse);
        fread(&dimensione, 4, 1, discimg_fse);
        fread(&padding, 4, 1, discimg_fse);
        if (dimensione > 0)
          {
          printf("Reinserimento file discimg.pkg.%d Offset %X Dimensioni %d byte...", z, offset*2048, dimensione);
          sprintf(stringa, "data\\discimg.pkg.%d", z);
          estratto=fopen(stringa, "rb");
          fseek(discimg_pkg, offset*2048, SEEK_SET);
          fread(&buffer, dimensione, 1, estratto);
          fwrite(&buffer, dimensione, 1, discimg_pkg);
          fclose(estratto);
          printf("[OK]\n");
          z++;
          }
        }
      }
    else printf("Impossibile aprire discimg.pkg\n");
    }
  else printf("Impossibile aprire discimg.fse\n");
  _fcloseall();
  printf("Reinseriti %d file.\n", z);
  getch();
  return 0;
  }

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

System Gadget per la Sidebar di Vista

Pubblicato il 3 aprile 2008 alle 05:04 da Brisma

Dato che è da poco che ho installato Windows Vista non avevo ancora iniziato ad analizzarlo per bene in tutte le sue parti. Oggi ho deciso di dare un senso di utilità alla Sidebar di Windows Vista, vista la sua completa inutilità se non si mette qualche gadget utile. Girovagando qua e la per la rete ho trovato 4 gadget davvero carini:

Come potete vedere sono quattro e sono i seguenti:

  • un monitor per visualizzare la banda di upload/download utilizzata.
  • un monitor per visualizzare lo stato di utilizzo della memoria ram e del file di paging.
  • un monitor per visualizzare l’utilizzo del processore (nel mio caso un Dual Core).
  • un monitor per visualizzare lo stato degli Hard Disk, lo spazio disponibile e, clickandoci sopra, vi aprirà direttamente il suo contenuto.

Non so a voi, ma a me tornato davvero molto utili avendo sempre a che fare con il controllare lo stato di utilizzo della ram/processore e per vedere il bandwitch della banda di connessione :)

Beh, non mi rimane altro che rendere disponibile il download:
Download System Gadget (Netword, Ram, CPU & Drive).

Crisis Core: Final Fantasy VII (Tema PSP)

Pubblicato il 2 aprile 2008 alle 01:04 da Brisma

Scusatemi il gioco di parole ma… rimaniamo in “tema” di Crisis Core :asd:
Stanco del mio tema su PSP ho deciso di cambiarlo e, visto e considerato il successo di questo gioco, ho deciso di cercare qualche tema proprio a proposito di Crisis Core. Con mia sorpresa ho scoperto che la stessa Sony ha rilasciato un tema ufficiale e… beh, potevo mai perdermelo? Ed allora colgo anche l’occasione per renderlo disponibile a tutti quelli che non hanno un account su PlayStation Store :)

Download Crisis Core: Final Fantasy VII (Tema PSP 01)

E già che ci siamo, ho cercato anche uno sfondo migliore (dato che l’iconset tutto sommato mi piaceva) è ho trovato questo (sempre ufficiale, della SquareEnix a questo giro):

Download Crisis Core: Final Fantasy VII (Tema PSP 02)

E con questo anche per oggi è tutto ^_^

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 ;)