6 puntos por GN⁺ 2024-07-26 | 1 comentarios | Compartir por WhatsApp
  • 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

Formatos disponibles

  • El conjunto completo de tutoriales está disponible como e-book
  • Cuando se agregan nuevos tutoriales, las versiones de e-book también se actualizan automáticamente

1 comentarios

 
GN⁺ 2024-07-26
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.

    • No necesariamente diría que fue “tonto” que Linus usara BitKeeper. En ese momento eligió la mejor herramienta disponible, y aunque no sé si era la mejor en términos absolutos, Linus sí revisó y evaluó varias herramientas.
      Que help imprimiera 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.
    • Andrew nos salvó no una, sino dos veces. Demuestra que se necesita gente que anote, pero también gente que meta el pase decisivo.
    • Recuerdo que, cuando era estudiante de licenciatura, por casualidad escuché de primera mano la historia de BitKeeper/git de Tridge en la cafetería del departamento.
  • 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.

    • Yo también aprendí ingeniería inversa de chico mirando CE/IDA durante demasiado tiempo, así que cuando alguien me pregunta cómo conviene aprender, no tengo una respuesta muy buena.
      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.
    • También es posible entrar directo a la ingeniería inversa, pero sin una base de ingeniería, ya sea por educación formal o autodidacta, se vuelve mucho más difícil.
      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.
    • Están subestimando demasiado el poder del aprendizaje estructurado y los ejercicios repetidos. El pensamiento crítico, la curiosidad y la pasión quizá sean difíciles de transmitir, pero un libro bien escrito puede reducir de forma importante y razonable el tiempo que se iría en prueba y error.
      También es importante que, aunque hay muchos libros, los libros “buenos” se cuentan con los dedos de una mano.
    • Tampoco he pensado nunca que la cocina sea algo que se aprende con libros.
  • 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.

    • Secrets of Reverse Engineering es un libro de 2005; ¿hay alguno más reciente que valga la pena recomendar?
  • 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.

    • Me gustaría que existiera para Java una herramienta equivalente a DnSpyEx. Estoy esperando a que Recaf4 esté listo.
  • 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”.

    • Es admirable que lo haya escrito, pero a mí también me dio una impresión parecida. Las frases son demasiado largas y ampulosas, lo que dificulta la lectura.
      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?