Question

Vous pouvez en apprendre beaucoup sur les éléments internes d'une application grâce à la réflexion. Elle est exposée par le .NET BCL (bibliothèque de classes de base) et il est très simple de récupérer l'IL pour n'importe quelle méthode .NET.

Reverse engineering sur Wikipedia :

  

La rétroingénierie est la   processus de découverte du   principes technologiques d'un dispositif,   objet ou système par l'analyse de   sa structure, sa fonction et son fonctionnement.

La réflexion satisferait certainement à une analyse de structure. Mais où tracez-vous la ligne de démarcation entre l'introspection et l'ingénierie inverse? Et d’un point de vue juridique, l’ingénierie inverse de la réflexion?

Était-ce utile?

La solution

La frontière entre les deux semble floue. Ethiquement, je tracerais la ligne dans la motivation du programmeur.

S'il utilise la réflexion pour créer une bibliothèque, un outil ou un logiciel similaire censé interagir avec un code tiers répondant à certains critères, je ne le verrais pas comme du reverse engineering.

Par exemple, je venais d’écrire une classe de base générique pour les couches de données Linq2SQL. La classe de base utilise la réflexion pour mieux comprendre la structure de la base de données et gérer correctement les mises à jour des entités métier imbriquées. Si quelqu'un d'autre utilisait ma classe de base pour son application Web, je ne gagnerais aucune information sur son code source. Cette utilisation de la réflexion n'est certainement pas une ingénierie inverse.

Si, en revanche, le programmeur tente de comprendre le fonctionnement interne du logiciel d’un concurrent en utilisant la réflexion, il procède à un reverse engineering.

Autres conseils

Il faut remettre en question la définition de Reverse Engineering lorsque la possibilité de décompiler facilement le langage fait partie du langage à la réflexion.

À l'aide d'un outil comme .NET Reflector , j'ai l'impression que les lignes commencent vraiment à flou!

À l'aide d'un exemple de SO, ils ont récemment masqué le code source pour leur éditeur WMD. Je dirais que cela définit plus précisément le reverse engineering que le fait Reflection.

Reflection n’est qu’un outil pour lire les informations d’un assemblage, ce qui en soi n’est pas du reverse engineering.

Si vous utilisez ensuite ces informations pour déterminer le mode de création de l'assemblage, utilisez par exemple un réflecteur .NET pour générer un code source lisible pouvant générer le même code IL, à savoir le reverse engineering.

Je dirais que la réflexion n’est qu’un outil. L'utilisation de la réflexion ne signifie pas nécessairement l'ingénierie inverse.

Par exemple, si vous utilisez la réflexion pour découvrir les signatures de toutes les méthodes publiques et protégées d'un assemblage, cela ne signifie pas du reverse engineering.

En ce qui concerne le point de vue juridique, je vous suggère de regarder la loi qui vous inquiète pour trouver la définition de l'ingénierie inverse.

La réflexion est un outil qui peut être utilisé pour beaucoup de choses, y compris l’ingénierie inverse du code. La réflexion peut également être utilisée à de nombreuses autres fins, la mise en œuvre de langages dynamiques est beaucoup plus facile grâce à la réflexion, par exemple.

La réflexion seule n'est pas non plus suffisante pour l'ingénierie inverse. Vous pouvez trouver des informations sur la structure du programme de cette façon, mais vous devez toujours décompiler le code. Des outils tels que réflecteur ajoutent cette fonctionnalité.

En fait, c'est le contraire de l'ingénierie inverse.

Correctement, "Ingénierie inverse" est d'examiner les résultats d'un processus et de travailler en arrière pour déterminer comment il est arrivé là-bas. Généralement, cela se fait sans aucune connaissance du code d'origine et donne généralement un processus très différent.

Malgré les menaces effrayantes des détenteurs de droits d'auteur, c'est parfaitement légal.

