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 desmontar el binario.

3. Juega con el emulador QEMU y configura un entorno virtual para que puedas recorrer el programa o simplemente ejecutarlo. 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 para dominar al revertir.

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

Depurador de inmunidad

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

Actualización de septiembre de 2016:

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 en Internet.

Flujo de actividad: reagrupamiento del tablero de mensajes de RCE

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

En el pasado es 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 respuesta: Preguntas sin respuesta altamente votadas

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

Y buscando en Google 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, tales como 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 funciones en el 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 lograr, etc. La ingeniería inversa ayuda a los evaluadores a estudiar el virus y otro malware 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ía visitar algunos cursos, por ejemplo: https://blog.udemy.com/reverse-e

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

1. Desensambladores: un desensamblador se usa 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 la máquina en un formato fácil de usar. Hay diferentes diseminadores que se especializan en ciertas cosas.

2. Depuradores: esta herramienta amplía la funcionalidad de un desensamblador al admitir los registros de la CPU, la duplicación hexadecimal del programa, la vista de la pila, etc. Al usar 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 hexadecimales: 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 utilizan 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 los archivos DLL de los que el programa debe tomar prestado.

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

Hay varios recursos, los problemas son conocimientos de prerrequisito de nivel.

Como no mencionaste lo que quieres hacer ingeniería inversa y como no tengo idea de tu perfil, permíteme darte un ejemplo de ingeniería inversa que hice personalmente.

Así que en 2013 traté de aplicar ingeniería inversa a la aplicación de Android WhatsApp para comprender cómo funcionaba, conocía la programación en Java pero era nuevo 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 códigos fuente Java de archivos “.class”.

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

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

Hay varias listas de reproducción de YouTube para ayudarlo a comenzar con la ingeniería inversa de hardware y software. Antes de eso, echa un vistazo a la serie de OpenSecurityTraining , que se clasifican en 3 categorías y presenta lo siguiente

Principiante:

  • Intel x86 introductorio: 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 confiable

Intermedio:

  • Intel x86 intermedio: 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
  • Advanced x86: virtualización con Intel VT-x

¿Cómo puedo aprender ingeniería inversa?

La mayoría de las respuestas aquí están hablando de la ingeniería inversa del código de computadora, pero la pregunta es demasiado vaga para saber que esto es lo que quiere decir el interrogador.

La ingeniería inversa puede significar la reproducción de una pieza o conjunto mecánico donde se ha vuelto obsoleto y no existen dibujos. Las piezas se pueden realizar mediante 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 CAD puede usar la malla para reconstruir un modelo CAD para su fabricación. Software como Geomagic Design X es específicamente para este propósito y puede usarse para producir archivos nativos en SolidWorks u otros modeladores CAD. Diseño Geomagic de Sistemas 3D X

Aquí hay una parte que hice ingeniería inversa mediante escaneo láser.

Creo que lo más importante es que debes aprender haciéndolo.
Le recomiendo que comience 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 codificar. Luego, debe aprender Smali, lenguaje ensamblador ARM. Después de eso, puede intentar descifrar muchas APLICACIONES, como eliminar publicidad. El manual del hacker de Android es un gran libro. Se trata de la seguridad del sistema Android. Puede ayudarlo a comprender mejor a Android.
Aprender ingeniería inversa en Windows es lo mismo. Tuts4you es un gran foro sobre ingeniería inversa. También puedes encontrar algo de crackme en crackme.de.

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

  • Cómo escribir un CrackMe para una competencia CTF
  • Revisión de herramientas de ingeniería inversa
  • Algoritmos de cifrado polimórfico
  • Malware vs software antivirus
  • Interceptar llamadas de bibliotecas DLL
  • Cuándo y cómo usar un ensamblador. Conceptos básicos de programación de ensamblajes
  • Cómo hacer la vida de cracker más difícil. Protecciones antipiratería para programadores
  • Código de Destrucción – Análisis de Malware

Diviértete 🙂

Respuesta corta: con mucha paciencia y habilidad para leer y comprender el código.

Respuesta larga: ¿Esto realmente depende de qué le gustaría hacer ingeniería inversa? 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 desea realizar ingeniería inversa en 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. Las aplicaciones de Android se escriben principalmente en Java, por lo que deberá saber cómo realizar ingeniería inversa en 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 bytes (correcto si estoy equivocado). Puede leer eso y descubrir lo que hace (no es probable with) o con alguna herramienta genera 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 adecuados, etc. Es como leer un archivo javascript minificado prettificado. Estoy seguro de que lo has visto.

