Cómo aprender ingeniería inversa

1. Lea este libro electrónico:

https://vxheaven.org/lib/pdf/Ide…

Ingeniería inversa: el enfoque viral

2. Juega con IDA Pro , u objdump para desensamblar el binario.

3. Juegue con el emulador QEMU , y configure un entorno virtual para que pueda pasar por el programa o simplemente ejecute el programa. O VMWare, o VirtualBox. La clave para RE es que cualquier cosa desconocida debe ser tratada como maliciosa . Y si el binario quiere conectarse de nuevo a algún servidor, tal vez debería interceptar el tráfico para capturar el contenido, o emular el servidor si es posible.

4. Depurador: punto de interrupción por dirección, datos: estos son algunos de los conocimientos más importantes que hay que dominar cuando se invierte.

5. Master debugger comercial como Immunity Debugger (muchas características que facilitan RE) :

Depurador de inmunidad

6. En general, no puede RE todo, solo identifique un objetivo para usted, por ejemplo, encontrar la clave en la memoria, ir directamente al objetivo.

Actualización Sep2016:

aprender gdb 7.0: depuración reversible: GDB y depuración inversa

¿Cómo funciona la depuración inversa?

Hable y aprenda de otro inversor: Bienvenido a la página web de Crackmes más larga y completa de Internet.

Flujo de actividad – Reagrupamiento de RCE Messageboard

¡Bienvenido a VX Heaven! (este sitio tiene muchas cosas anti-RE)

En el pasado está Wotsit: donde puede encontrar todos los detalles internos de diferentes archivos como pdf, ppt, xls, etc. Ahora ha muerto: ¿Dónde encontrar información sobre un formato de archivo?

Echa un vistazo a todas las preguntas RE sin responder: Preguntas sin respuesta muy votadas

Todo lo relacionado con RE en el sitio web de reddit: Ingeniería inversa • / r / ReverseEngineering

Y buscando en Google para los libros:

http://www.foo.be/cours/dess-201…

http://www.radintech.com/attachm…

La ingeniería inversa se utiliza en una variedad de campos como el diseño de software, pruebas de software, programación, etc.

En el diseño de software, la ingeniería inversa permite al desarrollador o programador agregar nuevas funciones al software existente con o sin conocer el código fuente. Se utilizan diferentes técnicas para incorporar nuevas características al software existente.
La ingeniería inversa también es muy beneficiosa en las pruebas de software, ya que la mayoría de los programadores de virus no dejan instrucciones sobre cómo escribieron el código, qué se han propuesto para lograr, etc. La ingeniería inversa ayuda a los evaluadores a estudiar el virus y otros programas maliciosos. código. El campo de las pruebas de software, aunque es muy extenso, también es interesante y requiere una vasta experiencia para estudiar y analizar el código de virus.

Creo que deberías visitar algunos cursos, por ejemplo: https://blog.udemy.com/reverse-e

También deberías conocer diferentes herramientas de ingeniería inversa.

1. Desensambladores: se usa un desensamblador para convertir código binario en código de ensamblaje y también para extraer cadenas, funciones importadas y exportadas, bibliotecas, etc. Los desensambladores convierten el lenguaje de máquina en un formato fácil de usar. Hay diferentes diseminadores que se especializan en ciertas cosas.

2. Depuradores: esta herramienta expande la funcionalidad de un desensamblador al admitir los registros de la CPU, la duplicación hexadecimal del programa, la vista de la pila, etc. Usando los depuradores, los programadores pueden establecer puntos de interrupción y editar el código de ensamblaje en tiempo de ejecución. Los depuradores analizan el binario de manera similar a los desensambladores y permiten que el inversor recorra el código ejecutando una línea a la vez para investigar los resultados.

3. Editores Hex: Estos editores permiten ver el binario en el editor y cambiarlo según los requisitos del software. Hay diferentes tipos de editores hexadecimales disponibles que se usan para diferentes funciones.

4. PE y visor de recursos: el código binario está diseñado para ejecutarse en una máquina basada en Windows y tiene datos muy específicos que indican cómo configurar e inicializar un programa. Todos los programas que se ejecutan en Windows deben tener un ejecutable portátil que admita las DLL que el programa necesita para tomar prestado.

Más información: https://www.apriorit.com/dev-blo

Hay varios recursos, los problemas son el nivel de conocimiento de requisitos previos.

Ya que no mencionaste lo que quieres hacer en ingeniería inversa y no tengo idea de tu perfil, déjame darte un ejemplo de ingeniería inversa que personalmente hice.

Así que en 2013 traté de aplicar ingeniería inversa a la aplicación para Android WhatsApp para entender cómo funcionaba, sabía que la programación estaba en Java pero era nueva en la programación de bajo nivel (SMALLI / ASSEMBLY).
Utilicé diferentes herramientas para el proceso como apktool , dex2jar , JD GUI, que es una utilidad que muestra los códigos fuente de Java de los archivos “.class”.

