Aller au contenu


Fall.Exe


  • Veuillez vous connecter pour répondre
119 réponses à ce sujet

#26 Porygon

Porygon

Posté 12 août 2012 - 13:27

Mais si c'est le seul moyen de ne pas avoir trop de texte abrégé à mort il faudra peut-être y songer car vu la complexité du problème c'est ce n'est pas pour tout de suite aussi.

#27 Ancestral Ghost

Ancestral Ghost

    Chasseur furtif


Posté 12 août 2012 - 13:35

Oui, enfin, temps que DaggerXl n'est pas vraiment jouable, ce n'est pas trop la peine de mettre du temps là dedans. Et vu les disponibilités de Lucius, Il y a des chance qu'on doivent encore attendre quelques années.

De plus, si on arrive à traduire directement, il n'y aurra normalement rien de plus à faire pour que ce soit compatible avec DaggerXL.

#28 abg

abg

    L'ABG pour les civilisés


Posté 12 août 2012 - 16:21

Rationnellement, on peut espérer que Lucius externalisera ces chaînes.

Mais en attendant, comme dit Ancestral, on parle bien du Daggerfall de Bethesda, pas d'un hypothétique remake. Ce problème, il faut qu'on trouve à le résoudre... ou qu'on vive avec...
Les russes n'ont pas été confronté à ça ?
Antoninus Bibulus Glaber
Coaching de PNJs chez Morrowind Renaissance

#29 Porygon

Porygon

Posté 12 août 2012 - 17:32

Voir le messageabg, le 12 août 2012 - 16:21, dit :

Les russes n'ont pas été confronté à ça ?

Si mais il ont fait avec comme nous, ça a vraiment l'air compliqué de changer ces valeurs.

#30 Daneel53

Daneel53

Posté 31 août 2012 - 19:57

Un ch'ti message en passant, histoire de dire qu'hier soir j'ai utilisé un nouvel outil de désassemblage sur Fall.exe, histoire de situer le code qui affiche nos fameuses chaines de caractères et de trouver la encore plus fameuse table d'offsets, mais nada, peau de zebi, bernique, chou blanc !

En fait le désassembleur ne traite que la toute première partie de Fall.exe et ignore royalement les 90% qui suivent... et où se trouvent nos chaînes, bien entendu. L'impression que ça me donne est qu'il traite le code de DOS/32A qui se trouve en tête de fichier et non réellement le code de Daggerfall qui suit, mais ça n'est qu'une impression.

Bref, c'est pas gagné ! A suivre, lentement et au gré de mes envies car ces essais de désassemblages ne sont pas des plus passionnants vu les échecs répétés, mais d'un autre côté ces échecs répétés sont suffisamment frustrants pour entretenir la flamme. On verra...  :umnik:

#31 Ancestral Ghost

Ancestral Ghost

    Chasseur furtif


Posté 31 août 2012 - 21:30

Utilises une version VO sans Dos32, peut être.

#32 Daneel53

Daneel53

Posté 02 septembre 2012 - 21:20

Mouaip, pourquoi pas. Je viens de réessayer avec d'autres outils, mais c'est pire.

Mais par ailleurs je pense que j'en reviens aussi à un problème déjà évoqué, à savoir que je ne peux pas débugger Fall.exe, programme 16 bits, dans un environnement 64 bits. Là je fais mes essais sous W7 64 bits avec Sandboxie pour ne pas polluer mon PC en essayant des outils de sources diverses et parfois incertaines, mais quand je veux lancer le programme sous débugger, je me fais jeter pour exécution impossible avec un OS 64 bits.

Je vais essayer la même chose sous XP 32 bits, et si ça ne fonctionne toujours pas il me faudra donc bien installer, comme tu me l'avais suggéré, un Win98SE dans une machine virtuelle (VirtualBox) et voir ce que ça donne... si mes desassembleurs fonctionnent sous W98 !

On n'est pas rendus...   :umnik:

