J'ai quelques questions innocentes / débutantes:
- À quoi sert la rétro-ingénierie?
- En tant que programmeur, devrais-je apprendre l'art de la rétro-ingénierie?
- Quels sont les avantages pour un programmeur expérimenté?
c
assembly
low-level
reverse-engineering
chaussette
la source
la source
Réponses:
L'ingénierie inverse est principalement utile pour le piratage et le piratage (supprimer la protection du numéro de série ou les invites de mot de passe), mais aussi pour comprendre les virus ou les miracles que d'autres logiciels peuvent effectuer. Parfois, c'est une compétence utile à avoir pour trouver des bogues dans des programmes dont vous n'avez pas la source et les corriger.
Oui, essayez d'apprendre l'assembleur et d'utiliser un débogueur décent. Cela fera de vous un meilleur développeur en comprenant les choses à des niveaux inférieurs, plus proches du métal.
Vous serez un bon hacker / cracker. Vous pourriez travailler pour d'autres producteurs d'antivirus. À titre d'exemple personnel: j'ai une fois inversé l'ingénierie d'un logiciel pour retrouver une erreur qui s'est produite lors de l'établissement d'une connexion Oracle. Personne d'autre ne pouvait résoudre le problème, alors j'ai acquis une certaine renommée.
En outre, je voudrais également citer le commentaire de @ johannes , car il a absolument raison:
la source
J'aime la réponse de Falcon , mais j'aimerais ajouter que sur certains vieux mondes ennuyeux du monde des applications métier, l'ingénierie inverse peut vous sortir de quelques problèmes désagréables.
Au travail, nous le faisons beaucoup lors de l'intégration de données avec un système tiers qui n'a pas de nouvelle maintenance, afin que nous puissions savoir où il devrait ou ne devrait pas se casser.
Nous utilisons également l'ingénierie inverse pour vérifier la qualité du code (avec certaines contraintes, bien sûr) sur les composants tiers que nous achetons, si le code source n'est pas inclus.
Mon vrai point est le suivant: l'ingénierie inverse n'est pas liée à une seule technologie ou à un seul langage, mais est un processus où vous apprenez les caractéristiques internes d'une "boîte noire" . Si vous avez du code dont vous dépendez, mais que vous ne faites pas ou ne pouvez pas faire confiance, vous devriez certainement jeter un coup d'œil sous le capot et voir ce que ce code fait.
la source
Il y a aussi le côté ennuyeux de l'ingénierie inverse. C'est lorsque l'entreprise dans laquelle vous vous trouvez a un peu de code ou de programme qui est toujours utilisé, mais personne ne prétend en savoir quelque chose. Donc, vous le parcourez, le documentez, écrivez des tests et tout ce qui doit être fait avant le démarrage d'un projet. Vous faites cela pour un logiciel déjà écrit, d'où la "rétro-ingénierie".
C'est beaucoup plus facile quand vous avez le code, mais c'est toujours de l'ingénierie inverse. C'est l'un de ces termes qui revient beaucoup dans les réunions d'affaires quand ils parlent de projets hérités.
la source
Juste pour développer la valeur commerciale de l'ingénierie inverse - plus de la moitié des nouveaux clients que nous rencontrons ont un système / application existant (pas toujours en production, pensez-vous), mais où la relation avec un ancien fournisseur de développement logiciel a dérapé.
Dans environ 30% des cas, le client n'a pas du tout la source de son système, et dans de nombreux cas, une grande partie du processus métier, des règles et des connaissances réelles est enfermée dans du code.
Et dans quelques cas où les fournisseurs précédents sont devenus simplement malveillants, ont obscurci les binaires, ont verrouillé le code, etc. afin de piéger le client indéfiniment.
Donc, pour répondre à votre question, la rétro-ingénierie est souvent un point de départ pour de nouveaux engagements avec des clients plutôt désespérés (et brûlés), et il peut être un facteur de réussite `` critique pour l'entreprise '' d'extraire des connaissances oubliées du code existant.
la source
Je dirais que l'ensemble de compétences pour la rétro-ingénierie et l'ensemble de compétences pour le débogage sont exactement les mêmes - si vous êtes un débogueur fantastique, vous êtes également un ingénieur du génie inverse fantastique, et vice-versa.
la source
Parfois, il est utilisé pour faire fonctionner certaines pièces / logiciels pour autant que je sache. Quelques interfaces étranges, bugs dans l'implémentation, etc.
Mais d'après ce que je comprends, c'est un sujet très glissant, et donc, les lois déjà complexes du développement logiciel sont poussées à l'extrême avec la rétro-ingénierie.
la source
Eh bien, avec la rétro-ingénierie, vous pouvez réutiliser du code en minimisant votre travail.Par exemple, dans Symfony2, vous pouvez convertir une base de données créée à partir de MySQL normal et la convertir au format doctrine et il s'agit d'un processus d'ingénierie inverse rendu possible dans Symfony. .... et avec l'ingénierie inverse, vous pouvez voir le code, disons 'en 2D'
la source
Je donne juste un exemple concret de mon expérience.
Une fois que notre entreprise a repris un projet d'une autre entreprise. Environ six mois après le début du projet, nous avons réalisé qu'un sous-projet était sans code. Lorsque nous avons demandé à l'ancienne entreprise de fournir le code, ils ont poliment répondu qu'ils ne pouvaient pas trouver le code du sous-projet. Nous avions besoin du code parce que nous voulions changer quelque chose dans ce sous-projet.
J'ai dû inverser l'ingénierie du sous-projet.
J'ai d'abord décompilé l'assembly (oui, c'est un projet .NET). Le résultat de l'assemblage décompilé est un code fade et déroutant sans noms de variables locales et une structure de contrôle compliquée. En effet, la compilation ignore les informations importantes qui ne peuvent pas être décompilées.
Ensuite, j'ai essayé de savoir où changer ce code. Pour ce faire, j'ai rationalisé le code pour qu'il se comporte de la même manière mais de manière plus concise. J'ai également deviné les noms des variables à partir de son comportement. J'ai parcouru le code plusieurs fois jusqu'à ce que je comprenne ce qu'il fait.
Je n'ai pas tout désossé, seulement la partie à changer. Ce n'était pas trop mal, environ 200 lignes de code VB. Cela a pris environ cinq jours de temps de travail.
la source