La ingeniería inversa o reversing es el proceso realizado para obtener del producto final, la información de cómo funciona, fue realizado, cuáles son sus partes,cómo se relacionan, etc. en esencia un análisis para entender el funcionamiento de algún producto.
No necesariamente se aplica siempre al software y es una práctica que se ha llevado a cabo desde mucho antes que los computadores y el software, un famoso ejemplo sería la máquina enigma.
Lógicamente en este blog nos concentramos en hablar sobre la ingeniería inversa del software, que está centrada en realizar el análisis del funcionamiento de un software, sin tener el código original, información de desarrollo, bocetos, etc.
Para este primer acercamiento veremos las razones por las que podría ser usado la ingeniería inversa y algunos software usados para esta práctica.
Si hablamos en temas de seguridad generalmente estará asociado con el análisis de malware, de esta manera podemos analizar el ejecutable o la ejecución de un malware y poder así determinar como funciona, como encripta o destruye los archivos, a donde envía la información que roba, etc.
Otra razón por la que se usa en seguridad informática es para encontrar vulnerabilidades, de esta manera se puede revisar si el código ejecutable final se puede usar para determinar cómo el software funciona y cómo por ende puede ser vulnerado.
Ahora que uno de los casos más conocidos de la ingeniería inversa puede ser openoffice, que es sabido que realizó ingeniería inversa a Microsft Office para generar compatibilidad con los tipos de archivos.
En este ejemplo podemos ver otra razón por las cual se usa la ingeniería inversa, descifrar algoritmos o funcionalidades.
Otro uso conocido es añadir funcionalidades, por ejemplo tener un software que ya no está siendo actualizado o mejorado, podría realizar ingeniería inversa para añadir funcionalidades específicas.
La ingeniería inversa se puede realizar de manera dinámica; es decir haciendo análisis mientras se ejecuta el código; o estática; analizando el ejecutable.
Para hacer estos diferentes análisis se han creado herramientas de software, se pueden usar diferentes tipos, como depuradores (Software que permite el análisis paso a paso), desensambladores (Convierte a código ensamblador un código binario) y decompiladores que nos permiten hacer el trabajo dependiendo del código, la plataforma, la arquitectura, el tipo de software, entre otras, aquí mencionaremos solo 4 de las más populares.
IDA Pro (desensamblador) , OllyDbg (Depurador), radare2, GHydra
Más acerca de estas herramientas y cómo usarlas serán trabajadas en el blog, por ahora solo se dejan como referencia.
Ahora es necesario mencionar que un tema muy importante a tener en cuenta es el aspecto legal, la ingeniería inversa está generalmente condicionada o penada, dependiendo de la empresa que distribuya el software, algunos te permiten hacer el análisis solo de manera dinámica al comprar su software otros de plano no lo permiten y algunos no tiene restricción, es indispensable que realice las revisiones pertinentes para el software que desea analizar y las limitantes legales que aplican.
En este blog realizaremos análisis de algunos ejercicios y también profundizaremos en teoría relacionada al reversing, así como algunas herramientas para hacerlo, puedes buscar todo lo relacionado con el tag de ingeniería inversa o reversing.
Esta entrada está basada en múltiples lecturas, libros, cursos y otros artículos pero desde mis palabras, dado lo extenso de las fuentes solo dejare algunas de las más recientes y de donde se ha sacado la mayoría de los conceptos.
- Libro Reversing Ingenieria inversa que puedes encontrar aquí
- Wikipedia Ingeniería inversa
Interesante!!! 👏🏼👏🏼👏🏼
Que deberia empezar a ver? Hay tanto material que cuando uno inicia no sabe por donde arranacar. Por lo menoa eso siento ahora 😁
Creo que iniciar con los conceptos base, eso siempre ayudara a que pueda entender los mas complejos en cualquier tema. En seguridad hay temas amplios y complicados como reversing, pero sin duda interesantes y vale la pena dedicar el tiempo a entenderlo poco a poco, con paciencia.