Ingeniería inversa para todos
(0xinfection.github.io)- Reverse Engineering For Everyone es una colección de tutoriales creada para que quienes empiezan a aprender ingeniería inversa puedan seguir los conceptos y el flujo práctico
- La ingeniería inversa es el proceso de descomponer un artefacto para revelar su diseño, arquitectura, código o conocimiento
- El currículo cubre x86, x64, ARM-32, ARM-64, y está dirigido tanto a principiantes como a lectores que quieren repasar conceptos
- Está estructurado para que se pueda empezar sin saber nada y aprender de forma gradual hasta las bases intermedias de la ingeniería inversa
- Todos los tutoriales están disponibles en PDF y MOBI, y cuando se agregan nuevos tutoriales, las versiones de e-book también se actualizan automáticamente
Objetivo de la ingeniería inversa
- La ingeniería inversa también se conoce como backwards engineering o back engineering
- Es el proceso de descomponer el artefacto objetivo para revelar su diseño, arquitectura, código o extraer conocimiento
- Es similar a la investigación científica, pero se diferencia en que la investigación científica estudia fenómenos naturales
- Esta colección de tutoriales se enfoca en hacer que aprender ingeniería inversa sea lo más simple posible
Currículo y público objetivo
- Los cursos principales que cubre son los siguientes
- Está dirigido tanto a principiantes que quieren aprender reversing como a lectores que quieren repasar conceptos que ya aprendieron
- Los principiantes pueden aprender desde cero hasta las bases intermedias de la ingeniería inversa
- A través de la barra lateral, pueden revisar las secciones cubiertas hasta ahora y repasar los conceptos que necesiten
1 comentarios
Opiniones de Hacker News
La ingeniería inversa puede hacerse sin mirar necesariamente el objetivo en sí.
Un texto donde Andrew Tridgell explica cómo hizo ingeniería inversa del protocolo SMB de Microsoft con la “French cafe technique”: https://www.samba.org/ftp/tridge/misc/french_cafe.txt
Tridge también hizo ingeniería inversa de BitKeeper, el software propietario que Linus usó durante un tiempo para alojar el desarrollo del kernel de Linux. Descubrió que, si en lugar de usar el cliente dedicado te conectabas por telnet a la dirección:puerto de BitKeeper, podías escribir
help, y eso mostraba una lista de comandos que se podían probar.Al consultar el repositorio con esos comandos, pudo entender todas las estructuras de datos internas sin usar ni desensamblar software propietario. Cuando esa ingeniería inversa llevó al dueño de BitKeeper, Larry McVoy, a retirar el permiso de uso a la comunidad Linux, Linus terminó creando git.
Que
helpimprimiera la lista de comandos fue una buena decisión de ingeniería/UI por parte de los desarrolladores de BitKeeper, pero me preocupa que la lección que se saque de esto termine siendo “no hagas que tu software sea demasiado amable”.Además, me parece que hablar con un software por la red claramente también es “usar” ese software.
Nunca pensé que la ingeniería inversa fuera un campo que se aprende con libros. Desde chico aprendí todo haciéndolo directamente.
Aprendí a escanear y modificar la memoria de procesos de videojuegos con Cheat Engine, a leer y reenviar paquetes de MMO para intentar hacer trampas, a crear DLLs y hooks e inyectarlos en procesos, y a hacer parches de ejecutables para resolver desafíos crackme.
Toqué software real que requería claves de licencia para hacer que ya no las necesitara o aceptara cualquier clave, analicé formatos binarios como archivos de guardado de juegos para usarlos en cheats y, al final, con esas habilidades y conocimientos conseguí un trabajo real y empecé a ganar dinero.
En la práctica, es más bien el tipo de cosa en la que simplemente tienes que intentarlo y dedicarle tiempo. El tutorial del texto original se siente demasiado disperso, intenta abarcar demasiadas cosas y aun así no parece enseñar habilidades de ingeniería inversa más allá de lo que la mayoría podría adquirir tras unas horas de probar.
En cambio, beginners.re es enorme, pero mucho más profundo y progresivo; y para práctica, los crackmes quizá sean mejores.
En un proyecto en curso de ingeniería inversa de videojuegos me puse en contacto con un modder autodidacta que no sabía programar. Después de unas cuantas llamadas por Discord revisando juntos un proyecto en Ghidra y explicándole los fundamentos de la ingeniería de programas de computadora, aprendió muchísimo más que cuando solo invertía bits con Cheat Engine.
Después de eso recreó un mod bastante ambicioso que solo se había mostrado en un video de YouTube de hace 15 años y nunca se había distribuido. Yo le marqué la dirección, pero una vez que vio cómo encajaban las piezas, implementó por su cuenta el mismo mod en la secuela.
La experiencia en ingeniería te da perspectiva al hacer ingeniería inversa.
También es importante que, aunque hay muchos libros, los libros “buenos” se cuentan con los dedos de una mano.
Con solo leer 5 minutos ya se ven tantos errores, conceptos mal entendidos y explicaciones completamente equivocadas que cuesta recomendarlo. Claramente parece escrito por un amateur con poca experiencia en el área.
Como mejores recursos están Secrets of Reverse Engineering, de Eldad Eilam; para Windows, Practical Reverse Engineering; y para lo realmente básico, Computer Organization and Design, de Patterson.
Para alguien que recién se acerca al tema, parece una visión general de alto nivel aceptable.
También estaba este enlace como recurso más profundo: https://github.com/mytechnotalent/Reverse-Engineering
Edición: uy, parece que la mayoría vuelve a enlazar al texto original.
Me trae recuerdos de cuando leía tutoriales de reversing en searchlores.org y fravia.com.
Ahora están en Web Archive: https://web.archive.org/web/20191201105759/http://search.lor...
La ingeniería inversa en Java también es divertida. Sobre todo con apps sospechosas de Android que controlan electrodomésticos mediante protocolos Bluetooth raros.
Conozco a la persona que escribió esta guía. Me alegra verla en HN, y si hay comentarios concretos puedo hacérselos llegar.
Le faltan demasiados elementos que inviten a participar y recursos visuales. Hay demasiada explicación y demasiados muros de texto; solo por eso, no es un material “para todos”.
Por ejemplo, la explicación de análisis estático/dinámico de la parte 2, la introducción a IDA y los desensambladores, y la explicación del escenario de ABC Biochemicals podrían escribirse de forma mucho más concisa.
“En el análisis de malware hay dos técnicas básicas: análisis estático y análisis dinámico. El análisis estático examina un ejecutable sin ejecutarlo; no lo trataremos aquí, sino más adelante en el curso. El análisis dinámico analiza un binario de malware en ejecución con un desensamblador y un depurador. Un desensamblador convierte un binario ejecutable en instrucciones de lenguaje ensamblador que se pueden depurar y manipular. Hay herramientas como Hopper, OllyDbg e IDA, e IDA es un desensamblador y depurador popular que soporta varias plataformas y procesadores. La ingeniería inversa es un campo mucho más amplio que el análisis de malware. Al final usaremos IDA en un escenario donde se hackea éticamente el sistema de control de puertas blindadas de un laboratorio bioquímico sensible ficticio llamado ABC Biochemicals. Es un proyecto básico, pero muestra el proceso de hacer ingeniería inversa de un binario de caja negra y encontrar soluciones de diseño de código más seguras. En la próxima clase veremos varios tipos de malware” podría reducirse a algo así.
El enlace al libro no me abre; ¿le habrá caído una bomba de tráfico de HN?