You are on page 1of 40

Ingeniera Reversa

Expositor: Lic. Jos Antonio Flores Martnez

Ingeniera Reversa
Disclaimer
La presentacin se brinda con fines educativos, para desarrollar la cultura en
seguridad informtica y ayudar a prevenir los delitos informticos en el pas.

Expositor: Lic. Jos Antonio Flores Martnez

Ingeniera Reversa
La ingeniera reversa (cracking)

se puede describir como el


grupo de tcnicas empleadas para codificar, analizar y estudiar los principios de un
programa sin disponer de su cdigo fuente. Con un caso prctico quedar mucho
ms clara esta breve definicin. Cuando un desarrollador crea un programa,
comienza escribiendo el cdigo fuente en el lenguaje de programacin que haya
elegido para acabar compilndolo (en un programa ejecutable). Llegado este punto,
nadie podra editar el programa sin disponer del cdigo fuente y realizar una nueva
compilacin. Esto es falso, y en ello es precisamente en lo que se basa el cracking.
La tcnica de ingeniera inversa constituye la piedra angular del cracking, se basa en
la descompilacin, o compilacin inversa, de un programa a un lenguaje de
programacin, generalmente el ms bsico, esto es, ensamblador. Existen
descompiladores capaces tambin de descompilar un programa a un lenguaje de
programacin de alto nivel.

Expositor: Lic. Jos Antonio Flores Martnez

Ingeniera Reversa
Aunque parezca que el objetivo principal del cracking consista en alterar el software
con ciertas modificaciones de su funcionalidad original (normalmente cambios
relativos a la seguridad o a las propiedades de la proteccin), excede la sencilla
actividad de editar el cdigo del programa. Puede llegar a anularse una buena parte
de los sistemas de proteccin sin practicar ninguna modificacin al programa:
hallando la contrasea, el nmero de registro, etc., e incluso simplemente
estudiando el cdigo del programa.

Herramientas de cracking elementales


Depurador (debugger): Son programas originalmente creados para corregir
errores en otros programas informticos, pudiendo abrir cualquier ejecutable (.exe)
en el lenguaje ASM indistintamente de cual haya sido el lenguaje original del
programa (entienden ahora la importancia del ASM, hay que aprenderlo). Con este
programa podemos ejecutar cada instruccin del programa y detenernos en
cualquier momento o en el momento en que el programa toma la decisin de estar
registrados o no y poder cambiar el cdigo a nuestro beneficio.

Expositor: Lic. Jos Antonio Flores Martnez

Ingeniera Reversa
Desamblador (disassembler): Programa que te permite ver cualquier ejecutable en
lenguaje ASM as como referencias de texto entre otras. La principal diferencia con un
debugger es que el desamblador podemos ver el cdigo en ASM y el debugger podemos
interactuar con el (ejecutar, modificar). Un desamblador bastante til es W32dasm
que tambin es debugger, pero se usa mas que nada solo como desamblador ya que si
queremos un buen debugger esta ollydbg que lo supera ampliamente.
Editor hexadecimal: Programas que te permite editar cualquier archivo de forma
hexadecimal. Todo el cdigo ensamblador tiene su correspondiente en hexadecimal,
los debugger y desensambladores traducen esto a las instrucciones que vemos
normalmente. Podemos hacer una modificacin en el ejecutable de dos formas. La
primera es con un editor hexadecimal y la otra es con el mismo ollydbg.
La desventaja de hacerlo con un editor es que si queremos modificar una instruccin en
ensamblador tenemos que saber el correspondiente en hexadecimal y si lo hacemos
con olly lo modificamos directamente por la instruccin que queremos.
Algunos editores son el Ultraedit y el hex workshop.

Expositor: Lic. Jos Antonio Flores Martnez

Ingeniera Reversa
Monitor del registro: Programa que sirve para vigilar el registro de Windows. En
ocasiones los programas guardan datos en el registro, datos como seriales, nombres
de usuario, fecha de instalacin entre otros. Por lo tanto hay que tener en cuenta este
tipo de programas que les puede servir mucho. Un ejemplo monitor de registro es
Regmon.
Monitor de archivos: Programa que sirve para vigilar posibles vnculos con archivos.
Algo parecido al monitor de registro con la diferencia obvia en que este monitorea
archivos ya sea del tipo dato .txt lo que sea. Este tipo de programas es menos til que
el monitor de registro ya que casi siempre los programas guardan los datos en el
registro de Windows.
Descompresores: Algunos programas utilizan distintos tipos de compresiones sin
que estos varen la extensin .exe lo que hace ms difcil crackear, ya que al estar
comprimidos no estamos analizando un ejecutable normal.

