IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Assembleur Discussion :

Modifier un programme désassemblé


Sujet :

Assembleur

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Septembre 2004
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Modifier un programme désassemblé
    Bonjour tout le monde,

    je ne connais (presque absolument) rien à l'assembleur : mon problème est que j'ai écrit il y a un moment un programme en Turbo Pascal, et que je voudrais modifier un petit truc dedans. Mais bien sûr, je n'ai plus tous les sources!

    J'ai donc désassemblé mon programme en espérant (naïvement) que je trouverais facilement où faire ma modif, mais non!!!

    Donc si quelqu'un pouvait me dire comment retrouver une instruction qui en Pascal avait cette tête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    variable1:=(10-variable2)*4000;
    sachant que je veux modifier le 4000 en une autre valeur constante, et ben ce serait pô mal... et si ce que je veux faire est absurde, merci de me le dire gentiment...

    Merci d'avance.

  2. #2
    Rédacteur
    Avatar de Neitsa
    Homme Profil pro
    Chercheur sécurité informatique
    Inscrit en
    Octobre 2003
    Messages
    1 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur sécurité informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 041
    Points : 1 956
    Points
    1 956
    Par défaut
    Bonjour,

    Non c'est tout a fait possible . Si le soft t'appartient, c'est tout a fait légal et cela s'appelle le RE (Reverse Engineering).

    Tout dépend du débuggeur/désassembleur que tu utilises pour la méthode à utiliser pour changer ton programme. Dans un programme compilé, les valeurs sont assemblées en hexadécimal.

    Dans un premier temps, pour retrouver le 4000 (décimal) il faut convertir ce chiffre en Hexa => soit 0xFA0

    Ensuite on voit la présence d'un autre constante 10d soit 0xA. La présence d'un '-' doit conduire, dans le programme désasemblé à un SUB et le '*' à la présence d'un MUL. (une ligne dans un langage de haut niveau conduit souvent à plusieurs lignes d'instructions dans un programme assembleur).

    En cherchant la proximité de ces instructions et constantes sous un désassembleur ou un débuggeur cela devrait être facile à trouver.

    Le débuggeur OllyDBG permet une recherche par constante dans un programme, et il y a fort à parier que la constante 0xFA0 ne doit pas retrouner beaucoup d'occurence.

    Bon courage !

    Amicalement, Neitsa.

  3. #3
    Membre du Club
    Inscrit en
    Juin 2004
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 39
    Points : 46
    Points
    46
    Par défaut
    le plus simple est encore de "tracer" au sens literal du terme le programme lors de son execution pour trouver l'operation
    10-X*4000

    et de verifier avec la recherche de 0x0FA0 que c'est bien ce "4000" là que tu cherche et que tu dois modifier.

  4. #4
    Membre expérimenté

    Inscrit en
    Mai 2002
    Messages
    720
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 720
    Points : 1 594
    Points
    1 594
    Par défaut

    Si tu as pas de chance, le compilateur a optimise le code ... et alors on peut avoir des surprises ...

    Smortex

    Les FAQ Assembleur - Linux
    In The Beginning Was The Command Line Neal Stephenson

  5. #5
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 937
    Points : 59 417
    Points
    59 417
    Billets dans le blog
    2
    Par défaut
    Bonjour !

    Je viens de désassembler cette instruction compilée avec Turbo Pascal et ça donne un code très classique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    B80A00     mov ax,10
    2B065200   sub ax,Variable2
    BAA00F     mov dx,4000
    F7E2       mul dx
    A35000     mov Variable1,ax
    Si ça peut t'aider à retrouver cette séquence de code machine...
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  6. #6
    Nouveau Candidat au Club
    Inscrit en
    Septembre 2004
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Bon, grâce à vos conseils avisés, j'ai pu retrouver la séquence à modifier... merci beaucoup!

    Maintenant, j'ai un autre problème : c'est visiblement du 16bits, et vu que je voulais passer ma valeur de 4000 à 8000, ça fait que dans certains cas, le résultat est supérieur à 2^16. D'où ma question : existe-t'il des outils capables de convertir de l'assembleur 16bits en assembleur 32bits?

    Merci d'avance.

  7. #7
    Membre du Club
    Inscrit en
    Juin 2004
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 39
    Points : 46
    Points
    46
    Par défaut
    mais tu peux calculer sur 32bits avec du 16 bits.

    par exemple utiliser [ax:dx] pour avoir 2*16bits.
    (y'a peut etre plus propre mais bon je sais pas trop comment )

    maintenant sache que 16bits=0xFFFF donc
    8000 passe largement puisque 0x1F40
    le problème se revèle effectivement que sur le resultat.

    mais ton operation
    (10-X)*8000 tant que X > 2 le problème ne se pose pas donc avant de modifier le code, est ce vraiment nécéssaire ?
    car si tu n'as jamais de cas ou X est < à deux (1.8~) ce serrait une perte de temps...ce serrai juste pour ta culture personnelle...

    surtout qu'une modification comme celle ci (utiliser 2*16bits) ou une convertion en 32bits natif, c'est très très difficile à faire sans réecrire la quasi totalité de l'application....et sans les sources la réecrire qu'en assembleur en editant le fichier binaire lui même, celui ci changera de taille ainsi que les variables il te faudra aussi savoir que désormais il occupera beaucoup plus de place dans la mémoire lors de son execution. Aussi si ton appli est destinée à etre distribuée sur plusieurs machine il faudrat bien préciser aux utilisateur la nouvelle configuration minimale nécessaire.

Discussions similaires

  1. modifier par programme le port d'une imprimante
    Par emrabin dans le forum Windows
    Réponses: 0
    Dernier message: 12/12/2008, 12h23
  2. Méthodes pour modifier un programme
    Par Nykoo dans le forum C
    Réponses: 4
    Dernier message: 29/11/2007, 17h50
  3. Comment modifier par programmation une form crée lors de l'execution
    Par Fab.asia dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 31/07/2007, 14h47
  4. modifier arguments programme
    Par sone47 dans le forum C
    Réponses: 3
    Dernier message: 25/07/2007, 11h55
  5. Connaitre et modifier le programme par défaut
    Par bob1980 dans le forum Delphi
    Réponses: 3
    Dernier message: 23/05/2007, 10h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo