Ist Reflektion Reverse Engineering?

8

Sie können viel über die Interna einer Anwendung durch Reflexion herausfinden, es wird durch die .NET BCL (Basisklassenbibliothek) offengelegt und es macht es trivial, die tatsächliche IL für jede .NET-Methode abzurufen.

Reverse Engineering auf Wikipedia :

  

Reverse Engineering ist das   Prozess der Entdeckung der   technologische Prinzipien eines Gerätes,   Objekt oder System durch Analyse von   seine Struktur, Funktion und Operation.

Reflexion würde sicherlich als Strukturanalyse genügen. Aber wo ziehen Sie die Grenze zwischen Introspektion und Reverse Engineering? Und von einem rechtlichen Standpunkt aus ist Reflektion Reverse Engineering?

    
John Leidegren 11.03.2009, 13:44
quelle

12 Antworten

8

Die Grenze zwischen den beiden scheint verschwommen zu sein. Ethisch würde ich die Linie in der Motivation des Programmierers zeichnen.

Wenn er Reflektion verwendet, um eine Bibliothek, ein Werkzeug oder eine ähnliche Software zu erstellen, die mit Code von Drittanbietern interagieren soll, der bestimmte Kriterien erfüllt, würde ich das nicht als Reverse Engineering sehen.

Zum Beispiel habe ich kürzlich eine generische Basisklasse für Linq2SQL-Datenlayer geschrieben. Die Basisklasse verwendet Reflektion, um Einblick in das Datenbanklayout zu erhalten und Updates verschachtelter Geschäftsentitäten ordnungsgemäß zu handhaben. Wenn jemand anderes meine Basisklasse für seine Webanwendung verwendet, würde ich kein Wissen über seinen Quellcode erlangen. Diese Verwendung von Reflektion ist sicherlich kein Reverse Engineering.

Wenn der Programmierer andererseits versucht, die innere Funktionsweise der Software eines Konkurrenten durch Reflexion zu verstehen, baut er sie zurück.

    
Adrian Grigore 11.03.2009, 13:51
quelle
6

Man muss die Definition von Reverse Engineering in Frage stellen, wenn die Fähigkeit, die Sprache leicht zu dekompilieren, Teil der Sprache ala Reflection ist.

Mit einem Werkzeug wie .NET Reflector fühle ich mich, als ob die Linien wirklich verschwimmen!

>

Unter Verwendung eines Beispiels von SO selbst haben sie kürzlich den Quelltext ent-verschleiert für ihren WMD-Editor. Ich würde argumentieren, dass dies Reverse Engineering mehr als Reflection definiert.

    
Gavin Miller 11.03.2009 13:52
quelle
4

Reflection ist nur ein Werkzeug, um Informationen aus einer Assembly zu lesen, so dass es kein Reverse Engineering ist.

Wenn Sie diese Informationen dann verwenden, um herauszufinden, wie die Assembly erstellt wurde, z. B. mithilfe von .NET reflector, um lesbaren Quellcode zu erzeugen, der denselben IL-Code generieren kann, ist das Reverse Engineering.

    
Guffa 11.03.2009 15:01
quelle
3

Ich würde sagen, Reflexion ist nur ein Werkzeug. Die Verwendung von Reflektion bedeutet nicht unbedingt Reverse Engineering.

Wenn Sie z. B. mithilfe von Reflection die Signaturen aller öffentlichen und geschützten Methoden in einer Assembly ermitteln, würde dies nicht zu Reverse Engineering führen.

Aus rechtlicher Sicht schlage ich vor, dass Sie sich das Gesetz ansehen müssen, für das Sie sich sorgen, um die Definition von Reverse Engineering zu finden.

    
ninj 11.03.2009 14:05
quelle
2

Reflection ist ein Werkzeug, das für viele Dinge verwendet werden kann, einschließlich des Reverse Engineering von Code. Reflection kann auch für viele andere Zwecke verwendet werden, die Implementierung dynamischer Sprachen ist beispielsweise dank Reflektion wesentlich einfacher.

Reflection alleine reicht auch nicht für das Reverse Engineering. Sie können Informationen über die Programmstruktur auf diese Weise finden, aber Sie müssen den Code immer noch dekompilieren. Werkzeuge wie Reflektor fügen diese Funktionalität hinzu.

    
Mendelt 11.03.2009 13:56
quelle
2

Eigentlich ist es das genaue Gegenteil von Reverse Engineering.

Richtig, "Reverse Engineering" bedeutet, die Ergebnisse eines Prozesses zu betrachten und rückwärts zu arbeiten, um festzustellen, wie es dorthin gelangt ist. Im Allgemeinen geschieht dies ohne Kenntnis des ursprünglichen Codes und führt im Allgemeinen zu einem ganz anderen Prozess.

Trotz gruseliger Drohungen von Copyright-Inhabern ist das vollkommen legal.

