Benvenuto Visitatore(Log In|Registrati)
![]() ![]() |
16 Dec 2008, 23:24
Messaggio
#1
|
|
Gruppo: SMod Messaggi: 14.545 Iscritto il: 20 January 06 Da: Bologna Utente Nr.: 2.653 Entropologo part-time BGE AG: Indy3 Arcade: Silpheed Free Roaming: Shadow of the Colossus RTS: Praetorians Playing Magari... SO Windows7 OGI Supporter |
Sarica qui la patch di conversione da Inglese/Francese in Italiano dell'avventura grafica FABLE by Sirtech/Telstar. ![]() http://www.oldgamesitalia.net/traduzioni/fable-conversione Fable gira tranquillamente sotto winxp/vista/7 senza modificare alcuna impostazione di compatibilità. Prima di tutto installare Fable dal file SETUP.EXE che si trova nel CD-ROM (copierà 4 file in cr0ce nella cartella scelta, ad esempio C:\giochi\fable) Il testo introduttivo, una volta avviata la patch, spiega come procedere : CITAZIONE Questa patch trasforma il gioco (versione Windows) dalla versione Inglese o Francese in Italiano (Ad esclusione del parlato che comunque non esiste). Assicurarsi di aver installato precedentemente il gioco ed aver copiato nella cartella (es. C:\giochi\fable) l'intero contenuto del CD-ROM originale. Dopo aver applicato la patch eseguire il file "FABLE.reg". il file FABLE.reg si trova dentro la cartella in cui è stato installato il gioco e quindi applicata la patch. ********************** il post da cui è iniziato il progetto di conversione ************************** Arrivato oggi! Yuppi! ...prima questione... il gioco è in inglese... ok... ma all'interno dell'exe e dei file di gioco... c'è anche l'ITALIANO!!!!... exe: CITAZIONE Look at Talk to Take Give Use Walk to Examine Drop to with Regarder Parler … Taker Donner Utiliser Marcher … Examiner F Drop … Betrachte Sprich mit Nimm Gib Benutze Gehe zu Untersuche Ablegen an mit S Look at S Talk to S Take S Give S Use S Walk to S Examine S Drop S to S with Guarda Parla con Prendi Dai Usa Vai verso Esamina Lascia a con Inventory Inventoire Inventar S Inventory Inventario Game Options Options de jeux Spieloptionen S Game Options Opzioni di Gioco NATIF VESA SINGLE DOUBLE INFO ENG FRE GER SPA ITA AUTO GAME TITLE CD ROM S F OUTRO $ ANDERS ENGLISH version selected FRENCH version selected GERMAN version selected SPANISH version selected ITALIAN version selected Automatic playback mode selected All loading from current directory. All loading from cdrom directory. da PART1.DAT: CITAZIONE Il villaggio di Quickthorpe Š il solo luogo veramente civilizzato di Balkhane. Quickthorpe ha passato tutta la sua giovane vita qui dentro queste mura, dove i veri eroi sono pochi e il coraggio Š una risorsa rara.$Il villaggio Š antico, e la sua storia Š circondata da un alone di mistero sin dalla scomparsa degli Antichi, molti secoli fa.$Il portone Š la sola entrata o uscita dalla citt…. Dentro ci sono sicurezza, un caldo giaciglio con la famiglia e le persone care. Fuori il mondo Š ostile, e le possibilit… di sopravvivenza sono poche.$Non c'Š niente da fare. Mi hanno proprio chiuso fuori. il problema è che non c'è nessuna opzione per il cambio di lingua! il file fable.cfg presenta questa configurazione: [PROGRAM] Type = 1 Language = 0 ma qualunque numero metta non cambia mai nulla... che sia bloccato su eng? Qualcuno ha mai affrontato il problema? Messaggio modificato da TheRuler il 21 Mar 2014, 11:24
Motivo della modifica: Aggiunta patch al primo post.
-------------------- |
|
|
|
16 Dec 2008, 23:39
Messaggio
#2
|
|
Gruppo: Gamer Messaggi: 608 Iscritto il: 5 February 06 Utente Nr.: 2.660 BGE Broken Sword - The Shadow Of The Templars Playing Alan Wake SO Windows7 |
Ottima notizia!
Se qualcuno ha la versione italiana posti qui la sua configurazione! -------------------- "Hokey religions and ancient weapons are no match for a good blaster at your side, kid." -Han Solo // "La somma dell'intelligenza sulla terra è costante, la popolazione è in aumento." -ignoto
|
|
|
|
17 Dec 2008, 00:10
Messaggio
#3
|
|
Il Grafobrancio Gruppo: UST Member Messaggi: 6.747 Iscritto il: 11 February 03 Utente Nr.: 2.151 SO Win2000 ![]() ![]() ![]() ![]() ![]() ![]() Direttore (149) |
Ma senti che storia! Allora la versione che circolò in Italia (importata da software&co) è la seconda... il personaggio si chiama Quickthorpe, ma non c'è traccia del logo sirtech. Comunque nel fable.cfg della versione italiana è riportato questo:
[PROGRAM] Type = 1 Language = 4 Adesso m'hai fatto venire la curiosità di sapere come va a finire la versione che ho io, maledetto Rullaccio -------------------- ![]() «Io ritengo, senza ombra di dubbio, che l'UST sia il miglior gruppo di traduzioni amatoriali che l'Italia abbia avuto negli ultimi 150 anni.» S.B. |
|
|
|
2 Apr 2009, 00:05
Messaggio
#4
|
|
Gruppo: Gamer Messaggi: 608 Iscritto il: 5 February 06 Utente Nr.: 2.660 BGE Broken Sword - The Shadow Of The Templars Playing Alan Wake SO Windows7 |
Mi è arrivato oggi Fable dall'Inghilterra (preso in buona parte grazie anche alla scoperta del Rullo) e confermo pienamente che è presente il testo in italiano all'interno dei file part*.dat.
Non riesco però a impostarlo come lingua di gioco, neanche mettendo Language = 4... ci DEVE essere un modo... -------------------- "Hokey religions and ancient weapons are no match for a good blaster at your side, kid." -Han Solo // "La somma dell'intelligenza sulla terra è costante, la popolazione è in aumento." -ignoto
|
|
|
|
2 Apr 2009, 08:56
Messaggio
#5
|
|
The Answer Gruppo: Founder Messaggi: 22.498 Iscritto il: 13 December 03 Da: Brianza Utente Nr.: 593 The Answer BGE Monkey Island 1 Playing Machinarium SO WinVista '11 |
Ottime notizie ragazzi..state facendo venire anche a me voglia di recuperarlo..questo caso del doppio finale è quantomeno singolare :-). Così anche il fatto che scavando negli archivi si scoprano queste cose, come ho già detto più volte, non fa che stuzzicarmi in maniera considerevole :-).
Quasi quasi lo recuper! buone indagini nel frattempo.. ciao tsam ps il. cfg presenta solo quello per lal ingua? non c'è qualche altra chiamata da qualche parte oppure il file con la lingua non è "numerato"? -------------------- |
|
|
|
2 Apr 2009, 12:00
Messaggio
#6
|
|
Gruppo: SMod Messaggi: 14.545 Iscritto il: 20 January 06 Da: Bologna Utente Nr.: 2.653 Entropologo part-time BGE AG: Indy3 Arcade: Silpheed Free Roaming: Shadow of the Colossus RTS: Praetorians Playing Magari... SO Windows7 OGI Supporter |
ho confrontato la mia versione con quella italiana di Indiana e per quanto riguarda i file di configurazione non cambia nulla. Nel senso che puoi modificare quello che vuoi tanto il gioco va nella lingua impostata nell'exe.
Credo sia proprio l'exe che decide... forse creando una patch che interessi solo l'exe potremmo fare in modo di abilitare l'italiano anche nelle versioni straniere... -------------------- |
|
|
|
2 Apr 2009, 12:11
Messaggio
#7
|
|
Gruppo: Admin Messaggi: 30.471 Iscritto il: 18 April 04 Da: Britannia Utente Nr.: 1.377 pulley-in-the-middle BGE Ultima 7 Playing Ultima 7: "Il Portale Oscuro" IN ITALIANO! Dungeon Master 1 (PC - DosBox) Sonic (Wii) Runaway (PC) SO WinXP |
Grande Rullo!
Sarebbe veramente una cosa utilissima!!! -------------------- |
|
|
|
10 Jan 2010, 12:27
Messaggio
#8
|
|
|
Gruppo: Gamer Messaggi: 8 Iscritto il: 10 January 10 Utente Nr.: 17.288 SO Win2000 |
Ehm....so che il topic è fermo da Aprile dell'anno scorso, ma....ci sono novità?
Un mio amico francese mi ha regalato la versione cd Francese Sirtech....ho controllato nei files VCD, e sembra che almeno il testo italiano sia ricompreso....ovviamente, nessun risultato alternado il file cfg come sopra specificato.... |
|
|
|
10 Jan 2010, 15:56
Messaggio
#9
|
|
Gruppo: SMod Messaggi: 14.545 Iscritto il: 20 January 06 Da: Bologna Utente Nr.: 2.653 Entropologo part-time BGE AG: Indy3 Arcade: Silpheed Free Roaming: Shadow of the Colossus RTS: Praetorians Playing Magari... SO Windows7 OGI Supporter |
Ciao Tw@in 28, benvenuto su OGI! e grazie per aver rispolverato questo thread.
Ogni tanto fa bene riportare alla mente progetti mollati a metà! Potresti postare la lista dei files presente nel CD? nella mia versione inglese non ci sono files .VCD. Al momento ho fatto una prova creando una patch che converte il gioco da inglese ad italiano. E' venuta di soli 5MB (ci sono differenze minime su praticamente tutti i files), ma purtroppo costringe a ricopiare i files modificati su un nuovo CD: l'exe vuole quei files la' e da nessun'altra parte. Visto che non esiste un sistema anticopia nell'exe provo a darci una occhiata e capire come poter modificarlo per lasciare i files sull'HD. -------------------- |
|
|
|
11 Jan 2010, 09:59
Messaggio
#10
|
|
Gruppo: Admin Messaggi: 30.471 Iscritto il: 18 April 04 Da: Britannia Utente Nr.: 1.377 pulley-in-the-middle BGE Ultima 7 Playing Ultima 7: "Il Portale Oscuro" IN ITALIANO! Dungeon Master 1 (PC - DosBox) Sonic (Wii) Runaway (PC) SO WinXP |
Grandi!!!
-------------------- |
|
|
|
11 Jan 2010, 20:54
Messaggio
#11
|
|
|
Gruppo: Gamer Messaggi: 8 Iscritto il: 10 January 10 Utente Nr.: 17.288 SO Win2000 |
Ciao Tw@in 28, benvenuto su OGI! e grazie per aver rispolverato questo thread. Ogni tanto fa bene riportare alla mente progetti mollati a metà! Potresti postare la lista dei files presente nel CD? nella mia versione inglese non ci sono files .VCD. Ciao TheRuler, e intanto grazie per aver preso a cuore questa mia richiesta. Errore mio....MediaPlayer Classic me li leggeva come VCD, in realtà sono semplici files .part. Ecco la lista dei files nel CD della versione francese. CODE DIRECTX (directory) AUTORUN.EXE AUTORUN.INF DECORS.DAT DISK.ID DOS4GW.EXE DSETUP.DLL DSETUP6E.DLL DSETUP6J.DLL DSETUPE.DLL DSETUPJ.DLL FABLE.EXW FABLE.EX_ HERO.DAT HMIDET.386 HMIDRV.386 INSTALL.DAT INSTALL.EXE INTRO.IMX MISC.DAT OUTRO.IMX PART1.DAT PART2.DAT PART3.DAT PART4.DAT PRESENT.IMX SETUP.EXE SETUP.EX_ SETUP.INI SOS9503.DLL SOSLIBS3.DLL SOUNDS.DAT SPEEC.DAT TITLE.DAT TITLE.WAV CITAZIONE Al momento ho fatto una prova creando una patch che converte il gioco da inglese ad italiano. E' venuta di soli 5MB (ci sono differenze minime su praticamente tutti i files), ma purtroppo costringe a ricopiare i files modificati su un nuovo CD: l'exe vuole quei files la' e da nessun'altra parte. Visto che non esiste un sistema anticopia nell'exe provo a darci una occhiata e capire come poter modificarlo per lasciare i files sull'HD. Cavolo, ma va bene anche così com'è....quindi, se ho capito bene (e qui incrocio le dita) tutte le versioni CD avrebbero potenzialmente tutti i files (anche audio) di tutte le lingue? Se mi posti la patch così com'è la provo....anche usando un'immagine CD: non è un problema, tanto l'originale lo ho. ^^ |
|
|
|
11 Jan 2010, 21:29
Messaggio
#12
|
|
Gruppo: SMod Messaggi: 14.545 Iscritto il: 20 January 06 Da: Bologna Utente Nr.: 2.653 Entropologo part-time BGE AG: Indy3 Arcade: Silpheed Free Roaming: Shadow of the Colossus RTS: Praetorians Playing Magari... SO Windows7 OGI Supporter |
Il problema è che dovrei avere la versione francese per poter creare la patch (magari ci mettiamo d'accordo via PM).
Intanto ti chiedo di postare anche le dimensioni dei files, così posso vedere se la versione italiana è compatibile con quella francese. L'exe della versione italiana non funziona se abbinato ai files della versione inglese (va in crash), ma la cosa strana è che funziona viceversa. Ho trovato l'exe modificato di una versione francese (non mi è utile per la creazione patch visto che non esiste nel cd originale) e se messo sulla versione italiana funziona, ma fa vedere i testi in francese. La conferma almeno l'abbiamo: i files contengono tutto il testo, anche se sono leggermente diversi, ed è l'exe il responsabile della selezione della lingua. Prova intanto a sostituire solo l'exe... magari ci va grassa e basta quello. Se funziona passami il tuo francese che creo la patch.
Files allegati
-------------------- |
|
|
|
12 Jan 2010, 22:09
Messaggio
#13
|
|
|
Gruppo: Gamer Messaggi: 8 Iscritto il: 10 January 10 Utente Nr.: 17.288 SO Win2000 |
Allora, intanto posso dire che il gioco si avvia, il menu iniziale è in Inglese, il prologo si vede in Francese ma con sottotitoli in ITA!! ;)
Purtroppo, però, al momento di avviare la nuova partita, il gioco crasha con il seguente errore: CODICE The instruction at 0042d888 referenced memory at 4a484746 The memory could not be read from Click on OK to terminate the application In ogni caso, siamo sulla buona strada, direi....intanto ecco la lista dei files con le relative dimensioni: CODICE D:\ "FABLE_FRENCH" AUTORUN.EXE 91648 AUTORUN.INF 29 DECORS.DAT 21315402 DISK.ID 14 DOS4GW.EXE 265396 DSETUP.DLL 20992 DSETUP6E.DLL 34400 DSETUP6J.DLL 34288 DSETUPE.DLL 41984 DSETUPJ.DLL 41984 FABLE.EX_ 494699 FABLE.EXW 311808 HERO.DAT 4182577 HMIDET.386 83774 HMIDRV.386 317317 INSTALL.DAT 384241 INSTALL.EXE 164257 INTRO.IMX 45822473 MISC.DAT 1263146 OUTRO.IMX 20078128 PART1.DAT 7532618 PART2.DAT 6294786 PART3.DAT 6625131 PART4.DAT 2656363 PRESENT.IMX 6688109 SETUP.EX_ 159109 SETUP.EXE 100352 SETUP.INI 1591 SOS9503.DLL 105472 SOSLIBS3.DLL 76941 SOUNDS.DAT 11746305 SPEECH.DAT 224578458 TITLE.DAT 2104546 TITLE.WAV 8069182 DIRECTX\ DIR Per la versione Francese, vedo se riesco a fare qualcosa....mi pareva d'averla vista addirittura in giro per il web, qualche tempo fa.... Messaggio modificato da Tw@in 28 il 12 Jan 2010, 22:12 |
|
|
|
13 Jan 2010, 02:27
Messaggio
#14
|
|
Gruppo: SMod Messaggi: 14.545 Iscritto il: 20 January 06 Da: Bologna Utente Nr.: 2.653 Entropologo part-time BGE AG: Indy3 Arcade: Silpheed Free Roaming: Shadow of the Colossus RTS: Praetorians Playing Magari... SO Windows7 OGI Supporter |
Ieri ho avuto tempo di addentrarmi nei meandri
Ma a questo punto ho bisogno di una mano. DK? Syxtem? Alpo? andiamo per gradi: Di cosa abbiamo bisogno? che l'exe di fable faccia partire il gioco dalla dir corrente e non dal CD. Tecnicamente non è un crack, ma un hack, visto che non esiste protezione in fable, e leggendo il codice è previsto. Ho i 3 exe: francese (hackerato in modo che bypassi il cd check), italiano originale ed inglese originale tutti per windows. Sono binari compilati con Watcom. Ho provato a decompilarli con REC. Ha funzionato, il codice è molto chiaro. Ho trovato le variabili sia della selezione della lingua che del CD Check (tutto hardcoded, è per quello che i cfg e le chiavi di registro non influivano sulla lingua). Oltre tutti potremmo essere in grado di risolvere un bug lasciato dai programmatori per la versione italiana... Presenta il menù iniziale (nuovo gioco, opzioni ecc...) e quello ingame (inventario, vuoi uscire dalla partita) in inglese, pur essendoci il testo in chiaro. L'exe francese ha il testo completamente tradotto, difatti. ecco qui i passaggi chiave: CODICE L00404bdc: *(ebp - 0x70) = *(ebp - 4) - 5; if(*(ebp - 0x70) <= 0xc) { switch(*(ebp - 0x70)) { case 0: L00404bfc: L0042D921("\rENGLISH version selected\n"); *(ebp - 0xc) = 0x1f4; M0043f6f8 = 16384; goto L00404b1a; case 1: L0042D921("\rFRENCH version selected\n"); *(ebp - 0xc) = 0x1f4; M0043f6f8 = 16385; goto L00404b1a; case 2: L0042D921("\rGERMAN version selected\n"); *(ebp - 0xc) = 0x1f4; M0043f6f8 = 16386; goto L00404b1a; case 3: L0042D921("\rSPANISH version selected\n"); *(ebp - 0xc) = 0x1f4; M0043f6f8 = 16387; goto L00404b1a; case 4: L0042D921("\rITALIAN version selected\n"); *(ebp - 0xc) = 0x1f4; M0043f6f8 = 16388; goto L00404b1a; case 5: L0042D921("\rAutomatic playback mode selected\n"); *(ebp - 0xc) = 0x1f4; M0043646b = 1; goto L00404b1a; case 6: M0043646d = 1; goto L00404b1a; case 7: M0043646d = 0; goto L00404b1a; case 8: L0042D921("\rAll loading from current directory.\n"); *(ebp - 0xc) = 0x1f4; M00436488 = 1; goto L00404b1a; case 9: L0042D921("\rAll loading from cdrom directory.\n"); *(ebp - 0xc) = 0x1f4; M00436488 = 0; goto L00404b1a; case 0xa: goto L00404d2c; case 0xb: goto L00404d6a; case 0xc: M0043f625 = M0043f625 | 4; M0043646d = 0; goto L00404b1a; } goto L00404bfc; L00404d2c: if(*(ebp - 8) + 1 == *(ebp - 0x14)) { L0042D921("\rScene parameter incomplete\n"); *(ebp - 0xc) = 0x1f4; } else { *(ebp - 8) = *(ebp - 8) + 1; eax = *(( *(ebp - 8) << 2) + *(ebp - 0x18)); L0042D943(); M004481a0 = ax; goto L00404b1a; L00404d6a: if(*(ebp - 8) + 1 == *(ebp - 0x14)) { L0042D921("\rScene parameter incomplete\n"); *(ebp - 0xc) = 0x1f4; } else { *(ebp - 8) = *(ebp - 8) + 1; eax = *(( *(ebp - 8) << 2) + *(ebp - 0x18)); L0042D943(); M004481a8 = ax; } } } else { L0042D921("\rParameter not valid\n"); *(ebp - 0xc) = 0x1f4; } goto L00404b1a; L00404dd1: if(*(ebp - 0xc) != 0) { eax = 0x43bed6; L0042D9B0(); eax = *(ebp - 0xc); eax = L0042D9C0(); } L00404de9: si nota che il gioco prevede la selezione della lingua e della directory da cui far partire il gioco (medesima dell'exe o CD). Sono riuscito a modificare il path di modo che punti all'HD, ma con un escamotage: modificando la label del proprio HD in FABLE. Ci ho perso gli occhi con tutti quei rimandi, e non ho trovato un metodo più elegante, ma sono sicuro che se mi date una mano ci saltiamo fuori. Ho trovato anche la subroutine preposta al riconoscimento della dir, ma non riesco a postarla perchè il server interpreta il codice come malizioso. Nel file cercate "%c:\" altro codice interessante: CODICE /* 0x0048d32c 0 */ /* unknown */ void __imp__SetCurrentDirectoryA; /* 0x0048d32d 0 */ BOOL SetCurrentDirectoryA(LPCSTR); allego i 3 sorgenti. [attachment=5589:Fable_EXE_sources.rar] Ho scaricato il compiler OPEN Watcom, ma purtroppo non conoscendolo sono riuscito a fare poco. Secondo voi ci sono controindicazioni a creare l'exe con un altro compilatore? -------------------- |
|
|
|
13 Jan 2010, 10:31
Messaggio
#15
|
|
|
Gruppo: IAGTG Member Messaggi: 2.658 Iscritto il: 1 June 05 Da: Roma Utente Nr.: 1.733 SO Altro OGI Supporter ![]() Spolveratore (2) |
Ho scaricato il compiler OPEN Watcom, ma purtroppo non conoscendolo sono riuscito a fare poco. Secondo voi ci sono controindicazioni a creare l'exe con un altro compilatore? Scusate se rigiro la frittata, ma perché hackerare il programma per costringerlo a vedere una directory invece del cd, piuttosto che sfruttare uno dei tanti programmi che simulano un drive cd? Ciao, Alberto -------------------- --
alpobemp at libero punto it |
|
|
|
13 Jan 2010, 11:36
Messaggio
#16
|
|
Gruppo: SMod Messaggi: 14.545 Iscritto il: 20 January 06 Da: Bologna Utente Nr.: 2.653 Entropologo part-time BGE AG: Indy3 Arcade: Silpheed Free Roaming: Shadow of the Colossus RTS: Praetorians Playing Magari... SO Windows7 OGI Supporter |
Secondo me per l'utente copiare dei file e applicare una patch e' piu' facile che copiare-applicare-rimasterizzare-o creare l'immagine e montare.
Oltre tutto si puo' creare un setup che faccia tutto in automatico. -------------------- |
|
|
|
13 Jan 2010, 11:58
Messaggio
#17
|
|
Gruppo: SMod Messaggi: 14.545 Iscritto il: 20 January 06 Da: Bologna Utente Nr.: 2.653 Entropologo part-time BGE AG: Indy3 Arcade: Silpheed Free Roaming: Shadow of the Colossus RTS: Praetorians Playing Magari... SO Windows7 OGI Supporter |
Ci sono riuscito, ho fatto prima via Hex edit.
Avendo gia' l'exe francese hackerato, e avendo ottenuto la versione francese di Tw@in ho fatto un confronto dei due exe e ho trovato l'offset con la modifica (5 valori portati a 90). Ho aperto l'exe italiano (che non coincide per dimensioni o contenuto) e ho cercato somiglianze nel codice. Trovata la corrispondenza similare in un offset vicino ho approtato la modifica. Et voila'! Il caro vecchio Hex Workshop, non ti delude mai. ieri sera per prova ho creato la patch omnicomprensiva ENG-FRE to ITA. Purtroppo, se per la versione italiana l'audio e' in inglese, per la versione francese e' proprio in francese (purtroppo per noi, non certo per loro!)! Quindi la patch completa viene 120MB circa. Potremmo creare 3 patch separate: Eng to ita da 5 MB Fre to ita (solo testi e lascia il parlato in francese) da 5 MB Fre to ita da 120 MB che ne dite? -------------------- |
|
|
|
13 Jan 2010, 12:42
Messaggio
#18
|
|
Gruppo: UST Member Messaggi: 497 Iscritto il: 17 February 03 Utente Nr.: 2.153 SO Win95 |
Siete stati troppo veloci... non ho nemmeno avuto il tempo di postare tutto il codice assembly che vi avevo commentato per il check sul CD ^^"
-------------------- ![]() ![]() |
|
|
|
13 Jan 2010, 13:12
Messaggio
#19
|
|
Gruppo: SMod Messaggi: 14.545 Iscritto il: 20 January 06 Da: Bologna Utente Nr.: 2.653 Entropologo part-time BGE AG: Indy3 Arcade: Silpheed Free Roaming: Shadow of the Colossus RTS: Praetorians Playing Magari... SO Windows7 OGI Supporter |
Aspetta pure...
lo voglio lo stesso! posta posta... non sono ferrato in Assembly, quindi mi fa piacere vedere come hai operato. per prendere nota, ovviamente. -------------------- |
|
|
|
13 Jan 2010, 13:39
Messaggio
#20
|
|
Gruppo: UST Member Messaggi: 497 Iscritto il: 17 February 03 Utente Nr.: 2.153 SO Win95 |
Boh, vabbè...
CITAZIONE Sono riuscito a modificare il path di modo che punti all'HD, ma con un escamotage: modificando la label del proprio HD in FABLE. Per eludere il controllo sulla label del dispositivo è sufficiente andare all'offset 0x5CE8 e modificare i successivi due byte da 0x7521 a 0x9090. Evito di riportare le mie congetture su come trasferire la lettura dei file del gioco dal CD-ROM ad una cartella sull'HD, dato che il problema pare essere già stato risolto. Ah... tutti gli indirizzi fanno riferimento all'eseguibile che si trovava nell'allegato FABLE.RAR (l'ultimo allegato di TheRuler non mi si collega a nulla) Questo è il disassemblato completo della routine che controlla dove si trova il CD del gioco: ve lo metto in uno spoiler così il post sembra più sintetico. L'ho fatto un po' velocemente e non è commentato all'estremo, ma chi ci capisce un po' non dovrebbe avere molta difficoltà nel comprenderne i punti più importanti. CODICE Fase 0: Rileva tutti i drive presenti sul computer (floppy, dischi rigidi, cd-rom, penne usb, etc...) BEGTEXT:00406813 loc_406813: ; CODE XREF: sub_4067D7+1Fj BEGTEXT:00406813 2E FF 15 04 D2 48 00 call cs:GetLogicalDrives; Get bitmask representing BEGTEXT:00406813 ; the currently available disk drives BEGTEXT:0040681A 89 45 F0 mov [ebp+var_10], eax BEGTEXT:0040681D C7 45 F8 43 00 00 00 mov [ebp+var_8], 43h; SelectedDrive == "C:\" BEGTEXT:00406824 BEGTEXT:00406824 loc_406824: ; CODE XREF: sub_4067D7+5Bj BEGTEXT:00406824 83 7D F8 5A cmp [ebp+var_8], 5Ah; Check: if (SelectedDrive <= "Z:\") JUMP BEGTEXT:00406828 7E 0A jle short loc_406834; Vai a Fase 1 BEGTEXT:0040682A EB 52 jmp short loc_40687E; Vai a Fase 2 BEGTEXT:0040682C ; --------------------------------------------------------------------------- BEGTEXT:0040682C BEGTEXT:0040682C loc_40682C: ; CODE XREF: sub_4067D7:loc_40687Cj BEGTEXT:0040682C 8B 45 F8 mov eax, [ebp+var_8] BEGTEXT:0040682F FF 45 F8 inc [ebp+var_8] ; SelectedDrive == Drive successivo BEGTEXT:00406832 EB F0 jmp short loc_406824 BEGTEXT:00406834 ; --------------------------------------------------------------------------- Fase 1: Controlla i drive che sono dei CD-ROM (notare che poi se ne frega dei risultati ottenuti, e che poi comunque ricontrolla tutti i drive --> Codice inutile) BEGTEXT:00406834 BEGTEXT:00406834 loc_406834: ; CODE XREF: sub_4067D7+51j BEGTEXT:00406834 8B 45 F8 mov eax, [ebp+var_8] BEGTEXT:00406837 C6 44 28 89 00 mov byte ptr [eax+ebp-77h], 0; Drives[selectedIndex] == "invalid" BEGTEXT:0040683C 8B 4D F8 mov ecx, [ebp+var_8] BEGTEXT:0040683F 83 E9 43 sub ecx, 43h BEGTEXT:00406842 B8 01 00 00 00 mov eax, 1 BEGTEXT:00406847 D3 E0 shl eax, cl BEGTEXT:00406849 85 45 F0 test [ebp+var_10], eax BEGTEXT:0040684C 74 2E jz short loc_40687C BEGTEXT:0040684E 8B 45 F8 mov eax, [ebp+var_8] BEGTEXT:00406851 50 push eax BEGTEXT:00406852 B8 43 45 43 00 mov eax, offset aC ; "%c:\\" BEGTEXT:00406857 50 push eax BEGTEXT:00406858 8D 45 EC lea eax, [ebp+RootPathName] BEGTEXT:0040685B 50 push eax BEGTEXT:0040685C E8 47 75 02 00 call loc_42DDA8 BEGTEXT:00406861 83 C4 0C add esp, 0Ch BEGTEXT:00406864 8D 45 EC lea eax, [ebp+RootPathName] BEGTEXT:00406867 50 push eax ; lpRootPathName BEGTEXT:00406868 2E FF 15 00 D2 48 00 call cs:GetDriveTypeA BEGTEXT:0040686F 83 F8 05 cmp eax, 5 BEGTEXT:00406872 75 08 jnz short loc_40687C; Check: if (SelectedDriveType != "CD-ROM") JUMP BEGTEXT:00406874 8B 45 F8 mov eax, [ebp+var_8] BEGTEXT:00406877 C6 44 28 89 01 mov byte ptr [eax+ebp-77h], 1; Drives[selectedIndex] == "valid" BEGTEXT:0040687C BEGTEXT:0040687C loc_40687C: ; CODE XREF: sub_4067D7+75j BEGTEXT:0040687C ; sub_4067D7+9Bj BEGTEXT:0040687C EB AE jmp short loc_40682C BEGTEXT:0040687E ; --------------------------------------------------------------------------- BEGTEXT:0040687E BEGTEXT:0040687E loc_40687E: ; CODE XREF: sub_4067D7+53j BEGTEXT:0040687E ; sub_4067D7+154j BEGTEXT:0040687E C7 45 F4 00 00 00 00 mov [ebp+var_C], 0 BEGTEXT:00406885 C7 45 F8 43 00 00 00 mov [ebp+var_8], 43h; SelectedDrive == "C:\" BEGTEXT:0040688C BEGTEXT:0040688C loc_40688C: ; CODE XREF: sub_4067D7+C6j BEGTEXT:0040688C 83 7D F8 5A cmp [ebp+var_8], 5Ah; Check: if (SelectedDrive <= "Z:\") JUMP BEGTEXT:00406890 7E 0D jle short loc_40689F; Vai a Fase 2 BEGTEXT:00406892 E9 76 00 00 00 jmp loc_40690D ; Vai a "Errore: CD-ROM non trovato" BEGTEXT:00406897 ; --------------------------------------------------------------------------- BEGTEXT:00406897 BEGTEXT:00406897 loc_406897: ; CODE XREF: sub_4067D7:loc_40690Bj BEGTEXT:00406897 8B 45 F8 mov eax, [ebp+var_8] BEGTEXT:0040689A FF 45 F8 inc [ebp+var_8] ; SelectedDrive == Drive successivo BEGTEXT:0040689D EB ED jmp short loc_40688C BEGTEXT:0040689F ; --------------------------------------------------------------------------- Fase 2: Ottieni le informazioni di volume di ogni drive e cerca quello con etichetta "Fable" BEGTEXT:0040689F BEGTEXT:0040689F loc_40689F: ; CODE XREF: sub_4067D7+B9j BEGTEXT:0040689F 8B 45 F8 mov eax, [ebp+var_8] BEGTEXT:004068A2 50 push eax BEGTEXT:004068A3 B8 43 45 43 00 mov eax, offset aC ; "%c:\\" BEGTEXT:004068A8 50 push eax BEGTEXT:004068A9 8D 45 EC lea eax, [ebp+RootPathName] BEGTEXT:004068AC 50 push eax BEGTEXT:004068AD E8 F6 74 02 00 call loc_42DDA8 BEGTEXT:004068B2 83 C4 0C add esp, 0Ch BEGTEXT:004068B5 6A 00 push 0 ; nFileSystemNameSize BEGTEXT:004068B7 6A 00 push 0 ; lpFileSystemNameBuffer BEGTEXT:004068B9 6A 00 push 0 ; lpFileSystemFlags BEGTEXT:004068BB 6A 00 push 0 ; lpMaximumComponentLength BEGTEXT:004068BD 6A 00 push 0 ; lpVolumeSerialNumber BEGTEXT:004068BF 6A 20 push 20h ; nVolumeNameSize BEGTEXT:004068C1 8D 45 A8 lea eax, [ebp+VolumeNameBuffer] BEGTEXT:004068C4 50 push eax ; lpVolumeNameBuffer BEGTEXT:004068C5 8D 45 EC lea eax, [ebp+RootPathName] BEGTEXT:004068C8 50 push eax ; lpRootPathName BEGTEXT:004068C9 2E FF 15 08 D2 48 00 call cs:GetVolumeInformationA BEGTEXT:004068D0 85 C0 test eax, eax BEGTEXT:004068D2 74 37 jz short loc_40690B BEGTEXT:004068D4 BB 05 00 00 00 mov ebx, 5 BEGTEXT:004068D9 BA 48 45 43 00 mov edx, offset aFable_0; "FABLE" BEGTEXT:004068DE 8D 45 A8 lea eax, [ebp+VolumeNameBuffer] BEGTEXT:004068E1 E8 F2 74 02 00 call loc_42DDD8 ; Check_Drive_Label("FABLE",SelectedDriveLabel) BEGTEXT:004068E6 85 C0 test eax, eax BEGTEXT:004068E8 75 21 jnz short loc_40690B; Check: if (upcase(SelectedDriveLabel) != "FABLE") JUMP BEGTEXT:004068EA 8B 45 F8 mov eax, [ebp+var_8] BEGTEXT:004068ED 50 push eax BEGTEXT:004068EE B8 43 45 43 00 mov eax, offset aC ; "%c:\\" BEGTEXT:004068F3 50 push eax BEGTEXT:004068F4 B8 04 85 44 00 mov eax, offset unk_448504 BEGTEXT:004068F9 50 push eax BEGTEXT:004068FA E8 A9 74 02 00 call loc_42DDA8 BEGTEXT:004068FF 83 C4 0C add esp, 0Ch BEGTEXT:00406902 C7 45 FC 01 00 00 00 mov [ebp+var_4], 1 ; ReturnValue == SelectedDriveOK BEGTEXT:00406909 EB 2D jmp short loc_406938 BEGTEXT:0040690B ; --------------------------------------------------------------------------- BEGTEXT:0040690B BEGTEXT:0040690B loc_40690B: ; CODE XREF: sub_4067D7+FBj BEGTEXT:0040690B ; sub_4067D7+111j BEGTEXT:0040690B EB 8A jmp short loc_406897 BEGTEXT:0040690D ; --------------------------------------------------------------------------- BEGTEXT:0040690D BEGTEXT:0040690D loc_40690D: ; CODE XREF: sub_4067D7+BBj BEGTEXT:0040690D BA 4E 45 43 00 mov edx, offset aFableCdRomMiss; "FABLE CD-ROM missing!" BEGTEXT:00406912 B8 64 45 43 00 mov eax, offset aPleaseInsertTh; "Please insert the FABLE CD-ROM in any C"... BEGTEXT:00406917 E8 96 AB FF FF call sub_4014B2 ; ShowDialogBox(text,title) BEGTEXT:0040691C 85 C0 test eax, eax BEGTEXT:0040691E 75 07 jnz short loc_406927 BEGTEXT:00406920 C7 45 F4 01 00 00 00 mov [ebp+var_C], 1 BEGTEXT:00406927 BEGTEXT:00406927 loc_406927: ; CODE XREF: sub_4067D7+147j BEGTEXT:00406927 83 7D F4 00 cmp [ebp+var_C], 0 BEGTEXT:0040692B 0F 84 4D FF FF FF jz loc_40687E ; if (BottonClick == "Retry") JUMP BEGTEXT:00406931 C7 45 FC 00 00 00 00 mov [ebp+var_4], 0 ; ReturnValue == SelectedDriveFAIL BEGTEXT:00406938 BEGTEXT:00406938 loc_406938: ; CODE XREF: sub_4067D7+37j BEGTEXT:00406938 ; sub_4067D7+132j BEGTEXT:00406938 8B 45 FC mov eax, [ebp+var_4] BEGTEXT:0040693B 89 EC mov esp, ebp BEGTEXT:0040693D 5D pop ebp BEGTEXT:0040693E 5F pop edi BEGTEXT:0040693F 5E pop esi BEGTEXT:00406940 5A pop edx BEGTEXT:00406941 59 pop ecx BEGTEXT:00406942 5B pop ebx BEGTEXT:00406943 C3 retn -------------------- ![]() ![]() |
|
|
|
13 Jan 2010, 13:50
Messaggio
#21
|
|
Gruppo: SMod Messaggi: 14.545 Iscritto il: 20 January 06 Da: Bologna Utente Nr.: 2.653 Entropologo part-time BGE AG: Indy3 Arcade: Silpheed Free Roaming: Shadow of the Colossus RTS: Praetorians Playing Magari... SO Windows7 OGI Supporter |
Grazie Syx!
con che programma lo hai disassemblato? Ho contattato qualche giorno fa l'autore francese dell'hack. Non si ricordava come avesse fatto di preciso (sono passati anni) ma mi disse che bastava mettere noop tutta la routine di check del CD. Io ci ho provato, ma non riuscendo a ricompilare ero fermo. Congettura simile? ottimo lavoro syx! Sicuramente piu' professionale del mio ;-) -------------------- |
|
|
|
13 Jan 2010, 14:16
Messaggio
#22
|
|
Gruppo: UST Member Messaggi: 497 Iscritto il: 17 February 03 Utente Nr.: 2.153 SO Win95 |
con che programma lo hai disassemblato? Sempre e solo IDA.bastava mettere noop tutta la routine di check del CD. Congettura simile? Beh, sì, in questo caso i NOP diventano 5, però la mia strada era un po' più complicata. Il rischio infatti era che il percorso sul drive individuato, venendo considerato poi per l'accesso ai file, potesse provocare delle eccezioni nel caso non avesse puntato a percorsi corretti. E temevo che quella routine servisse sì per effettuare il check sulla label del Drive CD-ROM, ma anche per memorizzare da qualche parte il percorso dei file del disco da leggere (cosa che infatti fa)... perciò bypassare completamente quella funzione poteva voler dire non far sapere al programma dove cercare i files.Tramite i NOP che ho indicato, invece, il programma comunque faceva i propri lavori... e poi restituiva il C:\ come "percorso del cd-rom" (poichè è il primo drive che viene esaminato e con l'hack viene immediatamente accettato come valido). Poi ovvio, bisognava modificare le cose per evitare di dover buttare i file direttamente in C:\ (magari in una sottocartella), ma questo dipendeva anche dal contenuto del CD-ROM, e senza avere il gioco era difficile fare delle prove... così ho preferito non andare oltre nelle varie ipotesi di lavoro e "spiegare" direttamente il codice assembly per fare un po' decidere a voi. Non so se si è capito un po' il ragionamento che c'è stato dietro... -------------------- ![]() ![]() |
|
|
|
13 Jan 2010, 14:43
Messaggio
#23
|
|
Gruppo: SMod Messaggi: 14.545 Iscritto il: 20 January 06 Da: Bologna Utente Nr.: 2.653 Entropologo part-time BGE AG: Indy3 Arcade: Silpheed Free Roaming: Shadow of the Colossus RTS: Praetorians Playing Magari... SO Windows7 OGI Supporter |
Sei stato chiarissimo, come sempre.
E' stato possibile mettere NOP tutta la routine di check CD secondo me perche' il precedente caso prevedeva gia' una soluzione: L0042D921("\rAll loading from current directory.\n"); I sorgenti che ho linkato prima effettuivamente sono stati cancellati dal server. Non so come mai. Per ricompilare cosa avresti usato? -------------------- |
|
|
|
13 Jan 2010, 15:00
Messaggio
#24
|
|
Gruppo: UST Member Messaggi: 497 Iscritto il: 17 February 03 Utente Nr.: 2.153 SO Win95 |
Oddio... io non avrei proprio ricompilato. Avrei modificato il codice direttamente da editor esadecimale (o al limite con HIEW, che ti permette di scrivere nell'eseguibile direttamente in asm).
Il processo di "decompilazione/ricompilazione" in genere non è mai troppo sicuro poichè intanto non è detto che il file globalmente sia stato decompilato correttamente. Inoltre spesso e volentieri non viene decompilato tutto il file, ma solo ciò che viene riconosciuto. Per fare un esempio, anche IDA non disassembla automaticamente l'intero file (per mille ragioni), per cui non è possibile riassemblare il programma partendo dal codice che ha estrapolato. Inoltre la ricompilazione potrebbe far variare gli indirizzi di memoria precedentemente fissati: i nuovi potrebbero non essere più "compatibili" con risorse esterne come .dll o altro... Insomma, in genere la decompilazione può essere utile nel caso si voglia avere qualcosa di più semplice da leggere rispetto al codice asm, ma non ho mai sentito di gente che abbia usato questi strumenti per riscrivere le stesse applicazioni che erano state decompilate. -------------------- ![]() ![]() |
|
|
|
13 Jan 2010, 22:32
Messaggio
#25
|
|
|
Gruppo: Gamer Messaggi: 240 Iscritto il: 10 April 09 Utente Nr.: 16.517 BGE Monkey island 2 Playing jack orlando director's cut SO BeOS |
Anche la mia è quella inglese semplice della telstar: "Quickthorpe's village is the only truly
civilized habitation on Balkhane. He has spent all of his young life within these walls"... :( -------------------- Lui è Ricardo, il Re Leone dagli occhi d'argento.
|
|
|
|
![]() ![]() |
| Versione Lo-Fi | Oggi è il: 31st October 2026 - 15:06 |