2009-03-11 20 views
8

Puede obtener más información acerca de los aspectos internos de una aplicación a través de la reflexión, está expuesto por .NET BCL (biblioteca de clases base) y hace que sea trivial recuperar IL reales para cualquier método .NET.¿Es la ingeniería inversa de reflexión?

ingeniería inversa en Wikipedia:

ingeniería inversa es el proceso de descubrir los principios tecnológicos de un dispositivo, objeto o sistema a través del análisis de su estructura, función y operación .

La reflexión ciertamente satisfaría el análisis de la estructura. ¿Pero dónde trazar la línea entre la introspección y la ingeniería inversa real? Y desde un punto de vista legal, ¿es la ingeniería inversa de reflexión?

Respuesta

8

El borde entre los dos parece borroso. Éticamente, dibujaría la línea en la motivación del programador.

Si él está utilizando la reflexión para construir una biblioteca, herramienta o software similar que se supone que interactúa con cualquier código de terceros que cumpla ciertos criterios, no lo vería como ingeniería inversa.

Por ejemplo, recientemente escribí una clase base genérica para capas de datos Linq2SQL. La clase base usa la reflexión para obtener información sobre el diseño de la base de datos y manejar adecuadamente las actualizaciones de las entidades comerciales anidadas. Si alguien más usa mi clase base para su aplicación web, no obtendría ningún conocimiento sobre su código fuente. Este uso de la reflexión ciertamente no es ingeniería inversa.

Si, por otro lado, el programador está tratando de entender el funcionamiento interno del software de un competidor mediante el uso de la reflexión, lo está haciendo ingeniería inversa.

+1

Gracias Adrian, el reflejo claro es una herramienta que se usa para muchas cosas, no para la ingeniería inversa. Si su objetivo es obtener detalles explícitos sobre un software de la competencia, la reflexión ciertamente ayuda con eso. –

0

No. Con la reflexión, por lo general solo habla de una forma diferente de invocar métodos, o posiblemente mirando los atributos del método.

Por el contrario, espero que el producto de ingeniería inversa produzca un código fuente que pueda ver para comprender los algoritmos e ideas del autor, que es lo que generalmente intentan proteger.

6

Uno debe poner en duda la definición de ingeniería inversa cuando la capacidad de descompilar fácilmente el idioma es una parte del lenguaje a la reflexión.

Con una herramienta como .NET Reflector ¡Siento que las líneas realmente empiezan a ser borrosas!

Utilizando un ejemplo de SO en sí, recientemente de-obfuscated the source code para su editor de WMD. Yo diría que esto define Ingeniería inversa más que Reflection.

+0

¿Has probado el complemento de exportación para Reflector? Lo he usado para guardar proyectos de los cuales he perdido el código fuente. Funciona casi sin problemas. –

0

Las preguntas legales deben hacerse a los abogados. Los abogados cobran dinero. No contratar abogados puede costar aún más dinero si lo demandan por no consultar a un abogado.

La mejor apuesta: no es necesario preguntar. Microsoft ya ha lanzado una fuente para muchos .NET. Ver http://www.microsoft.com/resources/sharedsource/default.mspx.

-2

La reflexión en muchos lenguajes como .NET y Java son parches para sintaxis deficientes que no le permiten interactuar libremente con Objetos.

En lenguajes realmente orientados a objetos como Smalltak o Self, casi nunca necesita reflexión y, si es necesario, es con mucho más más potentes que los ofrecidos por .NET y Java.

Habiendo dicho eso, creo que la reflexión es ingeniería inversa, considerando que RE es más como entender el código para hacer algo con él en lugar de romper las protecciones de los demás.

Actualmente estoy trabajando mucho con Drupal (basado en PHP), que usa cosas feas como concatenar nombres de módulos en nombres de ganchos predefinidos para encontrar si esa función existe, por lo que se puede llamar más tarde (por ejemplo, module_hook_name).

Es muy práctico, pero creo en los lenguajes OO reales que pueden evitarse subclasificando una clase abstracta que puede responder a cualquier mensaje y las subclases podrían anular eso.

La reflexión no se debe usar excepto en circunstancias extremas, que es donde se pueden ver los defectos de los lenguajes de programación.

+2

Respuesta tendenciosa. La reflexión conlleva un costo (en el tiempo de CPU, en la memoria, en la complejidad del lenguaje): en Smalltalk o Self uno simplemente no se da cuenta de ello. Además, parece que no entiendes para qué se usan los metadatos de reflexión, como lo indica tu comentario de subclases. –

+0

