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

Langages de programmation Discussion :

Décompiler sans connaitre le langage source


Sujet :

Langages de programmation

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 175
    Par défaut Décompiler sans connaitre le langage source
    Bonjour

    Je viens d'arriver dans un service informatique et je suis donc en train de lire un max de docs etc... pour comprendre comment tout fonctionne.

    Toutefois, il y a une application, développée en 2002, que personne n'ose plus toucher (bien que les besoins évoluent ) car elle n'est pas documentée et personne n'arrive à mettre la main sur les sources. C'est même arrivé à tel point que personne ne sait dire quel langage a été utilisé... et qu'elle est accessible via Citrix (car elle ne tourne plus sur nos PC en Seven et Vista... on émule des sessions XP !)

    Quoiqu'il en soit, j'ai essayé d'aller un peu plus loin et de décompiler le bazar. Premier reflex : google qui me dit que Resource Hacker peut m'aider !

    Je me lance mais là, je n'ai réussi à "décompiler" que des interfaces (je peux modifier les boutons etc...) mais rien n'arrive à me guider vers les enchainements de type "if then else".

    En continuant ma recherche, j'ai cru comprendre qu'il fallait connaitre le langage dans lequel cela avait été développé pour décompiler avec le bon outil. Mais comme expliqué un peu plus haut, personne n'a idée du langage en question ...

    --> avez-vous une piste ou une méthode pour que je m'en sorte ? y'a t'il un moyen de connaitre le langage source juste en consultant des fichiers .exe et .dll ou leurs propriétés ?

    Merci par avance

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 398
    Par défaut
    Il y a moyen d'avoir quelques indices en voyant si ça importe certaines DLL particulières (genre, un truc qui importe la DLL runtime VB est probablement en VB).

    Pour ça, un truc comme Dependency Walker peut t'aider.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 175
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Il y a moyen d'avoir quelques indices en voyant si ça importe certaines DLL particulières (genre, un truc qui importe la DLL runtime VB est probablement en VB).

    Pour ça, un truc comme Dependency Walker peut t'aider.
    merci pour cette première réponse ! je viens de lancer l'outil mais je n'arrive pas à exploiter les résultats.
    Je vois qu'il y a bcp de dll spécifiques à mon programme qui sont lancées mais comment savoir si les autres sont spécifiques à un langage ou un autre ? kernell32 ne semble pas discriminant. Pas plus que user32 par exemple

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 398
    Par défaut
    Un indice, c'est qu'elles sont souvent ailleurs que dans C:\Windows\System32 (mais pas toujours).

    Note que MSVCRT.DLL (C et C++) n'est pas complètement indicatrice de provenance, car tout plein de langages l'utilisent. MSVCRxx.DLL par contre, a une forte probabilité d'indiquer C ou C++ utilisant Visual Studio (plus la version!)

    MSCOREE.DLL signale un programme pour le Framework .Net, auquel cas un truc du genre .Net Reflector peut aider.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 254
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 254
    Par défaut
    2 situations possibles.

    Soit ton executable contient les informations de debogage et, avec de la chance, les lignes de code source, dans ce cas il te faudra connaitre le langage et utiliser l'outil spécifique à ce langage (s'il existe) pour espérer récupérer les sources.

    Soit ton executable ne contient pas les infos de débogage et le code source (ce qui doit normalement être le cas), dans ce cas la décompilation ne te donnera que des sources assembleurs, et ce, quelque soit le langage initialement utilisé.

    C'est un logiciel maison, ou un logiciel commercial ?

  6. #6
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Par défaut
    Citation Envoyé par MatMeuh Voir le message
    Toutefois, il y a une application, développée en 2002
    Question bete : et pourquoi ne pas faire une recherche sur la personne qui a developpe le truc ? Bien sur, ca demande un peu de recherche (tu demandes a ton voisin de bureau, qui te rediriges vers Jean-Luc-qui-a-probablement-connu-le-gars, qui t'envoit vers Gerard, ...).
    Une fois que tu as son nom, tu le googles ou equivalent, et tu lui envoies un gentil mail pour savoir s'il se souvient ou il a mis le code, ou au moins en quoi c'etait ecrit.

    Aide : en 2002, tu as de grandes chances pour que le logiciel soit avec des langages de cette epoque, donc pas .Net, mais plus C++ ou Java (ou autre bien sur)
    Les libs (.dll) peuvent effectivement t'aider : QT t'oriente sur C++, une machine virtuelle vers Java, ...

    Lance ton programme, et regarde quels sont les processus qui tournent, les libs chargees, etc.
    Tu peux faire ca avec le gestionnaire de taches (ctrl + echap), ou avec un logiciel qui le remplace avec beaucoup plus de fonctionnalites, dont l'affichage des liens de parentes (qui a lance qui, ...).
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 175
    Par défaut
    Citation Envoyé par sevyc64 Voir le message
    C'est un logiciel maison, ou un logiciel commercial ?
    logiciel tout ce qu'il y a de plus "maison"

    Sans doc, sans histoire, jusqu'au jour où... l'on change les PC et que ça ne marche plus

    Citation Envoyé par gangsoleil Voir le message
    Question bete : et pourquoi ne pas faire une recherche sur la personne qui a developpe le truc ? Bien sur, ca demande un peu de recherche (tu demandes a ton voisin de bureau, qui te rediriges vers Jean-Luc-qui-a-probablement-connu-le-gars, qui t'envoit vers Gerard, ...).
    Une fois que tu as son nom, tu le googles ou equivalent, et tu lui envoies un gentil mail pour savoir s'il se souvient ou il a mis le code, ou au moins en quoi c'etait ecrit.
    c'est ce que je fais depuis 2 jours : de l'archéologie informatique

    Et je commence à recouper les éléments : ça serait du C++ fait dans Visual Studio 6 (une boite poussiéreuse avec les CD d'install et un post-it qui peut m'indiquer cela )

    J'ai même reçu par mail un bout d'un début de spéc que qqn avait gardé dans ses archives mails antédiluviennes !!!

    J'avance...

    En tout cas, merci pour l'aide

  8. #8
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Par défaut
    Decompiler du C++, c'est pas le top, mais ca se fait.

    Attention cependant, ne t'attends pas a des miracles de la decompilation hein. Comme le dit Emmanuel Delahaye (expert C) a propos de la decompilation : "On ne fait pas une vache en etat de marche a partir de 500Kg de viande hachee".
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 175
    Par défaut
    Citation Envoyé par gangsoleil Voir le message
    Decompiler du C++, c'est pas le top, mais ca se fait.

    Attention cependant, ne t'attends pas a des miracles de la decompilation hein. Comme le dit Emmanuel Delahaye (expert C) a propos de la decompilation : "On ne fait pas une vache en etat de marche a partir de 500Kg de viande hachee".
    j'aime bien l'image, bien que l'espoir diminue de mon côté !

    Dans les explorations, j'en suis arrivé à retrouver un doc disant en somme "tout l'algo est décrit dans le doc truc.chose.Doc" mais personne ne sait où cela peut être. J'en suis même à ouvrir des vieux classeurs papier !!!


    Aaahhh la beauté de l'informatique....

  10. #10
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    comme l'a dit Sevyc64, il est vraisemblable que tu ne tireras pas grand 'chose...

    Si le programme a été compilé sans option de debug, la décompilation donnera un code assembleur, mais il faut bien avoir en tête que dans cette décomposition tu n'as plus aucun nom de variable..

    Tu as donc une suite de MOV dans des registres, et d'opérations entres registres...

    Je ne suis pas certain (je suis même quasi-sûr du contraire) qu'au delà de 500 lignes cela soit exploitable...


    La seule solution réellement correcte est de mettre la main sur la spec d'origine, sur une vieille sauvegarde des sources (en dur ou sur papier), ou l'accès au programmeur d'origine...

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 175
    Par défaut
    Merci pour votre aide

    Armés de mes convictions et de ces réponses, je vais prendre le baton de pèlerin pour rédiger des spéc à faire valider

    Spéc rédigées sur base des comportements que je détecterai en jouant avec l'appli

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 18/03/2006, 19h42
  2. Insertion sans connaitre la structure
    Par Alexandre T dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 12/10/2005, 10h58
  3. Créer un buffer sans connaitre la taille?
    Par barucca dans le forum C++
    Réponses: 11
    Dernier message: 28/04/2005, 20h56
  4. Lister le contenu d'une table sans connaitre ses champs
    Par Google.be dans le forum PostgreSQL
    Réponses: 9
    Dernier message: 30/03/2004, 15h23

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