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:
Publicar un comentario