Je n'ai pas de meilleurs résultats sous XP 32 bits. Le désassemblage de Fall.exe par IDA 5.0 merdoie toujours autant (seul le tout début du programme est lu), et son exécution par le débugger de W32DASM est toujours impossible car il ne trouve pas le point d'entrée du programme. Et pourtant W32DASM n'est pas si mauvais que ça puisque le débuggage de Dosbox fonctionne si bien que je peux lancer Daggerfall par son intermédiaire. Mais ce n'est pas le code de Dosbox que je veux debugger mais celui de Fall.exe, donc je l'ai toujours dans l'os.

Sans doute faut-il en revenir aux versions 16 bits de WDASM, mais ces dernières sont très difficiles à trouver de nos jours. J'ai dû avoir ça en 2000 pour faire sauter la protection de Pharaon (piratage perso d'un jeu que j'avais acheté, pour le plaisir de voir si j'en étais capable et pour passer le temps, jamais diffusé sur Internet vu que c'était juste pour le fun), mais depuis le temps, ce programme existe-t-il encore dans un recoin secret de mes sauvegardes historiques ? Et puis Pharaon, sorti fin 1999, tournait sous W98SE alors que Daggerfall est sorti en 1996 pour DOS... et Windows 95. Bon, faut voir. Ah, l’archéologie !

Modifié par Daneel53, 31 août 2012 - 22:38.


#33 Porygon

Porygon

Posté 02 septembre 2012 - 21:48

Oulala tout ça à l'air bien compliqué effectivement, mais que te faut-il en fait : Un logiciel pour décompiler en même temps que le jeu tourne un peu comme cheat engine &Cie ou tu n'as pas besoin de le faire tourner en fond ?

#34 Daneel53

Daneel53

Posté 02 septembre 2012 - 23:25

Un debugger permet en effet de faire tourner un programme, mais avec la possibilité de faire du pas à pas ou, mieux dans le cas précis, de le faire s'arrêter quand il lit une chaîne de caractères que tu lui as indiquée, ce qui permet de voir comment il est arrivé à la chaîne en question. Mais je ne trouve pas pour l'instant de débugger capable de faire ça avec Fall.exe, qui fut écrit avec un DOS extender qui fait des choses très particulières que les programmes que j'ai exhumés ne comprennent pas.

D'après un message perso de Ferital au mois de juillet, le DOS extender recalcule les adresses en mémoire après chargement, mais il ne peut le faire qu'à partir d'une table d'offsets qui donne les adresses relatives des chaines entre elles. Par exemple, les premières chaines de la ressource 1 de Fall.exe font respectivement 7, 3E (62), 2E (46), 15 (21) et 14 (20) octets, donc on devrait trouver quelque part un tableau qui liste ces longueurs ("07 3E 2E 15 14..." ou "07 00 3E 00 2E 00 15 00 14 00...") ou qui contient une liste d'adresses séparées par ces valeurs ("07 00 45 00 73 00 88 00 9C 00..."). Mais les quelques recherches manuelles que j'ai pu faire ce soir avec un éditeur hexa dans Fall.exe ne m'ont pas permis de trouver une telle liste. Reste la solution d'écrire un programme qui fouille le fichier dans tous les sens jusqu'à ce qu'il arrive à trouver quelque part une liste de valeurs compatibles de ces écarts.

J'vous l'ai dit : on n'est pas rendus...  :umnik:

#35 Porygon

Porygon

Posté 03 septembre 2012 - 09:06

Ah d'accord je vois, du coup est-ce que ça ne faciliterais pas la tâche si l'on passe via DaggerXL ? Il ne se sert pas par DosBox ni même de DOS tout court, mais je crois qu'il utilise OpenGL. Du coup peut-être que ça enlèvera quelques soucis et aussi la possibilité d'utiliser un debugger 32 bits non ? C'est une idée comme ça je n'ai pas essayé car dans ce domaine je n'y connais pas grand chose.

Modifié par Porygon, 03 septembre 2012 - 09:07.


#36 abg

abg

    L'ABG pour les civilisés


Posté 03 septembre 2012 - 09:10

Voir le messagePorygon, le 03 septembre 2012 - 09:06, dit :

Ah d'accord je vois, du coup est-ce que ça ne faciliterais pas la tâche si l'on passe via DaggerXL ?

