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 :

Quel langage est le plus difficile à décompiler ?


Sujet :

Langages de programmation

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mai 2008
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 191
    Points : 35
    Points
    35
    Par défaut Quel langage est le plus difficile à décompiler ?
    Bonjour,

    Je suis en train de créer un programme réalisé en C# pour Windows.

    Il se trouve que je viens d'essayer de le décompiler mon programme via ilspy (je crois) et tout est visible.
    Je sais bien qu'il existe des obfuscateur de code, j'ai lu aussi que tous les programme dotnet sont très facile à décompiler.

    Je parle ici de décompilation et non de désassemblage dont je fais la différence !

    Voila ma question est simple, quel serait (sans obfuscation) le language le moins aisément décompilable par des outils tiers tel que iLspy ?

    Merci

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Malbolge, probablement.
    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
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    le fait que le langage soit fait pour qu'il soit "presque impossible de programmer avec" ne veut pas dire pour autant que le code une fois compilé n'est pas propre

    de fait générer du code (machine ou pseudo-code) sale (et donc obfusqué) c'est le propos du compilateur et non du langage à proprement parler, quant à décompiler... tout dépend de si des outils existent ou non qui permettent d'effectuer une décompilation, si on parle de décompiler du code machine (ou "reverser", néologisme et anglicisme qu'on est libre de ne pas adopter) il y a peu de chance que le fonctionnement du programme reste longtemps secret

    une solution qui vaut ce qu'elle vaut mais qui peut avoir le mérite d'écrémer un peu parmis les petits hackers malins peut être de packer son exécutable ou d'utiliser s'il en existe un obfuscateur d'exécutable (et non de code source donc)

    quelque soit la technique, si la personne a les compétences elle trouvera un chemin, on ne parle donc pas ici de protéger le code au sens "le rendre plus sûr" ou "cacher un secret en toute sérénité" mais juste de ralentir un peu les pirates les moins émérites (ce qui peut s'envisager à moindre coût du moment qu'on est pas un éditeur de jeux vidéos ou de système d'exploitation ), ne pas oublier que la sécurité par l'opacité n'est pas valable

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    C'est un peu pour ça que je ne me suis pas fatigué à répondre sérieusement.

    Plus sérieusement, je répondrais à la question par une autre question: islogged, que cherches-tu à protéger, contre qui?
    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 191
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 191
    Points : 28 070
    Points
    28 070
    Par défaut
    Déjà, il faudra savoir si tu compile en mode Debug, ou en mode Release.

    En mode Debug, pour que le deboguer fonctionne correctement, le code source est intégré dans le binaire, souvent en clair, il devient donc très facile de décompiler un logiciel.

    Ensuite tu parle de C#, c'est donc sur la plateforme .Net. La particularité de la plateforme .Net est que la compilation, n'en est pas vraiment une. Ce que l'on appelle vulgairement compilation n'est rien d'autre qu'une traduction d'un langage en un autre langage, l'IL, commun à toute la plateforme .Net et le seul que comprend le framework. L'IL est, lui, compilé dynamiquement et à la volée au moment de l’exécution du programme.

    Ensuite, quelque soit le langage, si tu compile en mode Release, il sera très difficile de décompiler pour retrouver les sources dans ton langage. La plupart du temps tu n'obtiendra que de l'assembleur, ou, pour les décompilateurs plus évolués, une pseudo traduction dans un des langages les plus courant, généralement c'est le C.
    Mais bon, même dans ce cas, le code est souvent peu exploitable directement.
    --- Sevyc64 ---

    Parce que le partage est notre force, la connaissance sera notre victoire

  6. #6
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 148
    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 148
    Points : 28 113
    Points
    28 113
    Par défaut
    Bonjour,

    Essayes de passer ton binaire dans un logiciel comme strip.

    Ensuite, il faut serieusement se demander pourquoi tu veux te proteger de la decompilation... C'est probablement une mauvaise idée à la base, ou un problème mal posé.
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  7. #7
    Nouveau membre du Club
    Inscrit en
    Mai 2008
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 191
    Points : 35
    Points
    35
    Par défaut
    Plus sérieusement, je répondrais à la question par une autre question: islogged, que cherches-tu à protéger, contre qui?
    Ensuite, il faut serieusement se demander pourquoi tu veux te proteger de la decompilation... C'est probablement une mauvaise idée à la base, ou un problème mal posé.

    Parce que je n'aime pas être copier !
    Parce que je n'aime pas travailler gratuitement pour les autres !
    Parce qu'il est tellement facile de pomper un concept, une interface les doigts de pied en éventail, que j'aimerai au moins ne pas faciliter l'accès au code original de mes créations.

    Mais en fait la plus grosse et la meilleur des raisons, est que j'aimerai tout simplement en avoir le choix !
    Cette dernières raison prévalent évidement toutes autres raisons ^^

    Je ne veux de toute façon pas rentrer dans se débat qui n'est de toute façon pas le sujet !


    quelque soit la technique, si la personne a les compétences elle trouvera un chemin, on ne parle donc pas ici de protéger le code au sens "le rendre plus sûr" ou "cacher un secret en toute sérénité" mais juste de ralentir un peu les pirates les moins émérites (ce qui peut s'envisager à moindre coût du moment qu'on est pas un éditeur de jeux vidéos ou de système d'exploitation ), ne pas oublier que la sécurité par l'opacité n'est pas valable
    Ok, ce n'est peut-être valable, mais qu'en informatique alors ^^

    Pour préciser ma pensé, (donc mon cas) non ce n'est pas pour rendre inviolable mon appli, si l'on peux désassemblé mon appli ça me vas, ce que je ne veux pas c'est que l'on voit texto ne serait-ce qu'une seul ligne de mon C# une fois le programme compilé en EXE ou en IL.

    Déjà, il faudra savoir si tu compile en mode Debug, ou en mode Release.

    En mode Debug, pour que le deboguer fonctionne correctement, le code source est intégré dans le binaire, souvent en clair, il devient donc très facile de décompiler un logiciel.
    Ok !

    Ensuite tu parle de C#, c'est donc sur la plateforme .Net. La particularité de la plateforme .Net est que la compilation, n'en est pas vraiment une. Ce que l'on appelle vulgairement compilation n'est rien d'autre qu'une traduction d'un langage en un autre langage, l'IL, commun à toute la plateforme .Net et le seul que comprend le framework. L'IL est, lui, compilé dynamiquement et à la volée au moment de l’exécution du programme.
    Ok !

    Ensuite, quelque soit le langage, si tu compile en mode Release, il sera très difficile de décompiler pour retrouver les sources dans ton langage. La plupart du temps tu n'obtiendra que de l'assembleur, ou, pour les décompilateurs plus évolués, une pseudo traduction dans un des langages les plus courant, généralement c'est le C.
    Mais bon, même dans ce cas, le code est souvent peu exploitable directement.
    Ok, je vais aller voir ça !

    Tu me confirmes qu'en mode Release, le seul résultat possible est soit en langage d'assemblage, soit en pseudo C ?

    Question : Ai-je bien compris ?, quel logiciel à partir du C# permet de faire ce second ? (en C), histoire de voir ce que cela donne

    Merci ^^

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Si tu veux de l'asm à partir de .Net, tu vas devoir passer par le compilo et par le Native Image File Generator. Mais ça restera bourré de méta-données, et probablement pas beaucoup moins décompilable qu'un assembly en CIL. Après, si tu l'obfusques entre les deux (ce qui présuppose que tu ne dépends pas de la reflection)...
    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.

  9. #9
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 148
    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 148
    Points : 28 113
    Points
    28 113
    Par défaut
    Citation Envoyé par islogged Voir le message
    Parce que je n'aime pas être copier !
    Parce que je n'aime pas travailler gratuitement pour les autres !
    Parce qu'il est tellement facile de pomper un concept, une interface les doigts de pied en éventail, que j'aimerai au moins ne pas faciliter l'accès au code original de mes créations.
    Donc si tu construisais une voiture, tu voudrais que personne ne puisse voir vraiment à quoi elle ressemble, ni ouvrir le capot pour voir comment est le moteur, et peut-être même faire un système de sas pour que le coffre ne soit pas accessible directement. C'est un point de vue.

    Si tu veux faire ça, prends un langage ésotérique, genre OCaml, obfusque-le et compile avec des options de compilation trop optimisées (l'équivalent de -O3 de gcc), ça devrait aller dans le sens que tu veux.

    Et rassure-toi, avec 500Kg de viande hachée, tu ne fais pas une vache en état de marche. C'est pareil avec un programme compilé. [Copyright E. Delahaye]
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  10. #10
    Nouveau membre du Club
    Inscrit en
    Mai 2008
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 191
    Points : 35
    Points
    35
    Par défaut
    @ gangsoleil
    Tu as oublié la principal quand même :
    Mais en fait la plus grosse et la meilleur des raisons, est que j'aimerai tout simplement en avoir le choix !
    Donc si tu construisais une voiture, tu voudrais que personne ne puisse voir vraiment à quoi elle ressemble, ni ouvrir le capot pour voir comment est le moteur, et peut-être même faire un système de sas pour que le coffre ne soit pas accessible directement. C'est un point de vue.
    Je ne fabrique pas de voiture !
    Sinon, c'est le point de vu de la majorité des logiciels propriétaires, sans même pensé à Microsoft et encore moins à Apple ^^

    Et rassure-toi, avec 500Kg de viande hachée, tu ne fais pas une vache en état de marche.
    Hum, A priori je dirai que ce n'est pas comparable ^^

    Bref comme je l'ai dit je ne veux pas rentrer dans ce débat, que j'ai tord ou raison d'ailleurs ^^

    Si tu veux de l'asm à partir de .Net, tu vas devoir passer par le compilo et par le Native Image File Generator. Mais ça restera bourré de méta-données, et probablement pas beaucoup moins décompilable qu'un assembly en CIL. Après, si tu l'obfusques entre les deux (ce qui présuppose que tu ne dépends pas de la reflection)...
    Non non, ce que je ne veux juste pas c'est que le EXE recrache le C# que j'ai codé, ni plus ni moins en fait !

  11. #11
    Membre du Club
    Inscrit en
    Février 2013
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Février 2013
    Messages : 34
    Points : 43
    Points
    43
    Par défaut
    Compile ton programme en assembleur 128bit et fous le dans un lanceur qui va émuler un processeur capable de l'exécuter.
    Comme skype. A peu près.

  12. #12
    Membre éprouvé Avatar de worm83
    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Février 2010
    Messages
    459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2010
    Messages : 459
    Points : 1 118
    Points
    1 118
    Par défaut
    Citation Envoyé par islogged Voir le message
    Parce que je n'aime pas être copier !
    Parce que je n'aime pas travailler gratuitement pour les autres !
    Parce qu'il est tellement facile de pomper un concept, une interface les doigts de pied en éventail, que j'aimerai au moins ne pas faciliter l'accès au code original de mes créations.
    Rien que ça !!
    Heureusement que l'on pense pas tous comme toi, sinon tu aurais eu bien du mal à démarrer en tant que débutant.

    Citation Envoyé par BorisTheBear Voir le message
    Compile ton programme en assembleur 128bit et fous le dans un lanceur qui va émuler un processeur capable de l'exécuter.
    Comme skype. A peu près.
    Ca doit être marrant à faire. Mais pas simple XD.
    "Le train de tes injures roule sur le rail de mon indifférence."

    "Monde de merde !!"

    Georges Abitbol.

  13. #13
    Expert confirmé

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    2 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 2 065
    Points : 4 229
    Points
    4 229
    Par défaut
    Pour avoir été confronté à ce genre de problème (le c# n'étant pas vraiment compilé mais générant un code intermédiaire facile à retranscrire), j'ai trouvé que la meilleure solution est l'utilisation de WebService pour le code qu'on veut cacher (c'est plus difficile d'hacker un serveur que d'ouvrir un exe avec ilspy) mais c'est chiant parce que l'application nécessite une connexion web, tu dois louer un serveur, le dev pourra être plus long et ce n'est pas applicable dans toutes les situations vu les problèmes de performance que ça peut impliquer.

Discussions similaires

  1. Comment voir dans quel langage est écrit un prog ?
    Par pyckwyk dans le forum Langages de programmation
    Réponses: 2
    Dernier message: 16/01/2007, 10h41
  2. Quel chrono est le plus précis ?
    Par pat-trix dans le forum Langage
    Réponses: 20
    Dernier message: 18/11/2006, 18h18
  3. Quel langage est le mieux adapté pour un projet web ?
    Par aztec dans le forum Général Conception Web
    Réponses: 2
    Dernier message: 03/09/2006, 18h34
  4. Quel langage est le plus adapté pour faire ce script ?
    Par koKoTis dans le forum Langages de programmation
    Réponses: 8
    Dernier message: 15/08/2006, 20h00

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