Yo entiendo; Prefiero decir que no entendiste mi punto: la reflexión es un parche pobre para hacer cosas que deberías poder hacer con un buen lenguaje. Mi comentario de subclases fue solo un ejemplo. – Seb

0

Todo depende de la medida en que reflexione. Si usa una herramienta como Reflector, o codifica algo así, entonces eso sería ingeniería inversa ya que en realidad está llegando al código fuente.

La reflexión se puede utilizar para invocar métodos o ver atributos como Don dijo, pero también se puede usar para analizar la estructura de un ensamblado e incluso para ver el código MSIL subyacente. Entonces, un uso de la reflexión podría ser inocente, y uno sería la ingeniería inversa.

2

Reflection es una herramienta que se puede utilizar para muchas cosas, incluida la ingeniería inversa del código. La reflexión también puede usarse para muchos otros fines, implementar lenguajes dinámicos es mucho más fácil gracias a la reflexión, por ejemplo.

La reflexión por sí sola tampoco es suficiente para la ingeniería inversa. Puede encontrar información sobre la estructura del programa de esa manera, pero aún necesita descompilar el código. Las herramientas como el reflector agregan esta funcionalidad.

2

En realidad, es el opuesto directo de la ingeniería inversa.

Correctamente, la "ingeniería inversa" consiste en observar los resultados de un proceso y trabajar hacia atrás para determinar cómo llegó allí. En general, se realiza sin ningún conocimiento del código original y generalmente produce un proceso muy diferente.

A pesar de las amenazas de miedo por parte de los titulares de derechos de autor, es perfectamente legal.

"Desensamblaje" (también conocido como "Reflexión") es simplemente la acción de leer bytes en su disco duro y asignarles un significado. Esto es precisamente lo que hace la CPU cuando ejecuta el código. Aquí, solo lo estamos haciendo legible para los humanos. Una vez más, a pesar de las amenazas de miedo de los titulares de derechos de autor, es perfectamente legal.

venta de código de otra persona (o el uso mismo) de una manera que evita el propietario de los derechos de sacar provecho de su trabajo, es ilegal, pero no estamos hablando de eso aquí.

+0

La reflexión ciertamente ayuda, no diría que es exactamente lo contrario, pero no está relacionado con la comprensión del ensamblaje X86. –

+0

"A pesar de las amenazas aterradoras de los titulares de derechos de autor, es perfectamente legal". - Ahora, como no estadounidense, ¿he oído hablar de la DMCA estadounidense que entiendo que eso es ilegal? El ejemplo clave que recuerdo fue un tipo que revirtió el controlador de nVidia para que Mandrivia (y luego Mandrake) no pudieran ingresar a Estados Unidos porque lo habrían arrestado. ¿Estoy malinterpretando la DMCA? –

+0

Bueno, no, Reflection (http://en.wikipedia.org/wiki/Reflection_%28computer_science%29) es más que simplemente el desmontaje. – MaD70

3

Yo diría que la reflexión es simplemente una herramienta. El uso de la reflexión no significa necesariamente ingeniería inversa.

Por ejemplo, si usa el reflejo para descubrir las firmas de todos los métodos públicos y protegidos en un ensamblado, eso no implicaría una ingeniería inversa.

En cuanto a un punto de vista legal, sugiero que tenga que mirar la ley que le preocupa para encontrar la definición de ingeniería inversa.

4

La reflexión es solo una herramienta para leer información de un conjunto, por lo que no es ingeniería inversa.

Si utiliza esta información para descubrir cómo se creó el conjunto, por ejemplo, utilizando el reflector .NET para producir código fuente legible que podría generar el mismo código IL, es decir, ingeniería inversa.

2

creo que estamos hablando de dos cosas diferentes aquí:

  • reflexión es una técnica, que se puede utilizar para la ingeniería inversa (entre otras cosas).
  • La ingeniería inversa es una acción que puede, pero no necesariamente debe, usar la reflexión para lograr sus objetivos.

Desde un punto de vista legal, depende de su objetivo, si está utilizando la reflexión con fines de ingeniería inversa.

Por supuesto IANAL, pero creo que la ingeniería inversa no es ilegal por sí misma. Puede llegar a ser una actividad ilegal por poder, es decir, a través de violación de derechos de autor etc

0

Reflection es un término general que la informática que estaba en uso décadas antes de la introducción del marco de Microsoft .Net (que sol JVM). La idea era no destinada a la aplicación de ingeniería inversa. Que en contextos específicos se puede usar para este propósito es simplemente accidental. Como otros han escrito, la reflexión es una "herramienta".

Cuestiones relacionadas