Je n'y connais pas grand chose moi non plus mais... DaggerXL ne peut rien pour nous. Ce n'est pas une surcouche, une émulation ou quoi que ce soit, mais une réécriture. C'est sûr qu'on doit pouvoir le debugger mais ça nous fera une belle jambe pour connaître les tables d'adresses de FALL.EXE :grin:
Antoninus Bibulus Glaber
Coaching de PNJs chez Morrowind Renaissance

#37 Porygon

Porygon

Posté 03 septembre 2012 - 09:22

Voir le messageabg, le 03 septembre 2012 - 09:10, dit :

Voir le messagePorygon, le 03 septembre 2012 - 09:06, dit :

Ah d'accord je vois, du coup est-ce que ça ne faciliterais pas la tâche si l'on passe via DaggerXL ?

Je n'y connais pas grand chose moi non plus mais... DaggerXL ne peut rien pour nous. Ce n'est pas une surcouche, une émulation ou quoi que ce soit, mais une réécriture. C'est sûr qu'on doit pouvoir le debugger mais ça nous fera une belle jambe pour connaître les tables d'adresses de FALL.EXE :grin:

Hum je ne suis pas tout à fait d'accord quant au fait que ça soit une réécriture car pour moi ça veux dire qu'on a pas besoin de l'exécutable du jeu or ici il nous le demande et vérifie même si ça correspond bien à une certaine version précise, mais peut-être que je me trompe je n'en sais rien :mosc: .

#38 abg

abg

    L'ABG pour les civilisés


Posté 03 septembre 2012 - 09:35

Sous réserves... Il a probablement besoin de FALL.EXE pour aller y pêcher, justement, les chaînes de caractères.
Mais ça, on sait déjà faire...
Antoninus Bibulus Glaber
Coaching de PNJs chez Morrowind Renaissance

#39 Ancestral Ghost

Ancestral Ghost

    Chasseur furtif


Posté 03 septembre 2012 - 11:23

DaggerXl ne fait qu'aller piocher les chaines de caractère dans l'Exe (Et il ne sait le faire que pour une version précise en plus). Par contre Lucius a surement du étudier Fall.exe pour le réécrire et donc il sait peut être comment il fonctionne.

#40 Daneel53

Daneel53

Posté 04 septembre 2012 - 23:34

3 septembre

Quoiqu'il en soit j'ai l'intention cette semaine d'utiliser la force brute du PC pour fouiller Fall.exe de fond en comble et chercher une suite d'octets qui ressemble à une suite d'adresses croissantes séparées par les tailles de quelques chaines successives de la ressource 1.
Autrement dit, s'il y a dans les ressources 1 cinq chaines successives de longueurs respectives 6, 3, 10, 5 et 12 caractères, je vais glisser depuis le début du fichier octet par octet pour chercher une suite d'octets (ou plutôt de mots de 16 bits) ayant la relation "valeur1", "Valeur1+6", "Valeur1+9", "Valeur1+19, "Valeur1+24", "Valeur1+36". Si j'arrive à trouver ça, je devrais être dans la table d'offsets !
C'est l'avantage d'un PC : c'est lui qui va fouiller les 1802000 octets du fichier pour faire cette opération.

Edit du 5 septembre à 00:30

Bon, c'est vraiment très étrange.

J'étais sur le point de crier victoire car je pense avoir localisé quelques offsets comme par exemple la liste des états des objets (de cassé à New), une liste de matériaux (de eboni à cristal) ou la liste des huits points cardinaux (de Nord à NordOuest). Car il serait quand même très étonnant d'avoir mis la main trois fois sur six adresses successives ayant les valeurs attendues suivant la formule ci-dessus et que ça ne corresponde pas aux offsets des chaines en question.

Oui mais voilà. Il faut faire la preuve que c'est bien ça, alors avec mon éditeur hexa j'ai modifié quelques adresses pour essayer de mettre en évidence un défaut d'affichage, mais rien à faire, je n'arrive pas à faire afficher "uir" au lieu de "Cuir" ou "ud-Est" à la place de "Sud-Est". J'ai même fini par mettre la même adresse sur les huit directions, mais ça n'a rien changé !!!

