Modifier directement l'exe sans recompiler - C++ - Programmation
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.
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
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?
Marsh Posté le 06-12-2007 à 20:38:29
Citation : |
Marsh Posté le 06-12-2007 à 21:10:22
IrmatDen a écrit : Tu peux utiliser un debugger comme OllyDbg pour: 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++.
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 ?
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 ?
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
D'après vos explications, je vais sur l'éditeur hexadécimal, la ligne est surlignée
Pour essayer j'aimerai modifier la valeur par 99999 soit 1869F. Comment dois-je m'y prendre ?
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?
Marsh Posté le 08-12-2007 à 00:20:18
Ace17 a écrit : Ca y est, on sait faire ca maintenant ? |
ouais, masi la sortie est encore parfois très dure à lire. MAis ca donne une bonne approx.
Marsh Posté le 08-12-2007 à 04:58:01
guda a écrit : |
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.
Marsh Posté le 08-12-2007 à 09:07:39
Et c'est ainsi que Robert envoya le serveur de la boite à la casse
Edit: y a pas de checksum dans les exe ?
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.
Pour les checksums, je ne crois pas qu'il y en ait.
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. |
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?
Marsh Posté le 08-12-2007 à 13:44:21
Ace17 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
Marsh Posté le 08-12-2007 à 14:14:21
bapho13 a écrit : |
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.
Marsh Posté le 08-12-2007 à 16:49:53
Ace17 a écrit : |
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.
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
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