" Désassemblage " (aka "Reflection") consiste simplement à lire des octets sur votre disque dur et à leur attribuer une signification. C'est précisément ce que le processeur fait lorsqu'il exécute le code. Ici, nous le rendons simplement lisible par l’homme. Encore une fois, malgré les menaces effrayantes des détenteurs de droits d'auteur, c'est parfaitement légal.

Vendre le code de quelqu'un d'autre (ou l'utiliser vous-même) d'une manière qui empêche le détenteur du droit d'auteur de tirer profit de son travail, est illégal, mais nous n'en parlons pas ici.

Je pense que vous parlez de deux choses différentes ici:

  • La réflexion est une technique qui peut être utilisée, entre autres, pour le reverse engineering.
  • La reverse engineering est une action qui peut, mais ne doit pas nécessairement, utiliser la réflexion pour atteindre ses objectifs.

D'un point de vue juridique, cela dépend de votre objectif, si vous utilisez la réflexion à des fins d'ingénierie inverse.

Bien sûr, IANAL, mais je pense que l’ingénierie inverse n’est pas illégale en soi. Cela peut devenir une activité illégale par procuration , c’est-à-dire par violation des droits d’auteur, etc.

Non. Avec la réflexion, vous ne parlez généralement que d’une manière différente d’appeler des méthodes, voire de rechercher des attributs de méthode.

En revanche, je pense que le produit de l’ingénierie inverse doit produire un code source que je peux consulter pour comprendre les algorithmes et les idées de l’auteur, ce qu’ils essaient généralement de protéger.

Les questions juridiques doivent être posées aux avocats. Les avocats facturent de l'argent. Ne pas engager d'avocats peut coûter encore plus cher si vous êtes poursuivi en justice pour ne pas avoir demandé à un avocat.

Meilleur pari: pas besoin de demander. Microsoft a déjà publié le code source de nombreux fichiers .NET. Voir http://www.microsoft.com/resources/sharedsource/default.mspx.

Tout dépend de l’ampleur de votre réflexion. Si vous utilisez un outil tel que Reflector , ou si vous codez quelque chose comme ça vous-même, alors ce serait de l'ingénierie inverse car vous arrivez au code source.

La réflexion peut être utilisée pour invoquer des méthodes ou examiner des attributs comme l'a dit Don, mais elle peut également être utilisée pour analyser la structure d'un assemblage et même jeter un coup d'œil à l'intérieur du code MSIL sous-jacent. Donc, une utilisation de la réflexion pourrait être innocente, et une autre serait l’ingénierie inverse.

Réflexion est un terme informatique général qui était utilisé des décennies auparavant. l'introduction de Microsoft .Net Framework (que SUN JVM). L’idée n’était pas d’inverser l’ingénierie. Que, dans des contextes spécifiques, il puisse être utilisé à cette fin est simplement accidentel. Comme d’autres l’ont écrit, la réflexion est un "outil".

Dans de nombreux langages tels que .NET et Java, les réflexions de syntaxes médiocres ne vous permettent pas d’interagir librement avec des objets.

Dans les langages vraiment orientés objet comme Smalltak ou Self, vous n’avez presque jamais besoin de réflexion et, si nécessaire, il est de loin plus puissant que ceux proposés par .NET et Java.

Cela dit, j’estime que la réflexion est une ingénierie inverse, considérer que RE est plus une compréhension du code pour en faire quelque chose plutôt que de casser les protections des autres.

Je travaille actuellement beaucoup avec Drupal (basé sur PHP), qui utilise des choses laides telles que la concaténation des noms de modules en noms de hook prédéfinis pour rechercher si cette fonction existe, afin qu'elle puisse être appelée ultérieurement (par exemple, module_hook_name).

C’est très pratique, mais je crois aux vrais langages d’OO qui peuvent être évités en sous-classant une classe abstraite pouvant répondre à n’importe quel message. Les sous-classes peuvent remplacer cette propriété.

Reflection ne doit pas être utilisé, sauf dans des circonstances extrêmes, où vous pouvez voir les failles des langages de programmation.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top