Alors soit je n'ai pas de chance et je tombe systématiquement sur des propos ou des matériaux enregistrés dans la sauvegarde (mais ça ne semble pas être le cas en fouillant les fichiers de sauvegarde), soit les offsets ne sont pas ce que je crois mais comme il y a à chaque fois une seule suite compatible dans tout le fichier, je ne vois pas comment, soit il y a un phénomène qui m'échappe totalement.

Bon, la nuit porte conseil paraît-il, je reprendrai mes essais demain. En tout cas si j'ai bien situé des offsets, il est clair qu'il n'y a pas une table d'offsets pour la ressource 1 mais une multitude, vu que les trois suites que j'ai trouvées sont dans des endroits bien différents séparés par des zones qui ne sont clairement pas des listes d'offsets. C'est pour dire que la modification de tout ça ne pourra pas être faite de façon automatique mais à la mimine. Ca promet !

Modifié par Daneel53, 04 septembre 2012 - 23:35.


#41 Porygon

Porygon

Posté 05 septembre 2012 - 06:42

Wow impressionnant Daneel !
Donc d'après ce que tu nous explique ils n'ont pas fait une table générale mais plusieurs dizaines regroupés par "thème" c'est ça ?

Sinon peux-tu donner les offsets correspondant à ce que tu penses être la table des points cardinaux et des matériaux, histoire que je vois à quoi ça ressemble.

#42 abg

abg

    L'ABG pour les civilisés


Posté 05 septembre 2012 - 08:26

Voir le messagePorygon, le 05 septembre 2012 - 06:42, dit :

Donc d'après ce que tu nous explique ils n'ont pas fait une table générale mais plusieurs dizaines regroupés par "thème" c'est ça ?

Ou pire : Une table "mouvante"... un exe qui s'automodifie en mémoire... une table qui est située ailleurs que dans l'exe... Des exemples apocalyptiques on peut en trouver !
On est pas sorti de l'auberge :(

Avec un peu de chance, on va inspirer un nouveau strip à Matsch, s'il passe par là : Les PFDistes font tourner les tables; esprit de Julian Lefay es-tu là ? Un coup pour oui, deux coups pour non :D
Antoninus Bibulus Glaber
Coaching de PNJs chez Morrowind Renaissance

#43 Daneel53

Daneel53

Posté 05 septembre 2012 - 12:57

Bonjour,
Je viens de refaire quelques essais rapides après le café, et il n'y a pas de doute sur le fait que j'ai trouvé des tables d'offsets.
Là je viens de mettre en évidence à partir de l'octet 1802952 de Fall.exe une suite d'offsets qui couvrent les entrées 1328 Roi à 1339 Lady, et les 4 entrées suivantes (de Alik'r Desert à Daggerfall Bluffs) continuent la suite. Donc une suite d'adresses qui couvre 16 entrées successives des Ressources 1, je considère que le concept est validé !
Reste à réussir à modifier ces offsets pour en voir les effets, et c'est là que j'ai échoué cette nuit. Peut-être m'y suis-je mal pris, la fatigue... Je referai donc des essais de modifs ce soir.

Pour info, un offset tient sur 4 octets dont deux sont à 00 00 et les deux suivants (précédents ?) à l'envers (à la sauce Intel). Donc par exemple on peut trouver 00 00 F8 00 puis 00 00 06 01 : ce sont les chiffres hexa 00F8 (248) et 0106 (262) écrits sur 32 bits, et ces deux valeurs sont séparées de 14 octets, ce qui indique une chaine de 13 octets suivie de son 0 séparateur habituel.
Dans l'exemple ci-dessus, les premiers offsets depuis 1802952 font 9F 3F, A4 3F, AA 3F et AF 3F, ce qui donne des différences de 5, 6 et 5, ce qui correspond bien aux tailles des chaines anglaises King (4), Queen(5) et Duke(4) suivies de leur zéro.

Pour info complémentaire, suite à mes essais d'hier soir, les offsets pour les entrées suivantes :
  • Cassé à Peu utilisé commence en 1776398
  • Nord à Sud-Ouest commence en 1776918
  • Eboni à Cristal commence en 1025676
Voilà, si vous arrivez à modifier une valeur d'offset et à voir un résultat dans le jeu, faites le moi savoir. Pour ma part, je vais compléter mon programme ce soir pour essayer de me dresser la liste des tables d'offsets avec les entrées correspondantes : faut être ambitieux !

A suivre...

#44 Porygon

Porygon

Posté 05 septembre 2012 - 15:34

Bon je n'ai pas compris grand chose mais je vais aller fouiner tout ça quand même. En tout cas remarquable travail tu as vraiment trouvé une aiguille dans une botte de foin ça on peut le dire !




Après quelques essais rien de concluant, si ce sont bien les tables tant recherchées alors elle doivent pouvoir se modifier (normalement) ce que j'ai fais mais le problème vient après pour essayer. Il faut nécessairement dépasser l'espace réservé ce qui est impossible a faire avec le logiciel, pas grave on rajoute un octet à la main on lance et là surprise le jeu ne démarre même pas. Ca m'était déjà arrivé en changeant deux ou trois choses. Du coup je suis en train de me demander si il n'existerais pas une autre table qui elle vérifie la taille à l'octet près de FALL.EXE et si elle diffère par rapport d'une certaine référence le jeu ne se lance pas. Et le problème ne vient pas du fait d'avoir changé la table car après l'avoir fait j'ai lancé le jeu et tout fonctionnait, après ça vient peut-être de moi qui ait un problème avec mon éditeur hexa (très basique).

#45 Daneel53

Daneel53

Posté 06 septembre 2012 - 12:18

Le but du jeu ne consiste pas à ajouter quoi que ce soit mais à modifier les valeurs de ces tables pour que le logiciel lise un octet ou deux devant ou derrière ce pour quoi il est programmé.
Par exemple, en prenant les valeurs de mon exemple ci-dessus, si je remplace à l'adresse 1802952 de Fall.exe les valeurs 9F 3F par A0 3F, le programme devrait lire "oi" (version française) et non "Roi" puisque je lui indique de commencer un octet plus loin. Cette façon de faire ne fait pas planter le soft... mais mes essais d'hier soir n'ont rien donné, c'est comme si je n'avais rien changé !? Erreur de procédure, peut-être, ou mauvais choix d'offset, je ne sais. Et c'est pourquoi il me faudra faire des essais plus exhaustifs à une heure décente où j'ai tous mes esprits.

Mais pour l'instant, comme indiqué ce midi, je vais rajouter du code à mon programme dans le but de dresser une carte exhaustive des offsets potentiels des 2500 entrées des Ressources 1. Alors, à l'attaque !   :paladin:

Edit du jeudi 6, 14h:

Pas de tests complémentaires hier soir car j'ai commencé à modifier substantiellement mon code.

Auparavant je me contentais de lui indiquer à la main une suite de 6 différences d'entrées progressives (6, 6+12, 6+12+5... suivant les tailles des chaines visées que je choisissais au pif) et je laissais le programme fouiller Fall.exe du premier au dernier octet pour trouver une suite correspondante (éventuellement partielle). Mais désormais je veux partir des entrées elles-même, dont les tailles sont stockées lors de la lecture de Fall.exe et, de la première à la dernière, fouiller Fall.exe et faire cracher dans un fichier texte externe toutes les suites d'offsets compatibles avec la longueur de la table et les entrées concernées. Car il faudra bien être un jour exhaustif et savoir où se trouve l'offset de telle ou telle entrée.

Par exemple, pour reprendre la suite partant de Roi mise en évidence hier, je ne sais pas jusqu'où elle va car il n'y a pas de raison pour que ça s'arrête à Daggerfall Bluffs puisqu'il y a d'autres régions derrière (et la suite commençait peut-être avant Roi, d'ailleurs). Mon futur programme parcourra la suite jusqu'à trouver à partir de quelle entrée ça ne va plus, et sauvegardera le fait qu'il existe une table cohérente située à telle adresse qui couvre les entrées X à Y, en donnant au passage l'adresse de l'offset de chacune des entrées concernées.

La moulinette automatique est en cours de codage, ça sortira un de ces jours prochains suivant mon temps libre et le temps nécessaire pour la mettre au point. Et je n'ai aucun doute sur le fait qu'il en résultera pas mal de solutions multiples qu'il faudra lever à la main...