Al igual que para Android (que por cierto no es posible para las aplicaciones más recientes), podría hacer ingeniería inversa para la mayoría de las plataformas.

La ingeniería inversa no se limita solo al software, sino también al hardware.

Hay varias listas de reproducción de youtube para ayudarlo a comenzar en ingeniería inversa de hardware y software. Antes de eso, echa un vistazo a la serie de OpenSecurityTraining , que se dividen en 3 categorías y presenta las siguientes

Principiante:

  • Introducción a Intel x86: arquitectura, ensamblaje, aplicaciones y aliteración
  • Introducción a ARM
  • La vida de los binarios
  • Análisis dinámico de malware
  • Introducción a la informática de confianza

Intermedio:

  • Intel Intermedio x86: Arquitectura, Ensamblaje, Aplicaciones y Aliteración
  • Introducción a las vulnerabilidades de software
  • Exploits 2: Explotación en el entorno de Windows

Avanzado:

  • Rootkits: Qué son y cómo encontrarlos.
  • Introducción al software de ingeniería inversa
  • Ingeniería inversa Malware
  • Avanzado x86: Virtualización con Intel VT-x

¿Cómo puedo aprender ingeniería inversa?

La mayoría de las respuestas aquí se refieren a la ingeniería inversa del código de computadora, pero la pregunta es demasiado vaga para saber que esto es lo que significa el interrogador.

La ingeniería inversa puede significar la reproducción de una pieza mecánica o ensamblaje donde se ha quedado obsoleta y no existen dibujos. Las piezas se pueden realizar ingeniería inversa midiendo una muestra utilizando instrumentos simples como calibradores digitales y micrómetros o mediante escaneo láser. En el escaneo láser, se necesita un software que pueda convertir una nube de puntos en una malla y luego un diseñador de CAD puede usar la malla para reconstruir un modelo de CAD para su fabricación. El software como Geomagic Design X es específicamente para este propósito y se puede utilizar para producir archivos nativos en SolidWorks u otros modeladores CAD. Sistemas 3D Geomagic Design X

Aquí hay una parte que invierto por ingeniería láser.

He escrito varios artículos para la prensa informática sobre ingeniería inversa y análisis de malware. Se ha publicado en mi sitio web de forma gratuita.

  • Cómo escribir un CrackMe para una competición CTF
  • Revisión de herramientas de ingeniería inversa
  • Algoritmos de encriptación polimórficos
  • Software Malware vs Antivirus
  • Interceptar las llamadas de las bibliotecas DLL
  • Cuándo y cómo usar un ensamblador. Conceptos básicos de programación de montaje
  • Cómo hacer más difícil la vida del cracker. Protecciones anti piratería para programadores.
  • Código de Destrucción – Análisis de Malware

Divertirse 🙂

Creo que lo más importante es que debes aprender haciéndolo.
Le recomiendo comenzar con la ingeniería inversa de Android. Aquí hay tres razones. Primero, Android es cada vez más popular. Muchas compañías necesitan personas que puedan hacer ingeniería inversa en Android. En segundo lugar, la ingeniería inversa en Android es más fácil que Windows.
En tercer lugar, aquí hay muchos virus en Android, la seguridad de Android es muy importante.
Debe aprender Java y saber cómo codificar. Luego, debe aprender Smali, lenguaje ARM Assembly. Después de eso, puede intentar descifrar muchas aplicaciones. Como el anuncio de eliminación. El manual del pirata informático de Android es un gran libro. Se trata de la seguridad del sistema Android. Puede ayudarlo a comprender mejor Android.
Aprender ingeniería inversa en Windows es lo mismo. Tuts4you es un gran foro sobre ingeniería inversa. También puedes encontrar algunos crackme en crackme.de.

Respuesta corta: con mucha paciencia y habilidad, lea y entienda el código.

Respuesta larga: esto realmente depende de lo que querrías invertir en ingeniería? Para responder a su pregunta tan bien como sé, voy a describir varios escenarios. Lo común en ellos será la paciencia como ya mencioné.

Digamos que quieres aplicar ingeniería inversa a una aplicación de Android. Suponga que ya tiene el archivo apk y no tiene que jugar con su teléfono para eso. Tienes que aprender la estructura de este archivo para obtener el código compilado. También tendrá varios recursos, pero supongamos que solo le interesa el código. La mayoría de las aplicaciones de Android están escritas en java, por lo que tendrá que saber cómo aplicar ingeniería inversa a un código java.

Para aplicar ingeniería inversa a un código java compilado, debe saber qué hace java durante la compilación. No soy un experto en Java, pero si puedo recordarlo correctamente, genera un código de byte (correcto ne si estoy equivocado). O puedes leer eso y descubrir lo que hace (no es probable) o con alguna herramienta, generas un código Java que se compilará en el código de bytes. Esto es más legible, pero lo más probable es que no tenga la función / variable / nombres de clase adecuada, etc. Es como leer un archivo de javascript minificado prectificado. Estoy seguro de que lo has visto.