Expositor: Lic. Jos Antonio Flores Martnez

Ingeniera Reversa
Los compresores ms famosos son UPX, Asprotect, ASPack, armadillo,
PECompressor, etc.
Los descompresores tienen multitud de nombres casi todos incluyen el mismo
nombre del compresor Ej. Aspackdie.

Expositor: Lic. Jos Antonio Flores Martnez

Ingeniera Reversa
Clasificacin bsica de los tipos de proteccin
disponibles
Duracin limitada
Nmero limitado de ejecuciones
Otras restricciones
Nmero de registro o contrasea-nmero de serie
Fichero clave
Programas limitados
Clave hardware(dongle)
Comprobacin de la presencia del CD
Proteccin contra la copia del CD
Proteccin comercial
Compresores y codificadores para formato PE
Programas en Visual Basic

Expositor: Lic. Jos Antonio Flores Martnez

Ingeniera Reversa
Registros de propsitos generales del CPU de Intel
x86
EAX: acumulador. Usado para clculos y usado para almacenar valores de retorno de
llamadas (CALLS) a funciones. Las operaciones bsicas tales como : sumar, restar y
comparar usan este registro.
EBX: base. No tiene nada que ver con el puntero base. No tiene propsito general y
puede ser usado para almacenar datos.
ECX: contador. Usado para iteraciones (loops)
EDX: datos. Esta es una extensin de EAX. Permite clculos ms complejos como
multiplicar, dividir permitiendo almacenar datos extras para facilitar estos clculos.
ESP: Puntero al Stack

Expositor: Lic. Jos Antonio Flores Martnez

Ingeniera Reversa
EBP: puntero base
ESI: ndice de origen. Guarda la ubicacin de los datos de entrada
EDI: ndice de destino. Apunta a la ubicacin a donde se almacena el resultado de los
datos de la operacin.
EIP: Instruction Pointer o ocntador del programa

Expositor: Lic. Jos Antonio Flores Martnez

10

Ingeniera Reversa
Instrucciones bsicas en ensamblador
LEA
Descripcin: esta instruccin guarda la direccin de fuente en destino.
Sintaxis: LEA destino, fuente
Ejemplo: LEA EAX, variable guarda la direccin de la variable en el registro EAX.
Operacin: variable_destino = &variable_fuente
MOV
Descripcin: esta instruccin guarda el contenido de fuente en destino.
Descripcin: MOV destino, fuente
Ejemplo: MOV EAX, EDX guarda el valor del registro EDX en el registro EAX.
MOV EAX, 123h guarda el valor 123h en el registro EAX.
Operacin: variable_destino = variable2_fuente

Expositor: Lic. Jos Antonio Flores Martnez

11

Ingeniera Reversa
MOVSX
Descripcin: esta instruccin guarda el contenido de fuente en destino con
extensin de signo. Esto es, los bits que no se hayan utilizado de destino en la copia
toman el valor del bit de signo de fuente.
Sintaxis: MOVSX destino, fuente
Ejemplo: MOVSX EAX, 123h almacena el valor 123h en el registro EAX y guarda en los
bits restantes el bit de signo del valor 123h.
MOVZX
Descripcin: esta instruccin guarda el contenido de fuente en destino con
extensin cero. Esto es, los bits que no se hayan utilizado de destino en la copia
toman el valor de cero.
Sintaxis: MOVZX destino, fuente
Ejemplo: MOVZX EAX, 123h guarda el valor 123h en el registro EAX y cambia a cero
los bits no utilizados en la operacin.

Expositor: Lic. Jos Antonio Flores Martnez

12

