martes, 2 de octubre de 2012

INGENIERIA INVERSA BASICA I ("Aprediendo sobre los programas")

INGENIERIA INVERSA BASICA I
"Aprediendo sobre los programas"

Bueno, me eh tomado la libertad de empezar con esta serie de tutos en los q dare algunas nociones sobre la ingenieria inversa orientandome a la explicacion de las herramientas q utilizaremos. Pero antes de empezar con un grupo de herramientas en especifico, me gustaria tratar de explicar de una forma clara y secilla, que sucede cuando un programa es compilado y que sucede cuando se ejecuta.

-¿Que sucede cuando un programa es compilado?

simple, el programa se traduce a un lenguaje universal para los procesadores. Un compilador es como un traductor el cual convierte lo que nosotros escribimos, en algo que el procesador pueda entender, osea ceros y unos xD, pero estos ceros y unos pueden ser representados en un sistema mas entendible, el hexadecimal, y este lo mas lejos que puede llegar a ser representado es a codificacion ansi, o unicode, es por esto que cuando abrimos un exe, dll o ocx con bloc de notas, vemos una serie de caracteres ksi incomprensible para algien q no sea un genio o q pueda reconocer algo mas q un "MZ" al inicio y una que otra cadena de texto, ya que lo q se ve es la codificacion ansi del codigo binario del programa, q el procesador si puede entender. Este principio es base para el cracking, ya que tenemos q tomar en cuenta que si un programa qiere ser ejecutado por el procesador, debe estar en un lenguaje universal para los procesadores, el binario, esto es lo q permite q exista el concepto de ingenieria inversa o cracking, ya q este conciste en modificar un programa a gusto, esto es posible ya q como todos los programas tienen un solo lenguaje. Uno de los requisitos para ser cracker es saber por lo menos a un nivel basico este lenguaje, el assembler, tambien llamado: codigo de maquina, asm, ensamblador, entre otros. Asi prueben cambiar una "A" por una "a" en un exe en bloc de notas, veran que cuando guardan y ejecutan, el programa ya no trabajara igual q el original, asi el truco esta en saber, exactamente donde y que modificar, para q aga lo que qeremos, para esto existen programas (herramientas) q nos ponen las cosas mas faciles, nos covierten el codigo ansi que vemos con el bloc de notas, en mnemonicos (comandos de ensamblador) aciendo el codigo interpretable para el cracker. Estos son los desensambladores los cuales estudiaremos mas adelante.

Un "editor hexadecimal" es un programa q nos permite ver un programa especifico a nivel hexa y en ansi, y ademas nos permite modificarlo, entre otras cosas.

-¿Que sucede cuando un programa es ejecutado?

weno basikmente cuando un programa se ejecuta, se dice que "se carga en memoria", esto qiere decir q el codigo del programa se guarda en la memoria ram. La memoria ram se secciona de manera q cuando un programa se carga, sus instrucciones son cargadas en un rango de memoria de un segmento especifico, por ejemplo de 004010000-0040232A en el segmento indicado, una instruccion por cada offset. Asi el procesador puede tener un acceso a estos datos para procesarlos.

Existen herramientas q nos permiten ejecutar un programa instruccion por instruccion, ademas de monitorear los valores almacenados en los registros y el desensamblado del programa cargado. Estos son los "depuradores" o "debuggers", algunos de estos tambien nos permiten modificar las instrucciones en ejecucion y editar el programa cargado. Algo q tenemos q tomar en cuenta es q muchos programas utilizan modulos, por esto cuando usemos programas para ver los procesos en ejecucion, asi como el pupe y el procdump, veremos q al seleccionar un proceso este tiene varios subprocesos de los cuales depende, stos subprocesos tambien son usados por otros programas.

El termino "volcar memoria" se refiere a coger un rango especifico de memoria y copiar el codigo contenido dentro de ese espacio en un nuevo archivo. Este proceso es usado mayormente cuando estamos frente a un programa empacado o protegido, y no tenemos el desempacador especifico. El problema cuando tenemos un programa empacado o protegido es q a la ora de desensamblarlo, nos encontraremos con una rutina de descompresion y no con el programa, esto aria q cualqier intento d crackeo sea inutil mientras no tengamos el codigo nativo del programa. Algunos tutos despues estudiaremos como "bajarnos" un programa de la memoria.

Algunos puntos importantes a resaltar en este 1er tuto son:

-Algo impresindible para aprender a crackear es tener conocimientos basicos de asm.
-Todos los progamas procesados por el procesador estan un mismo lenguaje, el lenguaje de maquina.
-Un "editor hexadecimal" es un programa q nos permite ver un programa especifico a nivel hexa y en ansi, y ademas nos permite modificarlo.
-Cuando un programa se ejecuta, el codigo de este se guarda en la memoria ram.
-La mayoria de los programas dependen de modulos.

Algunos consejos para los newbis:

-Te ira mucho mejor crackeando, si ya tienes experiencia programando.
-Los crackers deben tener una mente abierta a un mundo de posibilidades.
-La paciencia es un virtud de los crackers.
-La ingenieria inversa es como la medicina o como cualqier otra rama del hacking, si no te actualizas, te qedas obsoleto.


Auto: Cronux

No hay comentarios: