.

 

Accueil

Comment faire

Les programmes

Les liens

E-mail

ICQ : 46579252

AIM : KaKiSLoS

    
    Ce site utilise PHP-XS
     
 

Comment faire ?

 
     
 
6) Traduire avec un désassembleur (:o) :

Je vais présenter ici une méthode pas très catholique que j'ai élaboré qui m'a permis de faire la traduction INTÉGRALE de Cathy dans sa version 2.9.1 .
À noter que quand elle est faite sous Windows 98 le programme ne fonctionne pas sur tous les systèmes (erreur dans Windows 2000 et XP) il faut dans ce cas faire la traduction directement sous ceux-ci (dans ce cas il fonctionnera aussi sous les versions antérieures) ou alors éditer les sections et réaligner le fichier pour qu'il re-fonctionne sous ces systèmes et d'autre part quand il est rouvert dans le désassembleur tous les pointeurs de string ont disparu ...
Cette méthode ne fonctionne pas sur les programmes compilés en Visual Basic (parce qu'il n'y a pas de strings) et en Delphi (pas encore de solution).
N'étant pas professionnel de l'informatique sans aucunes connaissances en programmation et ne pratiquant qu'en simple amateur je n'ai pas encore trouvé la solution à ce problème alors si vous êtes plus au fait du format de fichier PE ça serait très gentil de m'orienter vers la solution qui me permettra de finaliser et de valider le tutorial ci-dessous ;).

Tutorial :

Outils : AXE et Win32DASM8.9 (ou d'autres assurant les mêmes fonctions)
Cible : Cathy v2.9.1

Le but de ce tutorial est de montrer comment changer une ligne de texte en anglais (ou une autre langue) pour la traduire en français quand cette ligne n'est pas accessible par les programmes éditeurs de ressources comme ResHacker ou eXeScope et surtout si la traduction demande plus de place qu'il y en a.
Ex : "Choose directory" par "Choisir le répertoire :" que l'on voit en cliquant sur l'onglet "Catalog" puis sur le bouton "...").

Cette opération peut sembler facile, en effet on peut penser qu'il suffit de l'ouvrir dans un éditeur hexadécimal ou même dans un simple éditeur de texte ...
Seulement changer "Choose directory" par "Choisir le répertoire :" (16 caractères par 23 caractères donc 7 caractères de plus) provoquera soit une corruption par un éditeur de texte soit un recouvrement de données par un éditeur hexadécimal ce qui fait que l'exécutable ne fonctionnera plus dans le premier cas et que le but ne sera pas atteint dans le second ...

Donc voilà comment on pourrait procéder, cette solution se base sur la condition qu'il y a de la place dans l'exécutable, si il n'y en a pas il faudra ajouter une section pour en créer.

Procédure :
------------


On ouvre l'EXE dans AXE et on fait une recherche sur "choose directory" dans le string ANSI cela nous amène à l'offset 00011378, on note cette valeur.
Maintenant on ouvre l'EXE dans WinDASM et on fait la même recherche que dans AXE dans notre cas il n'y a qu'une correspondance ;).
On arrive à :

* Possible StringData Ref from Data Obj ->"Choose Directory"
|
:00405FAD C744241C78134100 mov [esp+1C], 00411378

offset de la commande
commande en hexadécimal
expression de la commande en ASM (Assembleur)
adresse cible de la commande


On constate par rapport à l'adresse trouvée dans AXE :
00011378 qu'on découpera en quatre paires pour plus de clarté : 00 01 13 78
Dans la ligne 2) l'adresse est lue "à l'envers" et est additionnée à l'ImageBase ==> 00011378 + 00400000 ce qui nous donne : 78134100 ==> 78 13 41 00.
On note l'offset 1) et que l'adresse offset du string est lue à l'envers et correspond au 8 derniers chiffres.

On retourne dans AXE et on cherche une zone d'espace libre (composée de 00000000000...).
J'ai choisi la première zone libre que je fais commencer à l'adresse 000002A3 (! avant le point d'entrée du programme ... ! je ne sais pas si c'est réglementaire mais ça marche :p) ==> 00 00 02 A3 dans AXE ==> 00 40 02 A3 pour le programme.
À partir de cette adresse je tape tout simplement dans la zone "ANSI text" :
Choisir le répertoire :
On note l'adresse.
On fait une recherche avec la commande "Aller à" sur 00005FAD (on soustrait l'ImageBase)
On voit :
00005FAD C744241C78134100 (on ne s'occupe pas de la suite).

ligne Offset
ligne Octets


Dans la ligne octets on va remplacer 78134100 (adresse originale de notre texte : lue à l'envers additionné à l'ImageBase donc 00411378) par la nouvelle adresse du texte qu'on a créé ===> 00 00 02 A3 ===> 00 40 02 A3 ===> A3 02 40 00 ===> A3024000
Voilà on enregistre (vous avez déjà fait une copie bien sûr :p) et on va constater la modification dans le programme 8).

La procédure reste la même pour les autres lignes de texte accessible que par une édition en hexadécimal.

Il y a certainement des choses peu compréhensible ou mal expliquées dans ce tutorial alors n'hésitez pas à me contacter.

 
     
Écrivez moi : Traduction's Lair

<< Retour