En el caso de c o c ++, el código se compila al ensamblaje si es correcto. Ahora puede ensamblar muy bien, pero también buena suerte al descubrir lo que probablemente hacen miles de millones de líneas de código. Esto se puede realizar mediante ingeniería inversa si sabe en qué idioma estaba escrito. En este caso, también obtendrá un código similar.

En el caso de csharp, es un poco más fácil ya que el código está en CRL, que se traduce a otra cosa por el JIT en la máquina cliente. Es un poco más fácil hacer ingeniería inversa. Sin embargo, obtendrás un código similar a Minified si los desarrolladores fueron lo suficientemente cautelosos.

En el caso de python … bueno, solo tienes que entender el código

Esto es solo mi experiencia y conocimiento teórico. No sé mucho sobre otros idiomas.

Me gustaría añadir que en casos difíciles puede ser ilegal hacerlo.

Los requisitos básicos serían el conocimiento de

1. Registros y banderas

2. lenguaje ensamblador

3.Un depurador como OllyDBG

Lo que debe hacer, enfóquese en las cosas básicas como los registros y sus roles en la ejecución del código. Entonces tienes que aprender un poco de lenguaje ensamblador. Y finalmente empezar a practicar. Obviamente puedes comenzar con OllyDBG.

Hay grandes blogs y conferencias disponibles en línea, algunos de ellos serían

Tuts 4 you

Ingeniería inversa de intercambio de pila

También para un principiante esta sería una buena fuente también.

Sagar Jangam | Sagar Jangam

La ingeniería inversa se aprende de alguien que es un experto en el campo y puede brindar una gran cantidad de conocimiento práctico junto con los aspectos teóricos que se necesitan.

Aquí hay una serie de tutoriales en video por parte de un grupo de ingeniería inversa, y probablemente sean la mejor fuente en Internet para comenzar con la ingeniería inversa básica.
Revestimiento de Lenas para principiantes / Descargas

He tomado todo el tutorial y lo he tomado en serio. Quiero decir que he hecho notas y cosas escritas en papel, que pueden ser necesarias al principio. Pude encontrar muchos programas populares por mi cuenta después de pasar por estos videos [Por ejemplo, WinRAR, IDM, MagicISO, PowerISO, HD Tune Pro, HD Sentinel, etc.]. La práctica es muy importante aquí si de verdad quieres hacer esto por algún tiempo. Puede llevar fácilmente horas y horas cuando practica incluso para comenzar.

Puede aprender lo básico y algunas cosas intermedias sobre ingeniería inversa como empacadores, protectores, WinAPI, parches en línea, cargadores, algoritmos criptográficos inversos, formato de archivo PE y mucho más de este tutorial si trabaja correctamente.

¡Buena suerte!

Puede aprender ingeniería de código inverso realizando las siguientes tareas: codificar en los idiomas y plataformas que pretende realizar tareas de ingeniería inversa, realizar ingeniería inversa de sus propias aplicaciones con diferentes enfoques y técnicas (desmontaje estático, depuración, instrumentación binaria, …), lectura inversa ingrese libros de ingeniería / análisis de malware, y practique con crackmes, keygenmes, descomprime, avance sus habilidades con tareas de análisis de malware, escriba herramientas de desempaquetado / desobufado / análisis de código y scripts, escriba sus propios protectores / empacadores / ofuscadores.

Como muchas habilidades técnicas, puedes aprender esto mejor haciendo. Compile un pequeño fragmento de código que hace X, y luego observe el código compilado en un depurador. (ASM será necesario pero es mucho más fácil de lo que un principiante podría imaginar).
También hay varios tutoriales en línea y libros dedicados al tema.

OpenRCE.org tiene una gran cantidad de información y muchos reversores una vez le cortaron los dientes aprendiendo del sitio de Fravia. Buena suerte

Suponiendo que te refieres a la ingeniería inversa de software, recomendaría Reversing by Eldad Eilam.

Es, con mucho, la mejor guía escrita que he visto para la ingeniería inversa. Bien escrito y relativamente fácil de seguir.

Recomiendo obtener algunos libros: Reversing by Eldad Eilam, IDA pro book 2nd Edition de Chris Eagle. Tener un libro como referencia para el lenguaje ensamblador es opcional porque esa información está disponible en la web con bastante facilidad.

Tendrás que hacer la pregunta más específica. La ingeniería inversa puede ser un concepto aplicado a muchas disciplinas. Puede aplicar ingeniería inversa a un nuevo algoritmo de seguridad o a un nuevo sistema instalado en un automóvil. En primer lugar, debe tener un conocimiento adecuado del sistema que desea realizar ingeniería inversa. De hecho, su comprensión debe ser lo suficientemente amplia como para adivinar cómo se construyó el sistema en primer lugar.

Trate de buscar en Google para “tutoriales de craqueo”. Junto con el software IDA Pro / Advanced + Ollydbg, este debería ser un buen comienzo.