Ingeniería Inversa






TUTORIAL
Introducción a la Ingenieria Inversa



DESCRIPCIÓN
Ingeniería Inversa
Vamos a iniciar desde aquí, una serie de tutoriales sobre Ingeniería Inversa, o Software Cracking.

Introducción a la Ingeniería inversa
En este tutorial te enseñaré lo que es la ingeniería inversa y qué tipos de herramientas se utilizan.

Qué es la ingeniería inversa?
La ingeniería inversa es el proceso de tomar un binario compilado e intentar recrear ( o simplemente entender ) la manera original de como funciona el programa.

Un programador inicialmente escribe un programa, por lo general en un lenguaje de alto nivel como C ++ o C # o Visual Basic ( o Dios no lo quiera, Delphi ), etc...

Debido a que el equipo no entiende idiomas, el código que escribió el programador, se ensambla en un formato específico que un ordenador entiende.

Este código se llama en un principio, lenguaje máquina. Este código no es muy humano, ni tampoco amable, y muchas veces requiere una gran cantidad de energía del cerebro para averiguar exactamente lo que el programador tenía en mente.

Como se utiliza la Ingeniería Inversa?
La ingeniería inversa se puede aplicar a muchas áreas de la informática, pero aquí hay un cuantas categorías genéricas, por lo que es posible interactuar con el código heredado ( en el que no se tiene el código fuente original ).

Ejemplos
Romper la protección de copia ( es decir, impresionar a tus amigos y ahorrar algo de  ).

Destrozar el código fuente de una aplicación a un  compañero...  :p  ( je jeje, un saludo Zarat ).

Estudiar Virus y Malware.

La evaluación de la calidad del software y la robustez.

Adición de funcionalidad al software existente.

Categorías
La primera categoría es el código de la Ingeniería Inversa para la interfaz con los binarios existentes, cuando el código fuente no está disponible. No voy a discutir esto mucho, ya que es aburrido.

La segunda categoría (y la más grande) está rompiendo la protección de copia. Esto significa deshabilitar pruebas de tiempo, derrotando la seguridad del código, y básicamente todo lo demás , para conseguir un software comercial de forma gratuita.

La tercera categoría está estudiando virus y código malicioso. Se requiere la ingeniería inversa, porque muchos programadores de virus, no envían instrucciones sobre cómo se escribió el código.

La cuarta categoría está evaluando la seguridad del software y las vulnerabilidades. Al crear los sistemas operativos Windows, ingeniería inversa se utiliza para asegurarse de que el sistema no contiene vulnerabilidades importantes, fallos de seguridad, y para que sea tan duro como se pueda, para no permitir que se rompa la seguridad del software.

La última categoría es la adición de la funcionalidad al software existente. Una categoría de las más divertidas.

¿No te gusta los gráficos utilizados en el software de diseño web? ¡Cambialos!. ¿Quieres añadir un elemento de menú para cifrar sus documentos en el procesador de textos favorito? ¡Añádelo!.

¿Quieres molestar a tus compañeros de trabajo añadiendo cuadros de mensajes despectivos a la calculadora de Windows? ¡Vamos a hacerlo!.

Qué conocimiento se requiere?
Como podrán imaginar, una gran cantidad de conocimiento es necesario para ser ingeniero inverso eficaz.

Afortunadamente, una gran cantidad de conocimiento no es necesario para 'empezar' ingeniería inversa, y ahí es donde espero poder entrar.

Dicho esto, para divertirse con la marcha atrás y sacar algo de estos tutoriales, al menos debe tener una básica comprensión de cómo funciona el flujo de un programa (por ejemplo, usted debe saber lo que hace un básico if ... then, lo que es una matriz, y han visto al menos un programa hola mundo).

En segundo lugar, familiarizarse con lenguaje ensamblador es muy recomendable, usted puede obtener conocimiento a través de estos tutoriales, pero en algún momento tendrá que convertirse en un gurú en ASM, para saber realmente lo que está haciendo.

Además, gran cantidad de su tiempo se dedica a aprender a usar herramientas. Estas herramientas son de gran valor para la ingeniería inversa, pero también requieren el aprendizaje, defectos e idiosincrasias de cada herramienta.

Finalmente, la ingeniería inversa requiere una cantidad significativa de experimentación, jugando con diferentes esquemas de envasadores, protectores, cifrado, aprender acerca de los programas originalmente escritos en diferentes lenguajes de programación (incluso Delphi), descifrando trucos de ingeniería anti-reversa ... la lista sigue y sigue.

Qué tipo de herramientas se utilizan?
Hay muchos tipos diferentes de herramientas utilizadas en la inversión (marcha atrás). Muchos son específicos de los tipos de protección que se deben superar para revertir un binario.

También hay varios que pueden hacer la vida del inversor más fácil. Y luego algunos son los que utiliza con regularidad. En su mayor parte, las herramientas encajan en otras tantas categorías:

