Decompiler un programme
max
-
plutonium -
plutonium -
Bonjour,
voila je souhaiterais savoir si il est possible de decompiler un jeu, par exemple warcraft, afin de recuperer les codes sources.
je ne souhaite evidemment pas le faire, mais c'est juste pour regler un litige avec une personne m'affirmant qu'il doit etre possible de trouver cela.
pour ma part je pense que les jeux doivent etre proteger et crypter de maniere a ce qu'il soit impossible de recuperer les sources.
apparement des langages comme le java ou le vb peuvent etre decompiler, comment fonctionne la decompilation? (comme un compilateur mais a l'envers ?)
voila en esperant que vous pourrez m'eclairer sur ce sujet. merci.
voila je souhaiterais savoir si il est possible de decompiler un jeu, par exemple warcraft, afin de recuperer les codes sources.
je ne souhaite evidemment pas le faire, mais c'est juste pour regler un litige avec une personne m'affirmant qu'il doit etre possible de trouver cela.
pour ma part je pense que les jeux doivent etre proteger et crypter de maniere a ce qu'il soit impossible de recuperer les sources.
apparement des langages comme le java ou le vb peuvent etre decompiler, comment fonctionne la decompilation? (comme un compilateur mais a l'envers ?)
voila en esperant que vous pourrez m'eclairer sur ce sujet. merci.
A voir également:
- Décompiler un programme
- Java décompiler - Télécharger - Langages
- Programme demarrage windows - Guide
- Mettre en veille un programme - Guide
- Swf decompiler - Télécharger - Animation
- Forcer la fermeture d'un programme - Guide
12 réponses
J'ai lu toutes vos réponses, et je trouve qu'elle sont un peu confuses.
Moi je travaille avec un ami sur un décompilateur VB, donc j'espére vous apporter des réponses :
1 - La décompilation Java :
Le java est interprété par une machine virtuelle, donc le code source est inclu dans l'applet(l'objet java). Les crypteurs sont un bon moyen de berner les decompilateurs Java, mais y'aura toujours une faille, car l'applet est décrypté avant de se lancer, donc le mot de passe est aussi enregistré dans le code source. De plus ce process ralentit l'execution des applets.
2 - La décompilation du C/C++ :
La plus grande difficultée dans la décompilation d'un code c'est de retrouver les structures natives, un switch peut être écrit avec plusieurs if, un do...loop, ou bien un while ... ces types de structures ne sont pas toujours facilement identifiables.
Les noms des variables ne sont pas toujours significatifs, ce qui empeche une bonne lecture du code.
Bréf en gros la décompilation ne sert qu'à lire plus aisement un code, car l'asm est comme même moins convial.
3 - La décompilation VB :
Pour ce qui est de VB, jusqu'à sa version 4, l'executable contenais le code source, et il étais ensuite interprété, mais depuis la version 5, le code est bien compilé, ce qui donne au vb une plus grande rapidité d'execution, et même de calcul.
Jusque maintenant mon travail porte sur la partie objet de VB, et vous trouverez un semi-decompiler à cette adresse :
http://www.webdevz.net/hexman/
Il permet de retrouver les objets d'un executable vb, version 5 ou 6
Moi je travaille avec un ami sur un décompilateur VB, donc j'espére vous apporter des réponses :
1 - La décompilation Java :
Le java est interprété par une machine virtuelle, donc le code source est inclu dans l'applet(l'objet java). Les crypteurs sont un bon moyen de berner les decompilateurs Java, mais y'aura toujours une faille, car l'applet est décrypté avant de se lancer, donc le mot de passe est aussi enregistré dans le code source. De plus ce process ralentit l'execution des applets.
2 - La décompilation du C/C++ :
La plus grande difficultée dans la décompilation d'un code c'est de retrouver les structures natives, un switch peut être écrit avec plusieurs if, un do...loop, ou bien un while ... ces types de structures ne sont pas toujours facilement identifiables.
Les noms des variables ne sont pas toujours significatifs, ce qui empeche une bonne lecture du code.
Bréf en gros la décompilation ne sert qu'à lire plus aisement un code, car l'asm est comme même moins convial.
3 - La décompilation VB :
Pour ce qui est de VB, jusqu'à sa version 4, l'executable contenais le code source, et il étais ensuite interprété, mais depuis la version 5, le code est bien compilé, ce qui donne au vb une plus grande rapidité d'execution, et même de calcul.
Jusque maintenant mon travail porte sur la partie objet de VB, et vous trouverez un semi-decompiler à cette adresse :
http://www.webdevz.net/hexman/
Il permet de retrouver les objets d'un executable vb, version 5 ou 6
Hello,
Pour ce qui est de la discussion, on peut reverse engineerer n importe quel binaire. Pour du C, C++ et autres languages vraiment compilés, le resultat sera en general de pietre qualite, et probablement pas recompilable, mais cela donnera une idee de comment cela fonctionne. Pour ce qui est du Java, c est extrêmement facile, le code n est pas vraiment compilé, il est transformé en bytecode, et en plus on conserve les noms de classes, ce qui rend le code tres lisible. En aucun cas, on ne recuperera les commentaires originaux, sauf si un mecanisme de messages de debug a ete utilisé.
L'obfuscation n a pas grand chose a voir avec le sujet. C est en java un simple mecanisme qui permet de rendre illisible le nom des objets (et recuperer A, B ou C a la place), ce qui ralenti un peu, et c est tout.
Pour ton cas, une fois la classe décompilée, tu dois la mettre dans un ide avec ses copines (le reste des .class) et essayer de la faire compiler. DJ decompiler utilise jad, qui est bien mais pas top. A toi de finir de réecrire le code. Si tu n as qu une classe, cela sera rapide grace aux messages d erreur de l ide.
De toute facon, il te faut des competences en java ... Si tu ne connais pas trop, cela sera difficile.
Pour ce qui est de la discussion, on peut reverse engineerer n importe quel binaire. Pour du C, C++ et autres languages vraiment compilés, le resultat sera en general de pietre qualite, et probablement pas recompilable, mais cela donnera une idee de comment cela fonctionne. Pour ce qui est du Java, c est extrêmement facile, le code n est pas vraiment compilé, il est transformé en bytecode, et en plus on conserve les noms de classes, ce qui rend le code tres lisible. En aucun cas, on ne recuperera les commentaires originaux, sauf si un mecanisme de messages de debug a ete utilisé.
L'obfuscation n a pas grand chose a voir avec le sujet. C est en java un simple mecanisme qui permet de rendre illisible le nom des objets (et recuperer A, B ou C a la place), ce qui ralenti un peu, et c est tout.
Pour ton cas, une fois la classe décompilée, tu dois la mettre dans un ide avec ses copines (le reste des .class) et essayer de la faire compiler. DJ decompiler utilise jad, qui est bien mais pas top. A toi de finir de réecrire le code. Si tu n as qu une classe, cela sera rapide grace aux messages d erreur de l ide.
De toute facon, il te faut des competences en java ... Si tu ne connais pas trop, cela sera difficile.
ok je te remerci, mais dis moi, j'ai eu la personne au téléphone et elle rechigne lol, encore quelques petites precisions :
pour le C/C++ lorsque tu a le code machine (qui correspond au programme desassemblé, si je ne me trompe pas), il n'existe pas un logiciel ou quoi que ce soit qui puisse le retransformer en code source ? si oui est-ce que c'est fiable ?
pour le java, lorsqu'il est decompiler, tu retrouve exactement le meme code source?
et celui-ci a la compilation fonctionne t'il parfaitement?
et aussi pour java il existe quand meme un moyen de le crypter pour pas se faire pomper son code ?!
enfin pour en revenir au jeu, si par exemple, le warcraft a été ecris en C/C++ et que tu as le desassembleur, il n'y a pas des protections pour empecher celui-ci de retrouver le "code machine" ?!!
voila j'espere avoir été comprehensible et je te remerci de ton aide.
pour le C/C++ lorsque tu a le code machine (qui correspond au programme desassemblé, si je ne me trompe pas), il n'existe pas un logiciel ou quoi que ce soit qui puisse le retransformer en code source ? si oui est-ce que c'est fiable ?
pour le java, lorsqu'il est decompiler, tu retrouve exactement le meme code source?
et celui-ci a la compilation fonctionne t'il parfaitement?
et aussi pour java il existe quand meme un moyen de le crypter pour pas se faire pomper son code ?!
enfin pour en revenir au jeu, si par exemple, le warcraft a été ecris en C/C++ et que tu as le desassembleur, il n'y a pas des protections pour empecher celui-ci de retrouver le "code machine" ?!!
voila j'espere avoir été comprehensible et je te remerci de ton aide.
Salut Max.
Kala confirmera mes dires, mais d'après mes connaissances, tu ne peux pas remonter au code source C/C++.
Par contre, le code java est en quelque sorte "inclus" dans l'exécutable java. Tu retrouveras donc l'intégralité du code initial, commentaires y compris.
Quant au cryptage ... je ne sais pas.
(:•Þ Pitu
Kala confirmera mes dires, mais d'après mes connaissances, tu ne peux pas remonter au code source C/C++.
Par contre, le code java est en quelque sorte "inclus" dans l'exécutable java. Tu retrouveras donc l'intégralité du code initial, commentaires y compris.
Quant au cryptage ... je ne sais pas.
(:•Þ Pitu
Ni modo, ni même quasi modo
Re,
En fait il existe des softs capables de generer des sources d'après de l'assembleur. Je n'ai jamais vu ca tourner, mais je crois savoir que cela existe et que ce n'est vraiment pas du tout performant. (Cela ne donne pas le source d'origine mais une interpretation de l'assembleur qui ne fonctionne que très rarement.)
Donc le C/C++ de ton jeu, tu l'oublies ! :o) Tu n'auras jamais à l'ecran ce que les développeurs avaient.
Cryptage ? Pas possible de crypter le code machine ! Il faut que le processeur puisse l'interpreter, ce code ! Si tu le cryptes, le proc' est paumé. ^^
Kalamit,
Parle à ma culasse, mon carter est malade. :)
En fait il existe des softs capables de generer des sources d'après de l'assembleur. Je n'ai jamais vu ca tourner, mais je crois savoir que cela existe et que ce n'est vraiment pas du tout performant. (Cela ne donne pas le source d'origine mais une interpretation de l'assembleur qui ne fonctionne que très rarement.)
Donc le C/C++ de ton jeu, tu l'oublies ! :o) Tu n'auras jamais à l'ecran ce que les développeurs avaient.
Cryptage ? Pas possible de crypter le code machine ! Il faut que le processeur puisse l'interpreter, ce code ! Si tu le cryptes, le proc' est paumé. ^^
Kalamit,
Parle à ma culasse, mon carter est malade. :)
salut;
j'ai besoin de connaitre les étapes pour construit un compilateur pour les programmes orienté aspect.
merci.
j'ai besoin de connaitre les étapes pour construit un compilateur pour les programmes orienté aspect.
merci.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Salut,
je fait les défit du site https://www.newbiecontest.org/
j'arrive a décompiller le java en un code lisible.
Mais comment recompiler ce code ?
Avec ecplipse ?
Mais comment ?
merci d'avance
je fait les défit du site https://www.newbiecontest.org/
j'arrive a décompiller le java en un code lisible.
Mais comment recompiler ce code ?
Avec ecplipse ?
Mais comment ?
merci d'avance
Salut,
En fait, ce genre de jeux n'est pas ecrit en Java ou en VB. Il est probablement ecrit en C ou C++. Une fois compilé, tu ne peux pas le décomppiler à proprement parler. Tu peux juste récuperer en assembleur certaines partie de l'exe. C'est d'ailleurs par ce biais que passe tous les déplombeurs de logiciel ou presque. Ce n'est pas vraiment une décompilation et tu ne peux pas récuperer le code sources du jeu.
Pour ce qui est de VB: A partir de VB5, il n'est plus possible de décompiler un executable.
Java, pas de soucis: c'est une machine à faire de l'open source. :)
Kalamit,
Parle à ma culasse, mon carter est malade. :)
En fait, ce genre de jeux n'est pas ecrit en Java ou en VB. Il est probablement ecrit en C ou C++. Une fois compilé, tu ne peux pas le décomppiler à proprement parler. Tu peux juste récuperer en assembleur certaines partie de l'exe. C'est d'ailleurs par ce biais que passe tous les déplombeurs de logiciel ou presque. Ce n'est pas vraiment une décompilation et tu ne peux pas récuperer le code sources du jeu.
Pour ce qui est de VB: A partir de VB5, il n'est plus possible de décompiler un executable.
Java, pas de soucis: c'est une machine à faire de l'open source. :)
Kalamit,
Parle à ma culasse, mon carter est malade. :)
Je confirme tout ce qui a été dit.
Pour java, il existe ce qu'on appelle des obfuscateurs: Ils n'encryptent pas le code, mais ils rendent la décompilation (quasi)impossible.
Mais ça n'empêche pas un hacker de faire comme pour le C++ compilé: travailler directement l'assembleur Java à la main.
Pour java, il existe ce qu'on appelle des obfuscateurs: Ils n'encryptent pas le code, mais ils rendent la décompilation (quasi)impossible.
Mais ça n'empêche pas un hacker de faire comme pour le C++ compilé: travailler directement l'assembleur Java à la main.
Salut...
un petit détail pour ce qui est de Java. lorsqu'il est compilez en .class, il est possible de la décompilez, mais rendu en .exe c'est bcp plus difficile comme pour le c/c++.
Mais tous ce fait, mais ils sont rare le monde près a perdre p-e 1 ou 2 ans de travail pour essayer de décompilez un jeu.
Nettogrof tseb era seiromem emoS
un petit détail pour ce qui est de Java. lorsqu'il est compilez en .class, il est possible de la décompilez, mais rendu en .exe c'est bcp plus difficile comme pour le c/c++.
Mais tous ce fait, mais ils sont rare le monde près a perdre p-e 1 ou 2 ans de travail pour essayer de décompilez un jeu.
Nettogrof tseb era seiromem emoS
Remarque par rapport à ce que dit aKhEnAthOn:
Pour Java:
Le code source n'est pas inclu dans l'applet Java.
L'applet Java ne contient que le bytecode, et éventuellement les symboles (noms des références et des numéros de ligne).
Etant donné que la machine virtuelle est standardisée, les mêmes instructions donnent toujours le même bytecode.
C'est ce qui permet aux décompilateurs de retrouver le source.
Mais le source n'est en aucun cas présent dans les .class
Les obfuscateurs ne chiffrent pas généralement pas les .class,
mais ils se contentent de remplacer des morceaux de bytecode
par du bytecode équivalent.
Cela suffit à berner les décompilateurs qui n'y retrouvent
plus leurs petits.
C'est largement suffisant pour rendre un .class impossible à
décompiler.
Bien entendu cela n'empêche pas son désassemblage.
:-)
Pour le C++:
Je suis d'accord, avec la remarque que les optimisations
des compilateurs rendent (dans certains cas) le code
assembleur très difficile à comprendre.
Pour VB:
Je suis d'accord.
Pour Java:
Le code source n'est pas inclu dans l'applet Java.
L'applet Java ne contient que le bytecode, et éventuellement les symboles (noms des références et des numéros de ligne).
Etant donné que la machine virtuelle est standardisée, les mêmes instructions donnent toujours le même bytecode.
C'est ce qui permet aux décompilateurs de retrouver le source.
Mais le source n'est en aucun cas présent dans les .class
Les obfuscateurs ne chiffrent pas généralement pas les .class,
mais ils se contentent de remplacer des morceaux de bytecode
par du bytecode équivalent.
Cela suffit à berner les décompilateurs qui n'y retrouvent
plus leurs petits.
C'est largement suffisant pour rendre un .class impossible à
décompiler.
Bien entendu cela n'empêche pas son désassemblage.
:-)
Pour le C++:
Je suis d'accord, avec la remarque que les optimisations
des compilateurs rendent (dans certains cas) le code
assembleur très difficile à comprendre.
Pour VB:
Je suis d'accord.
Petites précisions :
Lorsqu'un dévloppeur programme un programme, il écrit dans un langage (C++, java, VB...) qui va être traduit par un autre programme (un compilateur le plus souvent) en langage machine. Ce langage machine est en fait le langage que "comprend" le processeur, il s'agit d'un code binaire souvent converti en code héxadécimal (de 0 à 9 et de A à F) pour facilité sa lecture (même si toujours difficile). Ainsi un programme compilé (.exe) est en langage machine qui est très difficile à comprendre.
Un décompilateur permet de faire l'inverse de la compilation, mais n'est pas très fiable car le fichier compilé ne contient pas les commentaires et les noms de variables qu'il y avait dans le code source qui sont parfois essentielles pour comprendre la logique du programme. Les dévelopeurs préfèrent compiler leurs programme que de les faire interpréter afin de protéger le code source !
Malgrès cela je cherche tout de même un décompilateur C++ pour m'entrainer à la programation, j'ai essayé boomerang mais il bug à chaque programme que j'essais de décompiler. Alors merci d'avance à celui qui m'en trouvera un...
Lorsqu'un dévloppeur programme un programme, il écrit dans un langage (C++, java, VB...) qui va être traduit par un autre programme (un compilateur le plus souvent) en langage machine. Ce langage machine est en fait le langage que "comprend" le processeur, il s'agit d'un code binaire souvent converti en code héxadécimal (de 0 à 9 et de A à F) pour facilité sa lecture (même si toujours difficile). Ainsi un programme compilé (.exe) est en langage machine qui est très difficile à comprendre.
Un décompilateur permet de faire l'inverse de la compilation, mais n'est pas très fiable car le fichier compilé ne contient pas les commentaires et les noms de variables qu'il y avait dans le code source qui sont parfois essentielles pour comprendre la logique du programme. Les dévelopeurs préfèrent compiler leurs programme que de les faire interpréter afin de protéger le code source !
Malgrès cela je cherche tout de même un décompilateur C++ pour m'entrainer à la programation, j'ai essayé boomerang mais il bug à chaque programme que j'essais de décompiler. Alors merci d'avance à celui qui m'en trouvera un...
Concernant les applets java, les login et mot de passe ne sont jamais en clair dans une applet, se serait tout à fait absurde d'agir comme cela, ils sont en général stockés sous forme de cookie sur la machine de l'utilisateur, et cryptés par exemple par l'algorithme de cryptage MD5, qui est unidirectionnel, et donc ne peut être décrypté. Par la suite, pour savoir si un mot de passe correspond à celui crypté, le mot de passe saisi par l'utilisateur est crypté à son tour, de sorte que la comparaison s'effectue sur des mots cryptés!
Une remarque générale, quel est l'intérêt de décompiler un jeu si ce n'est pour pouvoir l'utiliser sans licence? Apprendre à coder? non, certainement pas, il ya assez de logiciels open sources pour cela. Généralement l'intérêt, c'est le piratage qui est quand même et heureusement interdit.
Bien entendu même la décompilation d'un applet n'a jamais causé de faille de sécurité à moin que celui qui ais écrit le systéme l'ait mal conçu.
Tenter d'en comprendre le fonctionnement et eventuellement se servir de ce qui est recuperable pour creer des outils de modding...
Je ne considere pas cela comme du piratage, faudrait arrêter la chasse aux sorcieres
plutonium2222 (skype)
les fichiers dedans les *.d2p sonts en . swl pas en swf ^^