Domanda:
Come devo affrontare il reverse engineering di questa codifica del testo?
Celandine Crane
2018-12-10 18:10:56 UTC
view on stackexchange narkive permalink

Quindi sto cercando di hackerare la traduzione dalla versione PS4 di un gioco alla versione Vita. I file di script erano opportunamente decompressi e sono stato in grado di inserirli e farli funzionare senza intoppi - fantastico!

Tuttavia, vari altri file di messaggi e riepiloghi di missioni e simili non sono così convenienti.

Ecco un confronto di due file in un editor esadecimale: enter image description here

All'inizio pensavo fosse una semplice compressione di coppie di byte, ma ovviamente c'è più di questo, perché se guardi i luoghi che corrispondono a "Andiamo!" e "Facciamolo!" non iniziano affatto con la stessa stringa di caratteri.

Ho caricato le versioni PS4 / Vita di un file con testo piuttosto più leggibile: https://www.dropbox.com/ s / bw0nvexyi9ww2be / hm% 20vita? dl = 0 https://www.dropbox.com/s/sk74zadvndc8v9t/hm%20ps4?dl=0

Esaminandolo e cercando parole comuni e ricorrenti, ho trovato questo:

  Goblin Thief´0Ö0ê0ó0 · 0ü0Õ0B430 D630 EA30 F330 B730 FC30 D530Goblin Thief Archer´0Ö0ê0ó0 · 0ü0Õ0 ¢ 0ü0Á030ã030 B30 D530 A230 FC30 C130 E330 FC30Ancient Grief ¨0ó0 · 0§0ó0È0 ° 0ê0ü0Õ0A830 F330 B730 A730 F330 C830 B030 EA30 FC30 D530Grief Screamer ° 0ê0ü0Õ0¹0 ° 0ê0ü0Õ0A830 F330 B730 A730 F330 C830 B030 EA30 FC30 D530Grief Screamer ° 0ê0ü0Õ0¹0¯0ê0ü0Þ0ü0B30 FC30 FC30 D305 FC30 D30 FC30 D30 FC530 FC30 FC30 D30 FC530 FC30 D30 FC30 F30 FC305 FC30 FC30 D30 

Quindi puoi vedere che FC30 D530 è "ief". Ma poi cerco più occorrenze di "gr"

  Deep GrudgeÇ0 £ 0ü0 × 0 ° 0é00Ã0C730 A330 FC30 D730 B030 E930 C330 B830  

E non vedi l'EA30 che inizia con "Grief".

Ho la sensazione che FC30 potrebbe essere una sorta di switch byte, un'indicazione maiuscola o forse un segno di utilizzo di una sorta di tabella di ricerca? È anche interessante che tutte le righe che sono solo obiettivi / nomi di boss abbiano la struttura -30, ma alcuni passaggi descrittivi non sembrano esserlo.

Il problema aggiuntivo, ovviamente, è che il testo in inglese non compresso della versione PS4 non corrisponderà perfettamente al 100% al testo della versione Vita: questo è il punto, Dopotutto! Quindi, anche quando guardo il nome "Deep Grudge" e noto che non vedo nulla che sembri corrispondere alla "Gr" di "Grief", non posso essere certo che non hanno cambiato il nome nella versione PS4.

Qualcuno ha qualche suggerimento su come dovrei affrontarlo? Se ho ragione e in realtà è in corso una sorta di attività di tabella di ricerca compressa, potrebbe essere effettivamente impossibile invertire, giusto?

Non posso fare a meno di notare Grief screamer ha un "B030" extra all'inizio che non è presente nella riga "Grief"
Una risposta:
Edward
2018-12-10 20:03:40 UTC
view on stackexchange narkive permalink

Il modo in cui puoi imparare questa codifica è studiare il giapponese. :) Dalla prima riga del tuo file di testo diff, possiamo vedere che questo sulla sinistra:

  1131 3210 3130 3330 1021 0000 0000 0000 .12.1030.! ......  

Si traduce in questo a destra:

  1100 3100 3200 1000 3100 3000 3300 3000 ..1.2 .... 1.0.3.0.1000 01ff 0000 0000 0000 0000 0000 0000 .................  

Questo è un suggerimento molto forte che il file a sinistra sta usando un 8 bit codifica e che quello a destra utilizza una codifica a 16 bit. Le cifre sono tradotte in modo molto semplice, ma il punto esclamativo ("!") È 0x21 in ASCII o UTF-8 ma 0x01ff è il punto esclamativo a larghezza intera Unicode "codificato come UCS-2 (ovvero UTF-16 codificato come little-endian).

Quindi con il suggerimento sulla codifica possiamo vedere che l'esagono che hai identificato come" Goblin Thief "

  b430 d630 ea30 f330 b730 fc30 d530  

è reso come ゴ ブ リ ン シ ー フ che è la rappresentazione katakana delle parole inglesi "Goblin Thief". È comune per chi parla giapponese tradurre parole straniere in equivalenti fonetici con Katakana. Quindi prendendolo sillaba per sillaba abbiamo:

  ゴ go ブ bu リ ri ン n シ shi ー (vocale estesa) フ fu  

Quindi se lo diciamo ad alta voce, "go bu ri n shi-i fu" suona come "Goblin Thief" come pronunciato da un madrelingua giapponese. Puoi provare Google translate per sperimentare un po 'di più e vedere e sentire come suona.

Puoi cambiare le tue parole esadecimali nell'endianità corretta `30b4 30d6 ..`? In questo modo formano [valori Unicode per il giapponese] corretti (https://en.wikipedia.org/wiki/Katakana_ (Unicode_block)).
Come notato nella risposta, questi * sono * valori Unicode che sono semplicemente codificati come UCS-2, noto anche come [UTF-16LE] (http://unicode.org/faq/utf_bom.html#gen7)
Aspetta, questo è il dannato file _Japanese_? È strano. Devo esaminare il pacchetto e vedere se riesco a rintracciare quello inglese effettivo, quindi ... So per certo che _alcuni_ dei file che ho estratto sono quelli inglesi perché contengono un testo in chiaro, motivo per cui sostituirli loro hanno funzionato. Inoltre sono sicuro al 99% che il pacchetto che ho è della versione SCEA del gioco. Hmmm, grazie mille, questo spiega molto che mi stava facendo impazzire!
Nota di follow-up per chiunque fosse curioso: il testo in inglese è effettivamente memorizzato in un file completamente separato che è unico per la versione PS4 del gioco e presumibilmente viene estratto per sovrascrivere le stringhe giapponesi presenti nei file di base. Dio solo sa se c'è un modo per convincere la build Vita a leggere da lì.
In altre parole, non esiste una "codifica speciale" da decodificare ...


Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 4.0 con cui è distribuito.
Loading...