Bonjour, je voudrais savoir s'il est possible et si oui comment on peut afficher le code source d'un programme en c en ayant seulement son éxécutable. Merci d'avance
Version imprimable
Bonjour, je voudrais savoir s'il est possible et si oui comment on peut afficher le code source d'un programme en c en ayant seulement son éxécutable. Merci d'avance
Impossible ! Tu peux désassembler un executable avec un désassembleur (w32dasm) pour voir le code machine (assembleur donc) mais tu ne peux récupérer directement le .c !! Sans ça le code source de windows serait déjà disponible depuis longtemps ;)
Le C à été fait en asembleur, on peut insérer du code assembleur dans un programme C alors on peux modifier ou plutôt rajouter du code a un programme déasemblé.
Citation:
Bonjour, je voudrais savoir s'il est possible et si oui comment on peut afficher le code source d'un programme en c en ayant seulement son éxécutable. Merci d'avance
Ca existe et cela s'appelle un decompiler , example boomerang : ici
A mon avis le code seras illisible , mais bon .
ça m'étonnerais que ce genre de cochonneries marche, sinon on le saurais depuis longtemps et Bill Gate serait ruiné ;)
Idem que shugo, je vais tester mais j'y crois pas trop! Sinon ce serait vraiment une aubaine pour les crackers en tout genre ! :roll:
Non. Il y a une infinité de code C qui peuvent produire le même exécutable. Il faut apprendre à faire des sauvegardes.Citation:
Envoyé par Henkka
Je m'en doutais ça marche pas :roll: et de toute façon Emmanuel à raison il y a des centanes de façon d'obtenir le même code source, exemple pour un programme qui affiche hello Word en console il y a plusieurs solutions :
ouCode:
1
2
3
4
5
6 int main(int argc, char* argv[]) { printf("Hello Word\n"); return 0; }
ou alors :Code:
1
2
3
4
5
6 int main(int argc, char* argv[]) { fprintf(stdout,"Hello Word\n"); return 0; }
ou encore :Code:
1
2
3
4
5
6 int main(int argc, char* argv[]) { fputs(sdtout,"Hello Word\n"); return 0; }
ou encore ça :Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 int main(int argc, char* argv[]) { fputc(stdout,"H"); fputc(stdout,"e"); fputc(stdout,"l"); fputc(stdout,"l"); fputc(stdout,"o"); fputc(stdout," "); fputc(stdout,"W"); fputc(stdout,"o"); fputc(stdout,"r"); fputc(stdout,"d"); fputc(stdout,"\n"); return 0; }
[/code]
ou encore :
le nombre de possibilitées est quasiment infini alors pour un code source d'OS......Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 int main(int argc, char* argv[]) { int i = 0; fputc(stdout,"H"); fputc(stdout,"e"); for(i;i<2;i++) { fputc(stdout,"l"); } fputc(stdout,"o"); fputc(stdout," "); fputc(stdout,"W"); fputc(stdout,"o"); fputc(stdout,"r"); fputc(stdout,"d"); fputc(stdout,"\n"); return 0; }
J'aime bien celui là moi personnellement :mouarf: avec le for en plein milieu j'y aurais pas penséCitation:
Envoyé par Shugo78
Attends j'en ai plein d'autre :
ou encore ça :Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 int main(int argc, char* argv[]) { int passage; int i=1; while(i) { passage = 1; fprintf(stdout,"Hello Word\n"); if(passage==1) { i = 0; } } } return 0; }
C'est pour prouver que leurs histoires de décompilateur c'est n'importe quoi.Code:
1
2
3
4
5
6
7
8
9
10 int main(int argc, char* argv[]) { int x = 2+3; if(x == 6-1) { fprintf(stdout,"Hello Word\n"); } return 0; }
As-tu essayé avant de dire des énormités pareilles ?Citation:
Envoyé par Shugo78
Télécharges boomerang et essaye le.
Bien sûr que non tu ne retrouvera jamais le code source original mais peut-etre quelque chose qui s'y approche, et sur des programmes faciles pas des machins compliqués.
http://boomerang.sourceforge.net/cando.php?hidemenu
Ensuite lis ça.
http://boomerang.sourceforge.net/cantdo.php
Donc essaye avant de poster, merci.
Ca depends ce que tu appelles marcher.Citation:
Envoyé par Shugo78
Si tu t'attends a retrouver exactement le code d'origine, noms et commentaires compris, tu vas evidement etre decu.
Par contre il est possible de retrouver un code C correct produisant apres compilation le meme executable. Par contre il n'y aura pas de commentaire, les noms vont etre folkloriques et absolument pas parlant et la construction du code pas tres naturelle.
J'ai essayé boomerang mais :roll: ..... j'ai pas réussi la seule fois où il à bien voulu lancer la décompilation le code était rempli d'erreur et incompilable sous C::B et pourtant c'était pas un programme compliqué, c'était un gestionnaire de commentaire de livre, tu demandes un livre et ça ouvre le fichier avec le commentaire sur le livre et ça te l'affiche , et pour avoir comparé les deux sources cela ne marche pas en tout cas pas pour ça, mais comme c'est en évolution je ne dis pas que ça marcheras jamais car après quelques(petites :aie:) réctifications le code marchais presque mais il ne fonctionnais pas comme l'orginal et avec quelques bugs.
Mais je ne sais pas cette solution marchera peut être super bien à l'avenir mais pour le moment c'est moyen c'est tout.
Boomerang, je ne connais pas, donc je ne saurais pas dire ce qu'il vaut.Citation:
Envoyé par Shugo78
Mais il existe bel et bien des outils qui realisent "correctement" ce type de travail.
Le souci c'est que le code obtenu est suffisament obscur (le plus souvent une conversion mot a mot de l'assembleur, sans commentaire, avec des noms generes automatiquement sans aucun sens) pour ne pas etre d'une utilite folle.
Je réponds qu'il est impossible(dire que les décompilateurs étaient n'importe quoi c'était poussé) d'obtenir un *.c propre et correcte(et relisable) depuis un *.exe car c'est la question originellement posée non ?
La question etait "on peut afficher le code source d'un programme en c en ayant seulement son éxécutable".Citation:
Envoyé par Shugo78
Effectivement d'avoir LE code source original ce n'est pas possible (ou alors avec beaucoup de chance).
D'avoir UN code source compilable oui, Un code source lisible je n'ai pas encore vu (mais de la a dire que c'est impossible c'est un pas que je me garderais bien de franchir, d'autant que la notion de lisibilite est somme toute assez subjective)
du moins pour le moment a moins qu'Henkka ne parlait au futur dans sa question(mais il me semble que non) Je lui réponds que obtenir un code source en fichier *.c propre, correcte et relisable depuis un *;exe est IMPOSSIBLE(du moins pour l'instant).
N'ayant pas essayer tous les logiciels de ce type existant a l'heure actuelle, je prefere ne pas m'avancer a pretendre que c'est impossible.Citation:
Envoyé par Shugo78
Je n'en ai pour l'instant pas vu de reelement satisfaisant (sauf code bien particulier) et il me semble peu probable d'en rencontrer dans un avenir proche. Mais pour avoir deja eu des surprises, le terme impossible me semble un peu fort.
C'est vrai mais si un logiciel miracle du tyê éxisté je pense qu'on le saurait non ?
Pour enfoncer le clou :
Citation:
As tu déja réussi a crée une vache a partir de 400 Kg de steack haché ?
Et ben pour retrouver les sources a partir de l'exécutable, c'est la même chose.