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?
c
assembly
low-level
reverse-engineering
calcetín
fuente
fuente
Respuestas:
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.
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.
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:
fuente
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.
fuente
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.
fuente
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.
fuente
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.
fuente
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.
fuente
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'
fuente
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.
fuente