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

C# Discussion :

Décompiler un programme C#


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par défaut Décompiler un programme C#
    Bonjour,

    Il y a quelques mois, j'ai écrit un programme C#.
    Je l'ai installé, en version debug avec le PDB sur une autre machine.

    Entre temps, j'ai eu un crash disque sur mon PC de développement, et j'ai perdu les sources.

    Le problème n'étais pas hyper complexe, mais j'y avais quand même passé quelques jours...

    Vu qu'il restait des évolutions à y apporter, je voudrais savoir s'il y a un moyen pour décompiler le programme.

    Je m'attends bien entendu à avoir du charabia en structure, mais j'aimerais au moins retrouver la structure de mes objets, car j'avais usé et abusé de l'héritage de user controls afin de rendre générique la création des forms notamment.

  2. #2
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Par défaut
    JustDecompile de chez Telerik

  3. #3
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par défaut
    Merci, j'ai commencé à regarder.

    Ça a l'air d'avoir ma trop mal marché, même si le code ne compile pas.

    Je regarderai plus en détails demain. Mais la bonne nouvelle, j'ai que j'ai récupérer une partir de mon programme.

    En revanche, je faisais des accès à une base de données, et en parcourant les fichiers générés, je n'ai pas trouvé trace des requêtes SQL utilisées... J'ai peut-être regardé trop vite

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par StringBuilder Voir le message
    Je m'attends bien entendu à avoir du charabia en structure
    Pas forcément... il va te décompiler chaque classe séparément, donc tu devrais t'y retrouver sans trop de problème. Par contre tu perdras les noms des variables locales...

    Citation Envoyé par Nathanael Marchand Voir le message
    JustDecompile de chez Telerik
    Ou .NET Reflector... mais j'aime de moins en moins, depuis que ça a été racheté par RedGate je trouve qu'ils le laissent un peu à l'abandon. En plus maintenant il y a des équivalent gratuits. JustDecompile est sympa, mais il me semble qu'il lui manque quelques fonctionnalités par rapport à Reflector. Enfin bon, c'est assez récent, ça va sans doute évoluer encore pas mal

    Citation Envoyé par StringBuilder Voir le message
    Ça a l'air d'avoir ma trop mal marché, même si le code ne compile pas.
    Il y certains trucs qui ne se décompilent pas toujours "proprement", parce que le compilateur génère des noms avec des caractères qui ne sont pas légaux dans le code. Par exemple si tu utilises des types anonymes, des expressions lambda ou des itérateurs, tu peux avoir des cas un peu tordus qu'il faudra refaire à la main.


    Citation Envoyé par StringBuilder Voir le message
    En revanche, je faisais des accès à une base de données, et en parcourant les fichiers générés, je n'ai pas trouvé trace des requêtes SQL utilisées... J'ai peut-être regardé trop vite
    Bah si les requêtes étaient dans le code, tu devrais les retrouver... Tu peux aussi récupérer les ressources du programme.

  5. #5
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par défaut
    Non, ce qui ne compile pas, c'est des trucs étranges que j'ai jamais vu, genre des "BeginInit()" sur des contrôles qui ne supportent pas cette méthode.

    Ou des affectation d'event handlers avec une drôle de syntaxe :

    MyControl.add_Click(btn_Click) que je dois remplacer par MyControl.Click += new EventArgs(btn_Click);

    Pour le moment, je suis pas allé plus loin. Mais globalement, le code à l'air lisible. Seul hic, l'éditeur de forms ne marche pas, donc moyen pour modifier les forms, mais je pense que c'est lié aux multiples erreurs de compilation qu'il y a encore.

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par StringBuilder Voir le message
    Non, ce qui ne compile pas, c'est des trucs étranges que j'ai jamais vu, genre des "BeginInit()" sur des contrôles qui ne supportent pas cette méthode.
    Bizarre... tu as un exemple concret ?

    Citation Envoyé par StringBuilder Voir le message
    MyControl.add_Click(btn_Click) que je dois remplacer par MyControl.Click += new EventArgs(btn_Click);
    Bah voilà un exemple du manque de maturité de JustDecompile
    En fait les évènements sont composés de 2 accesseurs add et remove (comme les propriétés avec get et set), qui sont des méthodes nommées add_<EventName> et remove_<EventName> au niveau de la réflexion. Le "+=" ou "-=" de C# est juste une facilité d'écriture pour ces accesseurs


    Citation Envoyé par StringBuilder Voir le message
    Seul hic, l'éditeur de forms ne marche pas, donc moyen pour modifier les forms, mais je pense que c'est lié aux multiples erreurs de compilation qu'il y a encore.
    Oui c'est probable... commence par corriger manuellement les erreurs de compilation dans InitializeComponents, le designer ne pourra pas fonctionner sans ça (si tu es joueur, tu peux sans doute faire ça à coup de regex pour les erreurs fréquentes, genre le add_<EventName>...). Au passage, je te conseille de remettre le code du designer dans un fichier séparé avec une classe partielle (comme quand tu crées une nouvelle Form dans VS)

Discussions similaires

  1. Réponses: 2
    Dernier message: 24/08/2014, 20h59
  2. Décompilation d'un programme
    Par fxleo dans le forum AS/400
    Réponses: 2
    Dernier message: 26/08/2008, 17h15
  3. Comprendre un programme C simple décompilé
    Par _jeez_ dans le forum x86 32-bits / 64-bits
    Réponses: 2
    Dernier message: 07/10/2007, 16h06

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