Modifié par Daneel53, 05 septembre 2012 - 20:00.


#46 Porygon

Porygon

Posté 06 septembre 2012 - 18:49

Bon j'ai fait aussi quelques essais mais rien, par contre il y a une chose que j'ai remarqué c'est pour ces entrées : "Eboni à Cristal commence en 1025676"  elles sont correctes mais à un près, c'est à dire ebony prend 5 caractères mais la différence fait 6 (D4 40 0A 00 DA 40 0A), même chose pour leather 7 alors qu'on obtient 8 (DA 40 0A E2 40 0A) et ainsi de suite est-ce normal ou alors ce ne sont pas les bonnes tables ? J'ai remarqué ça aussi pour les points cardinaux du moins pour north.

Modifié par Porygon, 06 septembre 2012 - 18:49.


#47 Daneel53

Daneel53

Posté 06 septembre 2012 - 19:54

C'est parce que les tailles affichées dans DFEXEEDT donnent les tailles de chaines réellement disponibles, vu que toutes les chaines dans Fall.exe se terminent (et sont donc séparées) par un 0. Donc effectivement le mot anglais Ebony fait cinq lettres, donc DFEXEEDT te dit 5, mais comme dans le fichier le mot est suivi d'un 0 séparateur, les adresses des deux mots successifs sont séparées de 6 octets. CQFD !

Si tu vas voir avec un éditeur héxa le paquet de Ressources 1 qui commence à l'adresse 0x1A4B1B (1723163), tu comprendras tout de suite.

Modifié par Daneel53, 06 septembre 2012 - 20:02.


#48 Porygon

Porygon

Posté 06 septembre 2012 - 20:17

Ah d'accord donc ça prend bien en compte l'espace qui sépare les chaînes entre elles. Par contre tout comme toi j'ai essayé du coup de réduire les tables pour couper les mots mais ça n'a pas l'air de fonctionner, j'ai tenté sur tout les matériaux normalement.

#49 Daneel53

Daneel53

Posté 07 septembre 2012 - 01:30

Gasp ! J'espérais avoir fait une erreur de manip avant hier durant mes essais mais je vois que tu ne fais pas mieux que moi. C'est effectivement extrêmement déconcertant... D'autant plus que le jeu va réellement lire dans la table de ressources puisque si au lieu de modifier l'offset présumé tu profites de la place disponible derrière Cuir pour décaler "Cuir" de deux octets vers la droite et ajouter "te" derrière "Eboni", et bien le jeu te met "Cuirasse e", ce qui est normal puisque désormais le "e" final de "Ebonite" a pris la place du "C" de "Cuir".

Pourtant il n'y a qu'un seul endroit dans Fall.exe où la suite d'offsets est conforme aux tailles des six mots suivant Eboni, donc ça ne peut pas être ailleurs. Là, je patauge... Bon, je vais quand même poursuivre mon programme, on verra bien. Une idée géniale finira peut-être par s'allumer dans nos cerveaux.  :umnik:

Je crois que j'ai trouvé ! En fait Eboni serait la fin de la suite de huit mots qui commence à Fer, et c'est une nouvelle suite qui commence à partir de Cuir et là ça pourrait se trouver à l'offset 1776354 et non 1025680. Et si on tape pas dans les bons offsets, ça expliquerait nos tests infructueux.

Jette un coup d'oeil sur le fichier joint, et ça devrait te donner des ouvertures. En principe, parmi les suites d'offsets candidates, les suites les plus longues sont les bonnes... et là ça s'enchaine bien depuis l'entrée 600 !

Fichier(s) joint(s)


Modifié par Daneel53, 07 septembre 2012 - 01:32.


#50 Porygon

Porygon

Posté 07 septembre 2012 - 07:09

Je viens de voir ton fichier texte mais je n'arrive toujours pas a obtenir des résultats même si les listes s'enchainent effectivement bien. Après peut-être que je ne m'y prend pas très bien aussi, mais j'ai beau réduire les tables à deux octets seulement le nom s'affiche toujours en entier.




0 utilisateur(s) li(sen)t ce sujet

0 membre(s), 0 invité(s), 0 utilisateur(s) anonyme(s)