Ingeniería inversa: ¿para qué es realmente bueno? [cerrado]

15

Tengo algunas preguntas inocentes / principiantes:

  • ¿Para qué sirve la ingeniería inversa?
  • Como programador, ¿debo aprender el arte de la ingeniería inversa?
  • ¿Cuáles son los beneficios para un programador con experiencia?
calcetín
fuente
55
¿Es esta pregunta únicamente sobre el tipo de desmontaje de ingeniería inversa, o los otros también? (ya que "ensamblaje" y "bajo nivel" están en las etiquetas ..)
Izkata

Respuestas:

14

¿Para qué sirve la ingeniería inversa?

La ingeniería inversa es principalmente buena para descifrar y piratear (eliminar la protección del número de serie o las solicitudes de contraseña), pero también para comprender los virus o milagros que otros softwares pueden realizar. A veces es una habilidad útil tener para encontrar errores en programas para los que no tiene la fuente y parchearlos.

Como programador, ¿debo aprender el arte de la ingeniería inversa?

Sí, intente aprender ensamblador y usar un depurador decente. Te convertirá en un mejor desarrollador al comprender cosas en niveles inferiores, que están más cerca del metal.

¿Cuáles serán los beneficios de un programador con experiencia en ingeniería inversa?

Serás un buen hacker / cracker. Podrías trabajar para otros productores de antivirus. Como ejemplo personal: una vez realicé una ingeniería inversa de un software para rastrear un error que ocurrió mientras establecía una conexión Oracle. Nadie más pudo resolver el problema, así que obtuve algo de fama.

Además, también me gustaría citar el comentario de @ johannes , ya que tiene toda la razón:

No lo limitaré a grietas "malas". Desmontar puede ser útil para determinar si el compilador se volvió loco (aunque generalmente es su código), desde un punto de vista más sysadmin puede ser interesante ver dónde falla una aplicación

Halcón
fuente
8
No lo limitaré a grietas "malas". Desmontaje puede ser útil para averiguar si el compilador se volvió loco (por lo general es su código, sin embargo), desde un punto de vista más administrador de sistemas puede ser interesante para ver donde falla una aplicación, ...
Johannes
@johannes: Sí, tienes razón. ¿Puedo escribir eso en mi respuesta?
Halcón
claro, haz lo que quieras, no reclamo derechos de autor sobre eso ;-)
johannes
77
Lo siento, pero esta es una respuesta absolutamente terrible. La ingeniería inversa no es "principalmente para ... descifrar y piratear" como se define, y cualquier persona que no se ocupe de la programación de sistemas está siendo perjudicada al ser presentada desde esa perspectiva ideológica.
Chuu
1
No creo que se haya mencionado todavía, pero tenga cuidado si hace esto en un software que no es suyo (o no se lo diga a nadie). Casi todos los EULA comerciales prohíben la ingeniería inversa. No desea obtener una carta de cese y desistimiento con copias a un abogado de propiedad intelectual.
Bratch
25

Me gusta la respuesta de Falcon , pero me gustaría agregar que en algunas aplicaciones de negocios aburridas, la ingeniería inversa puede sacarlo de algunos problemas desagradables.

En el trabajo, lo hacemos mucho cuando hacemos integración de datos con un sistema de terceros que no tiene ningún mantenimiento nuevo, por lo que podemos saber dónde debería o no romperse.

También utilizamos ingeniería inversa para verificar la calidad del código (con ciertas restricciones, por supuesto) en los componentes de terceros que compramos, si el código fuente no está incluido.

Mi punto real es: la ingeniería inversa no está vinculada a una sola tecnología o lenguaje, sino que es un proceso en el que se aprende lo interno de una "caja negra" . Si tiene un código del que depende, pero no confía o no puede confiar, definitivamente debería echar un vistazo debajo del capó y ver qué está haciendo ese código.

Machado
fuente
Diablos, incluso analizamos los procedimientos almacenados SQL de los sistemas de terceros que alquilamos solo para verificar si a veces cumplen nuestros requisitos correctamente.
Machado
3
+1. Incluso un producto de software de gran venta de una gran empresa puede ser un poco negro a veces, con documentación en línea inadecuada, desactualizada, simplemente errónea, a veces inexistente, etc.
RalphChapin
13