1.  Desensambladores
Los desensambladores intentan llevar a los códigos del lenguaje máquina en el binario, y los muestra en un formato más amigable. También extrapolan datos como llamadas a funciones, pasan variables y cadenas de texto. Esto hace que el ejecutable más como código legible en lugar de un montón de números ensartados.

Hay muchos desensambladores por ahí, algunos de ellos se especializa en ciertas cosas (como los binarios escritos en Delphi). Sobre todo se reduce a que es más cómodo. Se puede trabajar con la AIF (hay una versión gratuita disponible en www.hex-rays.com ), así como un par de menos conocidos que ayudan en casos específicos.

2.  Depuradores
Los depuradores son el pan de cada día para los ingenieros inversos. Estos analizan la primera binaria, al igual que los Depuradores desensambladores, esto es muy valioso para descubrir cómo funciona un programa.

Por último, algunos depuradores permiten ciertas instrucciones en el código para cambiarse y luego correr de nuevo con estos cambios en su lugar.

Ejemplos de depuradores son WinDbg y OllyDbg ... www.ollydbg.de

3. Editores Hexadecimales
Editores Hexadecimales le permiten ver los bytes reales en un binario, y cambiarlos. También proporcionan la búsqueda de bytes específicos, el ahorro de las secciones de un binario en el disco, y mucho más.

Hay muchos editores hexadecimales libres por ahí, y la mayoría de ellos están bien . Puedes empezar por alguno de los que hay piblicados en el blog pirata ... Resource Hacker o Hex Editor 

4.  PE y recursos espectador / editor
Cada binario diseñado para ejecutarse en una máquina Windows (y Linux para el caso) tiene una sección muy específica de datos al comienzo de la misma que indica al sistema operativo cómo configurar e inicializar el programa.

Cuánta memoria se requerirá, qué DLL del programa tiene que pedir prestado al código de información sobre los cuadros de diálogo. Esto se llama el Portable Executable, y todos los programas diseñados para funcionar en ventanas debe tener uno.

En el mundo de la ingeniería inversa, esta estructura de bytes se vuelve muy importante, ya que da la reversa información necesaria sobre el binario.

Con el tiempo, usted querrá (o necesitará) cambiar esta información, ya sea para que el programa haga algo diferente a lo que era inicialmente, o para cambiar el programa en algo que era originalmente (como un protector hace el código de verdad difícil de entender).

Hay una gran cantidad de espectadores PE y editores por ahí. CFF Explorer www.ntcore.com/exsuite.php y LordPE.

La mayoría de los archivos también tienen secciones de recursos. Estos incluyen gráficos, elementos de diálogo, elementos de menú, iconos y cadenas de texto. A veces usted puede divertirse con sólo mirar (y alterar) las secciones de recursos.

5.  Herramientas de monitoreo de sistema
Al invertir los programas, a veces es importante (y al estudiar virus y malware, de la mayor importancia) ver lo que cambia una aplicación al sistema; ¿Existen claves de registro creadas o si consultan? ¿hay archivos .ini creados? ¿se crean procesos separados, tal vez para frustrar la ingeniería inversa de la aplicación? Ejemplos de herramientas de monitorización del sistema son Procmon, Regshot y Reghacker.

6.  Herramientas e información
Existen otras herramientas como unpackers, identificadores packer etc.

También en esta categoría nos da una referencia a la API de Windows. Esta API es enorme, y a veces complicada. Es muy útil en la ingeniería inversa saber exactamente a que funciones se están llamando.

7.  A disfrutar
Esta fue una simple introducción a la ingeniería inversa, y en mi próximo tutorial voy a mostrar cómo se rompe algún código de programa, o nos divertiremos modificando algún recurso, etc...



CAPTURAS



WEB DEL AUTOR


:) :( ;) :P :/ :x :* :O :S :| B) :w :a :)) :(( O:)

7:) 7:P (:| =)) I-) 2:P =DD X_X :!! :q ^_^ :ar!

2 comentarios

  1. Creo que esta introducción que has hecho sobre este tema es simplemente magnífica por que estoy harto de leer (como bien sabes) sobre el tema y siempre se usa un lenguaje inentendible para quien se quiere inciar en el mundo de la "ingenieria inversa" pero tu lo las resumido todo de forma clara, concisa, y sobre todo "entendible" para cualquiera que lo lea.
    Seguramente los usuarios interesados en el tema digan esto: nos dejas como se suele decir "con la miel en los labios" esperando que el siguiente si sea un verdadero tutorial que lleve algo de contenido para practicar.
    Respecto a lo mio estarás de acuerdo que cualquier iniciado seria capaz de romperlo ya que es una protección muy debil (yo lo sabia de antemano).

    ResponderEliminar
  2. Hola amigo y compañero Zarat, un gusto leerte.

    ResponderEliminar