Ingeniera Reversa
MOVSB/MOVSW/MOVSD
Descripcin: esta instruccin guarda un byte (MOVSB), palabra (MOVSW), o doble
palabra (MOVSD) de la direccin DS:ESI a la direccin ES:EDI. Los registros ESI y EDI
se extienden o reducen segn la longitud de los datos transmitidos y del flag DF.
Sintaxis: MOVSB/movsw/movsd
MOVSW guarda una palabra de la direccin DS:ESI en la direccin ES:EDI.
MOVSD guarda una doble palabra de la direccin DS:ESI en la direccin ES:EDI.
LODSB/LODSW/LODSD
Descripcin: esta instruccin guarda un byte (LODSB), palabra (LODSW), o doble
palabra (LODSD) de la direccin DS:ESI en la parte correspondiente del registro EAX.
El registro ESI se extiende o reduce segn la longitud de los datos transmitidos y del
flag DF.
Sintaxis: LODSB/LODSW/LODSD
Ejemplo: LODSB guarda un byte de la direccin DS:Esi en el registro AL.
LODSW guarda una palabra de la direccin DS:ESI en el registro AX.
LODSD guarda una doble palabra de la direccin DS:Esi en el registro EAX.

Expositor: Lic. Jos Antonio Flores Martnez

13

Ingeniera Reversa
STOSB/STOSW/STOSD
Descripcin: esta instruccin guarda el contenido del registro AL (STOSB), del
registro AX (STOSW), o del registro EAX (STOSD) en la direccin ES:EDI. El registro
EDI se extiende o reduce segn la longitud de los datos transmitidos y del flag DF.
Sintaxis: STOSB/STOSW/STOSD
Ejemplo: STOSB guarda un byte de la direccin DS:EDI en el registro AL.
STOSW guarda una palabra de la direccin DS:EDI en el registro AX.
STOSD guarda una doble palabra de la direccin DS:EDI en el registro
EAX.
REP
Descripcin: prefijo de instruccin aplicable a las instrucciones con caracteres
(STOSB, W, D, LODSB, W, D, MOVSB, W, D). Si el prefijo se define antes de una
instruccin, esta instruccin se repetir y el registro ECX funcionar como contador.
El valor del registro ECX disminuye en uno con cada repeticin. La repeticin finaliza
cuando el valor del registro ECX llega a cero. En caso de una instruccin REP
condicionada (REPZ, REPNZ), tambin se comprueba el flag ZF.

Expositor: Lic. Jos Antonio Flores Martnez

14

Ingeniera Reversa
Sintaxis: REP instruccin
Ejemplo: MOV ECX,5
REP STOSB repite cinco veces (ECX) guardando el valor del registro AL, en
la direccin ES:EDI; el valor de EDI cambia con cada repeticin (vase la instruccin
STOSB).
LOOP
Descripcin: esta instruccin permite la construccin de ciclos (tambin
condicionados utilizando instrucciones LOOP especiales); el registro ECX se utiliza
como contador del nmero de ciclo. El valor del registro disminuye en uno cada vez
que se ejecuta la instruccin LOOP y, excepto cuando sea cero, realice una bifurcacin
a la direccin indicada (en el caso de la instruccin LOOP condicionada, tambin se
comprueba la condicin especfica). Cuando el registro ECX sea cero, el proceso
contina en la instruccin siguiente a LOOP.
Sintaxis: LOOP direccin
Ejemplo: MOV ECX,5
Address: MOV [EAX], ECX

Expositor: Lic. Jos Antonio Flores Martnez

15

Ingeniera Reversa
INC EAX
LOOP direccin se repetir cinco veces (ECX) aquella parte del cdigo
entre la instruccin LOOP y la etiqueta de direccin (esto es, instruccin MOV [EAX],
ECX y INC EAX).
NOP
Descripcin: la instruccin NOP (No Operacin) no ejecuta cierta operacin.
Sintaxis: NOP
AND
Descripcin: esta instruccin realiza una conjuncin lgica (Y lgico) entre fuente y
destino, bit a bit y guarda resultado en destino.
Sintaxis: AND destino, fuente
Ejemplo: AND EAX, EDX realiza una conjuncin lgica entre los valores de los
registros EAX y EDX y almacena el resultado en el registro EAX.
AND EAX, 3Ah realiza una conjuncin lgica entre el valor del registro
EAX y el valor 3Ah; guarda el resultado en el registro EAX.

Expositor: Lic. Jos Antonio Flores Martnez

16

