l'ingénierie inverse des programmes en c
tous les programmes c est converti en code machine, si ce binaire est distribué. Depuis le jeu d'instructions d'un ordinateur est bien connu, est-il possible de récupérer le C programme d'origine?
Où est la question?
est-il possible de récupérer le C programme d'origine?
Pate, mettre une question de symbole à la fin de "originale" et vous avez à votre question 😐 wow....
Je viens de faire une soupe de poisson. puis-je obtenir de l'origine du poisson?
Deux obstacles majeurs: l'Optimisation et de la Chute des Informations de Nom. Au moment de l'exécution du code, les compilateurs préfère abandonner la fonction et les noms de variables, car ils ne sont pas nécessaires. Les compilateurs peuvent également optimiser le code de sorte qu'il n'est pas regard comme l'original, mais fonctionne de la même manière.
est-il possible de récupérer le C programme d'origine?
Pate, mettre une question de symbole à la fin de "originale" et vous avez à votre question 😐 wow....
Je viens de faire une soupe de poisson. puis-je obtenir de l'origine du poisson?
Deux obstacles majeurs: l'Optimisation et de la Chute des Informations de Nom. Au moment de l'exécution du code, les compilateurs préfère abandonner la fonction et les noms de variables, car ils ne sont pas nécessaires. Les compilateurs peuvent également optimiser le code de sorte qu'il n'est pas regard comme l'original, mais fonctionne de la même manière.
OriginalL'auteur shreyasva | 2010-02-16
Vous devez vous connecter pour publier un commentaire.
Vous pouvez ne jamais revenir à exactement la même source car il n'y a pas de méta-données à ce sujet enregistrée avec le code compilé.
Mais vous pouvez re-créer un code de l'assemblée-code.
Découvrez ce livre si vous êtes intéressés par ces choses: Inverser: les Secrets de l'Ingénierie Inverse.
Modifier
Certains compilateurs-101 ici, si vous deviez définir un compilateur à un autre mot et pas aussi technique que "compilateur", quel serait-il?
Réponse: Traducteur
Un compilateur traduit la syntaxe /phrases que vous avez écrites dans une autre langue, un compilateur C se traduit par l'Assemblée ou même du code Machine. Le Code C# est traduite en IL et ainsi de suite.
L'exécutable que vous avez est juste une traduction de votre texte d'origine /de syntaxe et si vous voulez "inverser" donc "traduire en arrière", vous ne pourrez probablement pas obtenir la même structure que vous aviez au début.
Un plus de vie réelle, exemple serait si vous le Traduire de l'anglais vers l'allemand et de l'allemand vers l'anglais, la sentance structure sera probablement différent, d'autres termes peuvent être utilisés, mais le sens, le contexte, ne sera probablement pas avoir changé.
Il en va de même pour un compilateur /traducteur si vous aller de C à l'ASM, la logique est la même, c'est juste une façon différente de le lire ( et bien sûr son optimisé ).
OriginalL'auteur
Cela dépend de ce que tu veux dire par la C d'origine du programme. Des choses comme variable locale des noms, des commentaires, etc... ne sont pas inclus dans le binaire, donc il n'y a aucun moyen d'obtenir exactement le même code source que celle utilisée pour produire de la binaire. Des outils tels que IDA Pro peut vous aider à démonter un binaire.
Si vous utilisez objdump -S que vous pourriez obtenir plus d'informations.
(et le programme a été compilé avec g ?)
OriginalL'auteur
Je guestimate le taux de conversion d'un très qualifiés hacker, 1 kilo-octet de code machine par jour. Commune de l'Ouest de salaires, qui met le prix de, disons, 100 KO exécutable à environ $25,000. Après avoir passé beaucoup d'argent, tout ce qui est acquis est un morceau de code C qui fait exactement ce que le vôtre ne, moins au profit de commentaires et autres joyeusetés. Il est en aucune manière en concurrence avec votre version, vous serez en mesure de livrer des mises à jour et des améliorations beaucoup plus rapide. L'ingénierie inverse de ces mises à jour est non trivial effort.
Si cette étiquette de prix ne pas vous impressionner, vous pouvez arbitrairement augmenter le coût de la conversion en ajoutant plus de code. Il suffit de garder à l'esprit que les pirates qui peuvent s'attaquer à de grands programmes de ce genre ont quelque chose de beaucoup mieux à faire. Ils écrivent leur propre code.
OriginalL'auteur
L'un des meilleurs ouvrages sur ce sujet que je le connais est:
Les porcs de saucisses? La réingénierie de l'assembleur à C via FermaT.
La demande est que vous obtenez de retour raisonnable C programme, même si le code asm n'a pas été écrit en C! Beaucoup de mises en garde s'appliquent.
Vous avez effectivement utilisé le convertisseur de FermaT? ... Je l'avais s'attendre à ce que la trame de pile disposition ne serait pas faire un peu de différence; un cadre de pile est juste une sorte de "struct" et si vous pouvez les proposer raisonnable des structures pour les valeurs de tas, vous devriez être en mesure de le faire pour pile d'images. Pouvez-vous donner un exemple précis?
OriginalL'auteur
La Hex-Rays decompiler (extension à l'IDA Pro) peut faire exactement cela. Il est encore assez récente et à venir, mais très prometteur. Il faut un peu s'y habituer, mais peut potentiellement accélérer le train de renverser le processus. Ce n'est pas une "solution miracle" - pas de c decompiler est, mais c'est un grand atout.
for
,while
etdo-while
des boucles lorsque la alors peut être codé différemment dans la source? Aussi, comment est-il obtenir les noms des fonctions d'origine? Comment ça "non-optimiser le code pour correspondre à l'original? Comment est-il déterminer les noms de variable? Effectuer une recherche de news:comp.lang.c" *hamburger et la vache.Est-il question? Soit vous ne si je me soucie de la logique et non pas sur la forme
OriginalL'auteur
Le nom commun pour que cette procédure est "tournant du hamburger de retour dans les vaches." Il est possible de désosser le code binaire dans une fonctionnellement équivalent programme en C, mais si C code ressemble beaucoup à l'original est une question ouverte.
OriginalL'auteur
Travaillant sur des outils qui ne ce est une activité de recherche. C'est, il est possible d'obtenir quelque chose dans le cas faciles (vous ne pourrez pas récupérer les variables locales noms, à moins que les symboles de débogage sont présents, par exemple). Il est presque impossible en pratique pour les programmes de grande envergure ou si le programmeur a décidé de rendre la tâche difficile.
OriginalL'auteur
Il n'y a pas un mappage 1:1 entre un programme C et l'ASM/code machine, il va produire un programme C peut compiler à un résultat différent sur différents compilateurs ou avec des paramètres différents) et parfois les deux bits de C pourrait produire le même code machine.
Vous avez certainement peut générer du code C à partir d'un EXE compilé. Vous ne pouvez pas savoir combien semblable dans sa structure, il sera à l'original du code - à l'exception de variable, de fonction, les noms étant perdu, je suppose qu'il ne connaît pas l'original de la façon dont le code a été divisé entre de nombreux fichiers.
OriginalL'auteur
Vous pouvez essayer hex-rays.com il a vraiment une belle decompiler qui peut décompiler assemblée de code en C avec une précision de 99%.
OriginalL'auteur