Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

[UNDERTIP]Conocimientos necesarios para realizar ingeniería inversa

  • 1 Respuestas
  • 4826 Vistas

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado sadfud

  • *
  • Moderador
  • Mensajes: 182
  • Actividad:
    3.33%
  • Reputación 9
    • Ver Perfil
    • Blog
  • Skype: SadFud
« en: Junio 15, 2017, 08:38:40 pm »

Que es la ingeniería inversa?
Según Wikipedia: La ingeniería inversa es el proceso llevado a cabo con el objetivo de obtener información o un diseño a partir de un producto, con el fin de determinar cuáles son sus componentes y de qué manera interactúan entre sí y cuál fue el proceso de fabricación.
Para qué sirve la ingeniería inversa?
Según Wikipedia:
• Generar diferentes alternativas: del punto de partida del proceso, principalmente código fuente, se generan representaciones gráficas lo que facilita su comprensión.
• Recuperar y/o actualizar la información perdida (cambios que no se documentaron en su momento): en la evolución del sistema se realizan cambios que no se suele actualizar en las representaciones de nivel de abstracción más alto, para lo cual se utiliza la recuperación de diseño.
• Detectar efectos laterales: los cambios que se puedan realizar en un sistema puede conducirnos a que surjan efectos no deseados, esta serie de anomalías puede ser detectados por la ingeniería inversa.
• Facilitar la reutilización: por medio de la ingeniería inversa se pueden detectar componentes de posible reutilización de sistemas existentes, pudiendo aumentar la productividad, reducir los costes y los riesgos de mantenimiento.
En resumen: la ingeniería inversa nos permite entender como se comunica un binario con el PC, una vez entendemos que hace el programa y como lo hace, las posibilidades son infinitas.

Una vez entendido que es la ingeniería inversa… ¿Qué se necesita para realizar ingeniería inversa a un binario?
Lo principal es entender como funciona un ordenador a bajo nivel, como maneja los registros la arquitectura sobre la que corre nuestra aplicación, la pila, etc.. Por tanto, al trabajar a bajo nivel, es necesario saber programar a bajo nivel, o al menos tener la capacidad de leer lenguaje ensamblador. En algunos casos como en aplicaciones desarrolladas en vb.net, c#, java y algunas mas es posible decompilar el binario y obtener el código en un lenguaje de alto nivel.

A continuación dejo unas cheatsheets con las instrucciones en ensamblador para arquitecturas Intel, ARM y MIPS.

ASM:

MIPS:

ARM:
http://infocenter.arm.com/help/topic/com.arm.doc.qrc0001l/QRC0001_UAL.pdf

Una vez tenemos claro el funcionamiento del pc y el funcionamiento de las diferentes instrucciones en bajo nivel. ¿Qué es lo siguiente?
El siguiente paso lógico es detectar en que lenguaje esta desarrollado el software, para esto podemos usar tolos como 4n4l detector, rdgmax packer detector, PEid…
Estas herramientas nos darán parte de la información que necesitamos.
En caso de que nos detecte que la aplicación esta desarrollada en lenguajes que sea posible decompilar, el proceso se facilita mucho.
Algunas herramientas útiles son de4dot, dnspy, ildasm, ilspy.


En caso contrario tenemos que tratar de recopilar toda la información que podamos, suponiendo que trabajemos sobre un binario PE (Windows) debemos saber en que lenguaje ha sido desarrollado, si se le han aplicado packers, si tiene medidas de protección frente a debuggers, que librerías y funciones importa, que secciones tiene el binario y como se organizan y por ultimo verificar que la IAT http://sandsprite.com/CodeStuff/Understanding_imports.html esta correcta, en caso contrario habrá que repararla para el correcto funcionamiento del ejecutable.
Todo lo mencionado en este punto se puede hacer con PEid, aunque personalmente prefiero usar rdgmax packer detector para identificar posibles packers y el lenguaje ya que es capaz de detectar de forma heurística firmas falsas, para el resto me gusta LordPE.

Por ultimo, queda hacer la parte mas interesante, el análisis dinamico o depurado. Esta fase consiste en ejecutar y experimentar con el binario, someterlo a estrés, modificar el flujo, en definitiva, hacer lo que desde un primer momento queríamos hacer, ya fuese cracking, exploiting, analizar malware o simplemente entender el funcionamiento para replicarlo o mejorarlo.
En esta sección destaca una aplicación por encima de todas las demás IDA de hexrays y no solo por su precio (en torno a 1500$), IDA nos permite realizar análisis estatico y dinamico para cualquier arquitectura sin necesidad de trabajar sobre la arquitectura objetivo, es el programa mas completo con diferencia.
Otras aplicaciones de debugging buenas para windows son ollydbg y windbg.
Para sistemas UNIX sin duda recomiendo radare2, no es fácil de usar pero tiene un potencial tremendo. Para empezar quizás sea mas apropiado usar gdb (gnu debugger) con el modulo peda.

Infografia en el blog: https://blog.underc0de.org/tips-informaticos/
Si necesitas ayuda, no dudes en mandar MP

Desconectado zoro248

  • *
  • Underc0der
  • Mensajes: 242
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
    • Email
« Respuesta #1 en: Junio 19, 2017, 05:28:06 pm »
Gracias, recien voy a iniciarme en este mundo xD

 

¿Te gustó el post? COMPARTILO!



ScoopyNG para la detección de máquina virtual VMWARE

Iniciado por .:UND3R:.

Respuestas: 8
Vistas: 5291
Último mensaje Mayo 29, 2015, 01:03:09 pm
por camaron27
[PEDA] Python Exploit Development Assistence para GDB

Iniciado por MagoAstral

Respuestas: 3
Vistas: 5283
Último mensaje Enero 15, 2016, 11:51:04 am
por Jio
¿Que son los crackmes,keygenme ,patchme etc?..¿para que sirven?

Iniciado por ANTRAX

Respuestas: 0
Vistas: 2556
Último mensaje Febrero 20, 2010, 03:03:42 am
por ANTRAX
IDAscope la navaja suiza para reversers

Iniciado por Stuxnet

Respuestas: 0
Vistas: 3935
Último mensaje Octubre 26, 2012, 09:02:35 pm
por Stuxnet
Parchear programa para registrarlo

Iniciado por ANTRAX

Respuestas: 1
Vistas: 5970
Último mensaje Octubre 03, 2014, 03:56:28 am
por Gabriela