[UNDERTIP]Conocimientos necesarios para realizar ingeniería inversa - Underc0de - Hacking y seguridad informática [UNDERTIP]Conocimientos necesarios para realizar ingeniería inversa - Underc0de - Hacking y seguridad informática
Esta es una respuesta al tema: [UNDERTIP]Conocimientos necesarios para realizar ingeniería inversa en La plantilla. Ingeniería Inversa
« 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?
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.
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/
Re:[UNDERTIP]Conocimientos necesarios para realizar ingeniería inversa
« Respuesta #1 en: Junio 19, 2017, 05:28:06 pm »
Gracias, recien voy a iniciarme en este mundo xD
Vistas: 6543 Mayo 29, 2015, 01:03:09 pm
Vistas: 6522 Enero 15, 2016, 11:51:04 am
Vistas: 4549 Octubre 26, 2012, 09:02:35 pm
Vistas: 3163 Febrero 20, 2010, 03:03:42 am
Vistas: 6651 Octubre 03, 2014, 03:56:28 am