Rétroingénierie: à quoi ça sert vraiment? [fermé]


15

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é?

5
Cette question concerne-t-elle uniquement le type de désassemblage de l'ingénierie inverse, ou les autres également? (puisque "assemblage" et "bas niveau" sont dans les balises ..)
Izkata

Réponses:


14

À quoi sert la rétro-ingénierie?

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.

En tant que programmeur, devrais-je apprendre l'art de la rétro-ingénierie?

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.

Quels seront les avantages d'un programmeur qui possède une bonne expérience de l'ingénierie inverse?

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:

Je ne le limiterai pas au "mauvais" craquage. Le démontage peut être utile pour déterminer si le compilateur est devenu fou (cependant c'est généralement votre code), d'un point de vue plus administrateur, il peut être intéressant de voir où une application échoue.


8
Je ne le limiterai pas au "mauvais" craquage. Le démontage peut être utile pour déterminer si le compilateur est devenu fou (cependant c'est généralement votre code), d'un point de vue plus administrateur, il peut être intéressant de voir où une application échoue, ...
johannes

@johannes: Oui, vous avez raison. Puis-je écrire cela dans ma réponse?
Falcon

bien sûr, faites ce que vous voulez, je ne revendique aucun droit d'auteur à ce sujet ;-)
johannes

7
Je suis désolé, mais c'est une réponse absolument terrible. L'ingénierie inverse n'est absolument pas "principalement destinée à ... pirater et pirater" tel que défini, et quiconque ne s'occupe pas de la programmation des systèmes se fait un tort de lui être présenté dans cette perspective idéologique.
Chuu

1
Je ne pense pas que cela ait encore été mentionné, mais soyez prudent si vous le faites sur un logiciel qui n'est pas le vôtre (ou ne le dites à personne). Presque tous les CLUF commerciaux interdisent l'ingénierie inverse. Vous ne voulez pas obtenir une lettre de cesser et de s'abstenir avec des copies à quelqu'un avocat de propriété intellectuelle.
Bratch

25

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.


Heck, nous examinons même les procédures stockées SQL des systèmes tiers que nous louons juste pour vérifier si elles remplissent parfois correctement nos exigences.
Machado

3
+1. Même un produit logiciel à grande vente d'une grande entreprise peut parfois être un peu une boîte noire, avec une documentation en ligne inadéquate, obsolète, tout simplement erronée, parfois inexistante, etc.
RalphChapin

13

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.


+1, particulièrement vrai pour moi. J'ai travaillé sur certaines banques où les anciens systèmes n'avaient pas un seul document technique.
Machado

7

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.


2

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.


1

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.


1

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'


0

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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.