Ingeniera Reversa
Operacin: variable_destino = variable_destino & variable2_fuente
OR
Descripcin: esta instruccin realiza una suma lgica (O lgico) entre fuente y
destino, bit a bit y guarda resultado en destino.
Sintaxis: OR destino, fuente
Ejemplo: OR EAX, EDX realiza una suma lgica entre los valores de los registros
EAX y EDX y almacena el resultado en el registro EAX.
OR EAX, 3Ah realiza una suma lgica entre el valor del registro EAX y el
valor 3Ah; guarda el resultado en el registro EAX.
Operacin: variable_destino = variable_destino | variable2_fuente
XOR
Descripcin: esta instruccin realiza la funcin lgica de no equivalencia (sum mod
2) entre fuente y destino, bit a bit y guarda resultado en destino. Esta funcin se
utiliza frecuentemente al codificar datos.

Expositor: Lic. Jos Antonio Flores Martnez

17

Ingeniera Reversa
Sintaxis: XOR destino, fuente
Ejemplo: XOR EAX, EDX realiza la funcin lgica de no equivalencia entre los
valores de los registros EAX y EDX y almacena el resultado en el registro EAX.
XOR EAX, 3Ah realiza la funcin lgica de no equivalencia entre el valor
del registro EAX y el valor 3Ah guarda el resultado en el registro EAX.
XOR EAX, EAX realiza la funcin lgica de no equivalencia entre dos
valores idnticos (en este caso los valores guardados en el registro EAX); el resultado
de esta operacin ser siempre cero.
Operacin: variable_destino = variable_destino ^ variable2_fuente
NOT
Descripcin: esta instruccin realiza la inversin de todos los bits de destino y
guarda resultado en destino (constituye su propio complemento).
Sintaxis: NOT destino
Ejemplo: NOT EAX realiza la inversin del valor de registro EAX y guarda el
resultado en este registro.

Expositor: Lic. Jos Antonio Flores Martnez

18

Ingeniera Reversa
CMP
Descripcin: esta instruccin resta la fuente del destino y define los flags
adecuados segn el resultado, permitiendo as la comparacin de dos valores. Los
flags definidos pueden utilizarse posteriormente en una instruccin condicionada,
como una bifurcacin. Esta instruccin no altera los valores de fuente ni de destino.
Esta instruccin goza de gran popularidad entre los crackers
Sintaxis: CMP destino, fuente
Ejemplo: CMP EAX, EDX comparacin entre los valores de los registros EAX y EDX.
CMP EAX, 3Ah comparacin del valor de registro EAX y el valor 3Ah.
JNZ 00402000 si los valores no fueran iguales, el control pasara a la
instruccin en la direccin 00402000.
Operacin: Por ejemplo: if (variable_destino == variable2_fuente)
TEST
Descripcin: al igual que suceda con AND, TEST realiza una conjuncin lgica entre
fuente y destino. Sin embargo, esta instruccin no guarda el resultado en ninguna
parte (esto es, los valores de fuente y destino no varan), slo se utilizan para definir
los flags apropiados.

Expositor: Lic. Jos Antonio Flores Martnez

19

Ingeniera Reversa
A esta instruccin le suele seguir frecuentemente la instruccin de una bifurcacin
condicionada.
Sintaxis: TEST destino, fuente
Ejemplo: TEST EAX, EDX realiza una conjuncin lgica entre los valores de los
registros EAX y EDX, tambin define los flags correspondientes segn el resultado.
PUSH
Descripcin: esta instruccin guarda un valor en la pila
Sintaxis: PUSH valor
Ejemplo: PUSH EAX guarda el valor de EAX en la pila
POP
Descripcin: esta instruccin guarda un valor de la pila en destino
Sintaxis: POP destino
Ejemplo: POP EAX guarda el valor de la pila en el registro EAX

Expositor: Lic. Jos Antonio Flores Martnez

20

Ingeniera Reversa
ADD
Descripcin: esta instruccin aade fuente a destino y guarda el resultado en
destino.
Sintaxis: ADD destino, fuente
Ejemplo: ADD EAX, EDX aade el valor del registro EAX a EDX y almacena el valor
en el registro EAX.
ADD EAX, 3Ah aade el valor del registro EAX al valor 3Ah y almacena el
valor en el registro EAX.
Operacin: variable_destino = variable_destino + variable2_fuente
SUB
Descripcin: esta instruccin resta fuente a destino y guarda el resultado en
destino.
Sintaxis: SUB destino, fuente
Ejemplo: SUB EAX, EDX resta el valor del registro EAX a EDX y almacena el valor en
el registro EAX.
Operacin: variable_destino = variable_destino variable2_fuente

