Modifier directement l'exe sans recompiler

Modifier directement l'exe sans recompiler - C++ - Programmation

Marsh Posté le 06-12-2007 à 11:13:01    

Bonjour à tous,
 
Il y a quelques années on avait pondu un petit programme dans ma société.
Ils avaient mis une limitation pour la manipulation de fichier. Il fallait qu'il y ait moins de 500 caracteres.
 
Ma boite voudrait étendre la limitation à 900.
 
Il y a 2 problemes :
1 - le serveur qui herbergait les sources n'existe plus et bien sûr aucun backup n'a été fait  :non:  
2 - la valeur de 500 était en dur et pas dans un fichier de parametrage.
 
Je n'ai pas trop envie de tenter de décompiler l'exe. J'ai bien retrouvé un des fichiers sources. La ligne a modifier est :
 if(intLiM > 500 ) {
 
J'avais comme idée d'utiliser un éditeur héxadécimal à la recherche de la valeur 500 (1F4 en hexa) pour la passer à 900. Ca pas l'air d'être aussi facile.
 
Savez-vous comment je pourrais m'y prendre pour ne pas tout récrire ?
 
Merci pour votre aide

Reply

Marsh Posté le 06-12-2007 à 11:13:01   

Reply

Marsh Posté le 06-12-2007 à 13:45:49    

et utiliser un désassembleur (W32dasm par exemple sous windows)?
Ca va pas être du gateau de retrouver ta ligne mais ca sera déjà plus faisable qu'avec juste un éditeur hexa. Ensuite tu repères l'offset et tu modifies avec l'éditeur hexa.


---------------
deluser --remove-home ptitchep
Reply

Marsh Posté le 06-12-2007 à 14:44:43    

Tu peux utiliser un debugger comme OllyDbg pour:
1. Déssassembler
2. mettre des BP sur les valeurs 0x1F4
3. Reproduire le scénario menant à ce test
4. Le changer
5. Vérifier
 
Tu vas être obligé de passer par ces étapes quoi qu'il en soit, il n'y a pas moyen de changer ça :(

Reply

Marsh Posté le 06-12-2007 à 20:29:36    

Que se passe-t-il si tu essaies de manipuler un fichier de plus de 500 caracteres? Une boite de dialogue?
edit : tu voudrais pas balancer la source du fichier en question?


Message édité par Ace17 le 06-12-2007 à 20:31:13
Reply

Marsh Posté le 06-12-2007 à 20:38:29    

Citation :


le serveur qui herbergait les sources n'existe plus et bien sûr aucun backup n'a été fait


 
:o

Reply

Marsh Posté le 06-12-2007 à 21:10:22    

IrmatDen a écrit :

Tu peux utiliser un debugger comme OllyDbg pour:
1. Déssassembler
2. mettre des BP sur les valeurs 0x1F4
3. Reproduire le scénario menant à ce test
4. Le changer
5. Vérifier

 

Tu vas être obligé de passer par ces étapes quoi qu'il en soit, il n'y a pas moyen de changer ça :(


+1 Et au passage, les bons désassembleurs sous Windows sont OllyDbg et surtout la version gratuite de IDA Pro (IDA Freeware)
Au passage, si ce programme est essentiel, ça vaut p-ê le coup d'acheter une licence d'IDA Pro, vu qu'apparemment il inclut un décompilateur asm -> C/C++.

Message cité 1 fois
Message édité par el muchacho le 06-12-2007 à 21:26:33

---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
Reply

Marsh Posté le 06-12-2007 à 21:11:28    

C'est quand même très casse-gueule de modifier l'exe directement, on ne sait pas pour quelles raisons il y a cette limitation. Si tu as des int blabla[500] dans le code t'es pas sorti de l'auberge. :/
 
Si le programme effectue une tache simple, ça coûterait peut-être moins cher de le redévelopper ?

Reply

Marsh Posté le 07-12-2007 à 08:27:13    

el muchacho a écrit :

ça vaut p-ê le coup d'acheter une licence d'IDA Pro, vu qu'apparemment il inclut un décompilateur asm -> C/C++.

Ca y est, on sait faire ca maintenant ?  :heink:  

Reply

Marsh Posté le 07-12-2007 à 11:59:24    

Merci pour votre aide.
 
J'ai essayé les methodes. En fait la limitation actuelle est de 60000 caracteres. J'ai donc cherché avec IDA la valeur hexa 0EA60h
 
Il n'y a qu'une ligne
http://foutoir.free.fr/IDA_view.jpg
 
D'après vos explications, je vais sur l'éditeur hexadécimal, la ligne est surlignée
http://foutoir.free.fr/hexa.jpg
 
Pour essayer j'aimerai modifier la valeur par 99999 soit 1869F. Comment dois-je m'y prendre ?

Reply

Marsh Posté le 07-12-2007 à 12:12:03    

Hm, on peut avoir les vraies images stp? ;)
 
Par rapport aux limitations, ca va être plus risqué avec ces valeurs, et au piège indiqué par Elmo s'en ajoute un autre... Quid si cette info est stocké sur 16 bits? A plusieurs endroits?

Reply

Marsh Posté le 07-12-2007 à 12:12:03   

Reply

Marsh Posté le 08-12-2007 à 00:20:18    

Ace17 a écrit :

Ca y est, on sait faire ca maintenant ?  :heink:  


ouais, masi la sortie est encore parfois très dure à lire. MAis ca donne une bonne approx.

Reply

Marsh Posté le 08-12-2007 à 04:58:01    

guda a écrit :


Pour essayer j'aimerai modifier la valeur par 99999 soit 1869F. Comment dois-je m'y prendre ?


Tu as de la chance qu'il n'y ait qu'une seule occurence de 0EA60h. Tu prends un éditeur hexa style xvi32 et tu modifies directement le fichier, et tu relances.


---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
Reply

Marsh Posté le 08-12-2007 à 09:07:39    

Et c'est ainsi que Robert envoya le serveur de la boite à la casse :lol:

 


Edit: y a pas de checksum dans les exe ?


Message édité par bapho13 le 08-12-2007 à 09:10:17
Reply

Marsh Posté le 08-12-2007 à 09:12:03    

Clair que si il y a un calcul qui mène à un dépassement de capacité d'un entier par ex., le programme ne fonctionnera pas correctement et il ne le saura pas jusqu'à ce qu'au jour où il y a un bug engeandrant un comportement erronné flagrant. De toute façon, si l'outil était critique, ils auraient pas jeté le code, enfin j'espère. [:marc]
Pour les checksums, je ne crois pas qu'il y en ait.

Message cité 1 fois
Message édité par el muchacho le 08-12-2007 à 09:27:22

---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
Reply

Marsh Posté le 08-12-2007 à 13:02:33    

el muchacho a écrit :

Clair que si il y a un calcul qui mène à un dépassement de capacité d'un entier par ex., le programme ne fonctionnera pas correctement et il ne le saura pas jusqu'à ce qu'au jour où il y a un bug engeandrant un comportement erronné flagrant. De toute façon, si l'outil était critique, ils auraient pas jeté le code, enfin j'espère. [:marc]
Pour les checksums, je ne crois pas qu'il y en ait.


Y'en a, mais ils ne sont pas utilises.
 
Quant aux decompilateurs, meme si la sortie est dure a lire, est-ce qu'elle est recompilable?

Reply

Marsh Posté le 08-12-2007 à 13:44:21    

Ace17 a écrit :


Y'en a, mais ils ne sont pas utilises.


 
Meme par les antivirus ?
 
J'en sais réellement rien, hein, mais je pense que si c'est le cas ca peut etre ennuyeux  :sweat:

Reply

Marsh Posté le 08-12-2007 à 14:14:21    

bapho13 a écrit :


 
Meme par les antivirus ?
 
J'en sais réellement rien, hein, mais je pense que si c'est le cas ca peut etre ennuyeux  :sweat:


 
Certains virus DOS utilisent remplissent meme ce champ avec une signature pendant l'infection, de maniere a ne pas infecter le meme executable deux fois!
Quant aux antivirus, je peux imaginer un virus qui mette a jour le checksum a l'infection ... donc question protection, un checksum dans l'exe, c'est zero.

Reply

Marsh Posté le 08-12-2007 à 16:49:53    

Ace17 a écrit :


Y'en a, mais ils ne sont pas utilises.
 
Quant aux decompilateurs, meme si la sortie est dure a lire, est-ce qu'elle est recompilable?


En fait, IDA pro est bcp utilisé pour le reverse de virus. La décompilation de tout un programme C++ n'a pas grand intérêt et ne donnera probablement pas de bons résultats pour retrouver l'architecture du code. Par contre, au niveau algorithmique, la décompilation doit pouvoir retrouver un algo d'une fonction statique de façon utilisable. Donc pour un petit prog en C avec un algo tordu par ex., j'imagine que ça peut aider.


---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed