Pregunta

Puede averiguar mucho sobre los aspectos internos de una aplicación a través de la reflexión, está expuesta por .NET BCL (biblioteca de clase base) y hace que sea trivial recuperar IL real para cualquier método .NET.

Ingeniería inversa en Wikipedia :

  

La ingeniería inversa es la   proceso de descubrir el   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 como análisis de la estructura. Pero, ¿dónde trazas la línea entre la introspección y la ingeniería inversa real? Y desde un punto de vista legal, ¿es la reflexión ingeniería inversa?

¿Fue útil?

Solución

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

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

Por ejemplo, recientemente estaba escribiendo una clase base genérica para las capas de datos Linq2SQL. La clase base utiliza 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 comprender el funcionamiento interno del software de un competidor utilizando la reflexión, está realizando ingeniería inversa.

Otros consejos

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

Con una herramienta como .NET Reflector siento que las líneas realmente comienzan a desenfoque!

Utilizando un ejemplo del SO mismo, recientemente des-ofuscaron el código fuente para su Editor de ADM. Yo diría que esto define la ingeniería inversa más que Reflection.

Reflection es solo una herramienta para leer información de un ensamblado, de modo que por sí solo no es ingeniería inversa.

Si luego usa esta información para descubrir cómo se creó el ensamblaje, por ejemplo, usando el reflector .NET para producir un código fuente legible que podría generar el mismo código IL, eso es ingeniería inversa.

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

Por ejemplo, si usa la reflexión para descubrir las firmas de todos los métodos públicos y protegidos en un ensamblaje que no significaría ingeniería inversa.

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

Reflection es una herramienta que puede usarse para muchas cosas, incluida la ingeniería inversa de código. La reflexión también se puede utilizar para muchos otros propósitos, la implementación de 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. Herramientas como el reflector agregan esta funcionalidad.

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

Correctamente, "ingeniería inversa" es mirar 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 aterradoras amenazas de los titulares de derechos de autor, es perfectamente legal.

" Desmontaje " (también conocido como "Reflexión") es solo 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 aterradoras amenazas de los titulares de derechos de autor, es perfectamente legal.

Vender el código de otra persona (o usarlo usted mismo) de una manera que evite que el titular de los derechos de autor se beneficie de su trabajo, es ilegal, pero no estamos hablando de eso aquí.

Creo que estás hablando de dos cosas diferentes aquí:

  • Reflection es una técnica que se puede utilizar para la ingeniería inversa (entre otras cosas).
  • 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 el propósito de realizar ingeniería inversa.

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

No. Con la reflexión, normalmente solo estás hablando de una forma diferente de invocar métodos, o posiblemente viendo los atributos del método.

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

Se deben hacer preguntas legales 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.

Mejor apuesta: no es necesario preguntar. Microsoft ya ha lanzado la fuente para una gran cantidad de .NET. Consulte http://www.microsoft.com/resources/sharedsource/default.mspx.

Todo depende del grado de reflexión. Si utiliza una herramienta como Reflector , o codifique algo así, entonces eso sería ingeniería inversa, ya que realmente está llegando al código fuente.

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

Reflection es un término informático general que estuvo en uso décadas antes la introducción de Microsoft .Net framework (que SUN JVM). La idea era no apuntar a la aplicación de ingeniería inversa. Que en contextos específicos se pueda usar para este propósito es accidental. Como otros han escrito, la reflexión es una "herramienta".

La reflexión en muchos lenguajes como .NET y Java son parches para sintaxis deficientes que no te 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 por mucho más potente 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 los nombres de módulos a 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 útil, pero creo en los lenguajes reales de OO que se pueden evitar subclasificando una clase abstracta que puede responder a cualquier mensaje y las subclases podrían anular eso.

Reflection no debe usarse excepto en circunstancias extremas, que es donde puede ver fallas en los lenguajes de programación.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top