Expositor: Lic. Jos Antonio Flores Martnez

21

Ingeniera Reversa
CALL
Descripcin: esta instruccin desplaza el control a un subprograma (llama a una
funcin) en la direccin indicada y al mismo tiempo guarda el valor de la direccin
siguiente (esto es, la direccin de la instruccin que sigue inmediatamente a la
instruccin CALL) en la pila. La instruccin RET se encarga de devolver el control
desde el subprograma.
Sintaxis: CALL direccin del subprograma (funcin)
Ejemplo: CALL 00402000 invocacin a la funcin con direccin 00402000
CALL EAX invocacin a la funcin en la direccin indicada por el valor de
registro EAX.
JMP
Descripcin: instruccin de bifurcacin no condicionada que desplaza el control a la
instruccin de la direccin indicada.
Sintaxis: JMP direccin
Ejemplo: JMP 00402000 desplazamiento del control a la instruccin indicada en la
direccin 00402000.

Expositor: Lic. Jos Antonio Flores Martnez

22

Ingeniera Reversa
JMP EAX desplazamiento del control a la instruccin indicada por la
direccin definida en el valor del registro EAX.
Bifurcaciones condicionadas
Estas bifurcaciones condicionadas comprueban el valor de uno o ms atributos
(flags) del registro EFLAGS y segn el resultado saltarn o no a una direccin
especfica. De estas instrucciones aparecer detrs de aquellas que definan los
atributos (es decir, CMP). A continuacin se enumera una lista de las bifurcaciones
condicionadas bsicas:
Instrucciones
JE/JZ
JNE/JNZ
JB/JNAE
JAE/JNB
JBE/JNA
JA/JNBE

Bifurcacin si
igual/cero
no igual/no cero
por debajo/no por encima ni igual
por encima o igual/no por debajo
por debajo o igual/no por encima
por encima/no por debajo ni igual

Expositor: Lic. Jos Antonio Flores Martnez

23

Ingeniera Reversa
Instrucciones
JL/JNGE
JGE/JNL
JLE/JNG
JG/JNLE
JS
JNS
JP/JPE
JNP/JPO

Bifurcacin si
inferior/no mayor ni igual
mayor o igual/no inferior
inferior o igual/no mayor
mayor/no inferior ni igual
signo
no signo
paridad/paridad par
no paridad/paridad impar

Expositor: Lic. Jos Antonio Flores Martnez

24

Ingeniera Reversa
Prcticas
En este laboratorio el alumno aprender las tcnicas
bsicas necesarias que le permitan conocer informacin
del software que se analizar para poder registrarlo
investigando los nmeros de serie.
Herramientas a utilizar:
RDG Packer Detector v0.7.0
OLLyDbg SND

Expositor: Lic. Jos Antonio Flores Martnez

25

Ingeniera Reversa
A continuacin paso a redactar cada uno de los pasos necesarios para poder obtener el
nmero de serie que me permita registrar el programa.

Lo primero que hare es analizar este software con la herramienta RDG Packer
Detector v 0.7.0 2013 para que obtenga informacin referente al lenguaje de
programacin utilizado para el desarrollo de esta aplicacin, as mismo conocer si
cuenta este ejecutable con alguna medida de proteccin para que en base a la
informacin devuelta por la herramienta tome el procedimiento ms adecuado.

Expositor: Lic. Jos Antonio Flores Martnez

26

Ingeniera Reversa

Imagen de la herramienta RDG Packer Detector v0.7.0


Ahora abrir el ejecutable con la herramienta RDG Packer Detector, pulsando el
botn Open y seleccionando el archivo ejecutable que en este caso se llama
CheetahDVDBurner.exe y activo la opcn M-B en la ventana de la herramienta,
procedo hacer click en el botn Detect.

Expositor: Lic. Jos Antonio Flores Martnez

27

Ingeniera Reversa

Observo en la ventana de la herramienta la informacin devuelta por ella, que el