"Disassembly" (auch bekannt als "Reflection") ist nur die Aktion, Bytes auf Ihrer Festplatte zu lesen und ihnen Bedeutung zuzuweisen. Genau das tut die CPU, wenn sie den Code ausführt. Hier machen wir es nur für Menschen lesbar. Wiederum ist es trotz der unheimlichen Drohungen von Urheberrechtsinhabern völlig legal.

Den Code eines anderen zu verkaufen (oder ihn selbst zu verwenden), so dass der Urheberrechtsinhaber nicht von seiner Arbeit profitieren kann, ist illegal, aber darüber reden wir hier nicht.

>     
James Curran 11.03.2009 14:03
quelle
2

Ich denke, Sie sprechen hier über zwei verschiedene Dinge:

  • Reflection ist eine Technik, die (unter anderem) für das Reverse Engineering verwendet werden kann.
  • Reverse engineering ist eine Aktion, die Reflektion zum Erreichen ihrer Ziele einsetzen kann, aber nicht muss.

Aus rechtlicher Sicht hängt es von Ihrem Ziel ab, ob Sie Reflektionen für das Reverse Engineering verwenden.

Natürlich IANAL, aber ich glaube, dass Reverse Engineering für sich genommen nicht illegal ist. Es kann eine illegale Aktivität werden, durch Verletzung von Urheberrechten etc.

    
Treb 11.03.2009 15:03
quelle
0

Nein. Bei der Reflektion sprechen Sie in der Regel nur über eine andere Methode, Methoden aufzurufen oder möglicherweise nach Methodenattributen zu suchen.

Im Gegensatz dazu erwarte ich, dass das Produkt des Reverse-Engineerings Quellcode produziert, den ich mir ansehen kann, um die Algorithmen und Ideen des Autors zu verstehen, die typischerweise zu schützen versuchen.

    
Don Branson 11.03.2009 13:50
quelle
0

Rechtsfragen müssen von Anwälten gestellt werden. Anwälte verlangen Geld. Nicht die Anstellung von Rechtsanwälten kann noch mehr Geld kosten, wenn Sie dafür verklagt werden, dass Sie keinen Anwalt fragen.

Beste Wette: muss nicht fragen. Microsoft hat bereits eine Quelle für viele .NET veröffentlicht. Siehe Ссылка .

    
John Saunders 11.03.2009 13:52
quelle
0

Es hängt alles davon ab, wie viel Sie darüber nachdenken. Wenn Sie ein Werkzeug wie Reflektor verwenden oder etwas ähnliches selbst programmieren, dann wäre das Reverse Engineering Sie kommen tatsächlich zum Quellcode.

Reflection kann verwendet werden, um Methoden aufzurufen oder um Attribute zu betrachten, wie Don sagte, aber es kann auch verwendet werden, um die Struktur einer Assembly zu analysieren und sogar einen Blick in den zugrunde liegenden MSIL-Code zu werfen. So könnte ein Gebrauch der Reflexion unschuldig sein, und man wäre Reverse Engineering.

    
Chris Hynes 11.03.2009 13:53
quelle
0

Reflection ist ein allgemeiner Begriff aus der Informatik, der Jahrzehnte vor der Einführung von Microsoft .Net verwendet wurde Rahmen (als SUN JVM). Die Idee war nicht , um die technische Anwendung rückgängig zu machen. In bestimmten Kontexten kann es zu diesem Zweck nur zufällig verwendet werden. Wie andere geschrieben haben, ist Reflexion ein "Werkzeug".

    
MaD70 17.10.2009 04:47
quelle
-2

Reflektion in vielen Sprachen wie .NET und Java sind Patches für schlechte Syntaxen, die Ihnen keine freie Interaktion mit Objekten ermöglichen.

In wirklich objektorientierten Sprachen wie Smalltak oder Self braucht man kaum Reflektion und ist bei Bedarf bei weitem leistungsfähiger als die, die von .NET und Java angeboten werden.

Nachdem ich das gesagt habe, glaube ich, dass Reflektion Reverse Engineering ist, wenn man bedenkt, dass RE mehr daran liegt, Code zu verstehen, um etwas damit zu tun, anstatt andere Schutzmechanismen zu durchbrechen.

Ich arbeite zur Zeit sehr viel mit Drupal (PHP-basiert), das hässliche Dinge verwendet, wie das Verketten von Modulnamen mit vordefinierten Hooknamen, um herauszufinden, ob diese Funktion existiert, damit sie später aufgerufen werden kann (zB module_hook_name).

Es ist sehr praktisch, aber ich glaube an echte OO-Sprachen, die vermieden werden können, indem man eine abstrakte Klasse unterklassifiziert, die jede Nachricht beantworten kann, und Unterklassen könnten dies außer Kraft setzen.

Reflexion sollte nicht verwendet werden, außer für extreme Umstände, wo Sie Fehler in Programmiersprachen sehen können.

    
Seb 11.03.2009 13:53
quelle