En el caso de c o c ++, el código se compila para ensamblar si estoy correcto. Ahora es posible que ahora ensambles muy bien, pero también buena suerte para descubrir lo que probablemente hacen los miles de millones de líneas de código. Esto se puede realizar en ingeniería inversa si sabe en qué idioma se escribió. En este caso, también obtendrá un código similar minificado.

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

En 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 agregar que en la niebla de los casos esto puede ser ilegal

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 es centrarse 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 comienza a practicar. Obviamente puede comenzar con OllyDBG.

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

Tuts 4 You

Intercambio de pila de ingeniería inversa

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 de un miembro de un grupo de ingeniería inversa, y probablemente sean la mejor fuente en Internet para comenzar la ingeniería inversa básica.
Lenas marcha atrás para novatos / descargas

He tomado todo el tutorial y lo he tomado en serio. Quiero decir que he tomado notas y escrito cosas en papel, que pueden ser necesarias al comienzo. Pude descifrar muchos softwares populares por mi cuenta después de ver estos videos [Por ejemplo, WinRAR, IDM, MagicISO, PowerISO, HD Tune Pro, HD Sentinel, etc.]. La práctica es muy importante aquí si realmente quieres hacer esto por algún tiempo. Fácilmente puede tomar horas seguidas cuando practicas incluso para comenzar.

¡Puedes aprender conceptos básicos 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 trabajas bien!

¡Buena suerte!

Puede aprender ingeniería inversa de código realizando las siguientes tareas: codificar en los lenguajes y plataformas que desea realizar tareas de ingeniería inversa, aplicar ingeniería inversa a sus propias aplicaciones con diferentes enfoques y técnicas (desmontaje estático, depuración, instrumentación binaria, …), leer inversa libros de ingeniería / análisis de malware, y practicar con crackmes, keygenmes, unpackmes, avanzar sus habilidades con las tareas de análisis de malware, escribir herramientas y scripts de desempaquetado / desofuscación / análisis de código, escribir sus propios protectores / empacadores / ofuscadores.

Al igual que muchas habilidades técnicas, puedes aprender esto mejor haciendo. Compile un pequeño fragmento de código que haga 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 inversores una vez que se cortaron los dientes aprendieron del sitio de Fravia. Buena suerte

Suponiendo que se refiere a ingeniería inversa de software, recomendaría Reversing de 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 conseguir algunos libros: Reversing de 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á 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 un nuevo sistema instalado en un automóvil. Principalmente debe tener un conocimiento adecuado del sistema que desea realizar la 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.

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

More Interesting

¿Cuáles son las posibles opciones disponibles para un estudiante de ingeniería de comunicación y electrónica de último año para mejorar su conjunto de habilidades y conocimientos y también contribuir a su futura carrera?

¿Es difícil la ingeniería petrolera?

¿Qué aprendes en ECE y qué tan difícil es el material?

Soy estudiante de primer año de ingeniería, estamos estudiando muchas matemáticas, ¿será útil cuando haga mi trabajo?

¿Cómo es el Alliance College of Engineering and Design para B.Tech en el CSE?

En el campo de la ingeniería civil, ¿cómo es el campo del agrimensor?

Tengo ingeniería eléctrica en IIT. Estaba realmente interesado en las computadoras, pero no pude entender eso. ¿Todavía hay una opción para mí de estar rodeado de tecnología que disfrutan muchos estudiantes de CSE?

¿Cuáles son algunas declaraciones de problemas a nivel industrial que los ingenieros electrónicos podemos resolver?

¿Es la ingeniería de TI una buena rama?

Estoy en ECE de segundo año y soy un poco débil en electrónica. ¿Arduino me ayudará a aprender?

¿Cuáles son los mejores puestos / trabajos en ingeniería eléctrica para lograr el máximo crecimiento profesional y altos salarios, en general y en Dubai?

¿Por qué y cómo se crean las vacantes después de las rondas CAP 3 e ILS en KJSCE, Vidyavihar para admisiones?

Como graduado de ingeniería civil de NIT, ¿en qué sector o en qué compañía debería trabajar para tener una buena oportunidad de ser seleccionado en HBS o Stanford, teniendo en cuenta que mi puntaje GMAT es 768 y tengo un 8.2 CGPA en ingeniería?

¿Qué trabajos puedo obtener si completo un MTech en ingeniería mecánica?

Por favor, ¿alguien puede decirme sobre la colocación de ingeniería civil en la universidad de Thapar Patiala? ¿Su paquete más alto y promedio ofrecido a los ingenieros civiles?