También está el lado aburrido de la ingeniería inversa. Esto es cuando la compañía en la que estás tiene un código o programa que todavía se está utilizando, pero nadie dice saber nada al respecto. Así que lo revisa, lo documenta, escribe pruebas y todas esas cosas de ingeniería que deben hacerse antes de comenzar un proyecto. Lo hace para un software que ya está escrito, por lo tanto, "ingeniería inversa".

Es mucho más fácil cuando tienes el código, pero aún es técnicamente ingeniería inversa. Es uno de esos términos que aparece mucho en las reuniones de negocios cuando se habla de proyectos heredados.

Philip
fuente
+1, particularmente cierto para mí. He trabajado en algunos bancos donde los sistemas heredados no tenían un solo documento técnico.
Machado
7

Solo para expandir el valor comercial de la ingeniería inversa: más de la mitad de los nuevos clientes con los que nos encontramos tienen un sistema / aplicación existente (no siempre en producción, eso sí), pero donde la relación con un proveedor de desarrollo de software anterior llegó al límite.

En aproximadamente el 30% de los casos, el cliente no tiene la fuente de su sistema, y ​​en muchos casos, gran parte del proceso comercial real, las reglas y el conocimiento están encerrados en el código.

Y en un par de casos en que los vendedores anteriores se volvieron completamente maliciosos, ofuscaron los archivos binarios, bloquearon el código, etc., para atrapar al cliente indefinidamente.

Entonces, para responder a su pregunta, la ingeniería inversa es a menudo un punto de partida para nuevos compromisos con clientes bastante desesperados (y quemados), y puede ser un factor de éxito 'crítico para el negocio' extraer el conocimiento olvidado del código existente.

StuartLC
fuente
2

Yo diría que el conjunto de habilidades para la ingeniería inversa y el conjunto de habilidades para la depuración son exactamente los mismos: si usted es un depurador fantástico, también es un ingeniero inverso fantástico, y viceversa.

BlueRaja - Danny Pflughoeft
fuente
1

A veces se usa para que algunas partes / software interactúen, por lo que yo entiendo. Algunas interfaces extrañas, errores en la implementación, etc.

Pero por lo que entiendo, es un tema muy resbaladizo, por lo que las leyes ya complejas del desarrollo de software se llevan al extremo con la ingeniería inversa.

Descifrador
fuente
1

Bueno, con la ingeniería inversa puedes reutilizar el código minimizando tu trabajo. Por ejemplo, en Symfony2, puedes convertir una base de datos hecha de MySQL normal y convertirla al formato de doctrina y este es un proceso de ingeniería inversa hecho posible en Symfony .... y con ingeniería inversa, puede ver el código, digamos 'en 2D'

wanjiku
fuente
0

Solo estoy dando un ejemplo del mundo real desde mi experiencia.

Una vez que nuestra empresa se hizo cargo de un proyecto de otra empresa. Aproximadamente medio año después del proyecto, nos dimos cuenta de que un subproyecto no tenía código. Cuando le pedimos a la empresa anterior que entregara el código, cortésmente respondieron que no podían encontrar el código para el subproyecto. Necesitábamos el código porque queríamos cambiar algo en ese subproyecto.

Tuve que aplicar ingeniería inversa al subproyecto.

Primero descompilé el ensamblado (sí, es un proyecto .NET). El resultado del ensamblaje descompilado es un código suave y confuso sin nombres de variables locales y una estructura de control complicada. Esto se debe a que la compilación descarta información importante que no se puede descompilar.

Luego traté de averiguar dónde cambiar ese código. Para hacer esto, simplifiqué el código para que se comportara igual pero de una manera más concisa. También adiviné los nombres de las variables a partir de su comportamiento. Solo revisé el código muchas veces hasta que descubrí lo que está haciendo.

No hice ingeniería inversa de todo, solo la parte que teníamos que cambiar. No estuvo tan mal, unas 200 líneas de código VB. Tomó alrededor de cinco días de tiempo de trabajo.

finalmente
fuente