software, fue desarrollado en el lenguaje de programacin visual Basic 6.0 y que no
cuenta con ninguna medida de proteccin. Con esto ya puedo cerrar el RDG Packer
Detector .
A continuacin abrir el debugger Ollydbg para desensamblar el ejecutable y pueda
empezar analizar el flujo de funcionamiento del ejecutable.

Expositor: Lic. Jos Antonio Flores Martnez

28

Ingeniera Reversa

Imagen de la herramienta OllyDbg v1.10

Expositor: Lic. Jos Antonio Flores Martnez

29

Ingeniera Reversa
Despus de la instalacin del software CheetahDVDBurner.exe en mi computadora,
presento a continuacin la ventana que aparece al ejecutar el programa.

Observo que tengo 15 dias a partir del dia en que se realiz la instalacin del software,
para utilizarlo antes que caduque y por el momento me permite utilizarlo como un
programa de prueba con la opcin Try.

Expositor: Lic. Jos Antonio Flores Martnez

30

Ingeniera Reversa
Teniendo abierta la herramienta OllyDbg, procedo abrir el ejecutable
CheetahDVDBurner .exe para su anlisis y poder localizar el nmero de serie que me
permita registrar el programa. Para ello pulso el men File elijo la opcin Open y
selecciono el programa en la carpeta donde se instal y presiono el botn Abrir.

Una vez desensamblado el ejecutable del software en el OllyDbg, pulso el botn


derecho del mouse en una rea obscura libre de texto, y del men contextual que
aparece selecciono la opcin Search for y hago click en la opcin All referenced text
strings

Expositor: Lic. Jos Antonio Flores Martnez

31

Ingeniera Reversa

Expositor: Lic. Jos Antonio Flores Martnez

32

Ingeniera Reversa
Ahora solo falta localizar el lugar exacto donde se encuentra el o los nmeros de serie
para registrar este software en la ventana de los Strings references (diversos mensajes
que utiliza el software para las diferentes funciones que realiza el programa), que
utiliza la aplicacin.

Y woal, he encontrado los nmeros de serie del programa que permiten registrar el
programa de forma permanente y con todas las funciones completas del mismo, como
si hubiera comprado una licencia de la aplicacin.

Expositor: Lic. Jos Antonio Flores Martnez

33

Ingeniera Reversa
Nada mas resta, copiar uno de
los nmeros de serie e
introducirlos en la ventana de
inicio del programa en el
apartado
Enter
the
Registration Key here y
pegarlo ah y pulsar el botn
Register y listo el software ha
quedado registrado.

Expositor: Lic. Jos Antonio Flores Martnez

34

Ingeniera Reversa
Ejercicios:
1) Encontrar el nmero de serie para registrar el software Super Screen Recorder
2) Encontrar los nmeros de serie para los programas que se encuentran
comprimidos en el archivo rar appz.rar
3) Realizar el keygen que permita registrar los programas que se encuentran en el
archivo comprimido appz.rar.

Expositor: Lic. Jos Antonio Flores Martnez

35

Ingeniera Reversa
Soluciones:
1)

Expositor: Lic. Jos Antonio Flores Martnez

36

Ingeniera Reversa
2)

Expositor: Lic. Jos Antonio Flores Martnez

37

Ingeniera Reversa
3)

Expositor: Lic. Jos Antonio Flores Martnez

38

Ingeniera Reversa
Conclusiones
Como pudieron darse cuenta en esta ocasin no realice ningn crackeo al software
original, simplemente fue analizar e identificar en que lugar se guardan cierta
informacin que permita descubrir los nmeros de serie para registrar el software; por
lo tanto no fue modificado el condigo original del mismo. As mismo con esto
demuestro que hay que tener seguridad en las aplicaciones para aquellas personas que
piensan dedicarse al desarrollo de sottware para que consideren proteccines y
medidas de seguridad para protegerlos.

Recordar que el objetivo de esta presentacin fue con fines didcticos y de aprendizaje
en ningn momento exhorto a los alumnos, catedrticos y pblico en general a
crackear software y venderlos, puesto que esto es un delito grave castigado con prisin,
puesto que esta penado por la ley, por derechos de autor.

Expositor: Lic. Jos Antonio Flores Martnez

39

Ingeniera Reversa

Gracias !!!

Expositor: Lic. Jos Antonio Flores Martnez

40

You might also like