Vous êtes sur la page 1sur 18

Anlisis Tcnico de un Sistema de Proteccin basado en KEYFILE

1001 Ways to Crack Software 2011


29/11/2011 Centro de Investigaciones en Alta Tecnologa Rodolfo Hernndez Baz

Seguridad en Software

Coatepec, Ver. Mxico informes@ccat.edu.mx www.ccat.edu.mx www.x25.org.mx

Seguridad en Software

Definicin de la Ingeniera Reversa (Cracking)

An hoy el trmino Cracking tiene una amplia gama de significados. Para algunos el Cracking consiste en forzar bruscamente a un programa, generalmente de manera poco elegante, para que trabaje. Para otros el Cracking es hacer un programa inteligente (generalmente pequeo) o la modificacin de un programa, y una persona que despliega una inusual perspicacia en un lenguaje de programacin o en un sistema operativo. Por otra parte, cualquier manipulacin diestra sera tambin considerada como un acto de Cracking. Algunos Psiclogos, Socilogos, y otros profesionales que se relacionan con los aspectos del comportamiento, consideran el Cracking no ms que como una aficin a la computadora. A los que padecen la enfermedad se les considera como a seres socialmente ineptos e incapaces de formar parte de un grupo por otro medio, que el que proporciona la lejana y la abstraccin de la computacin. En el libro llamado El Diccionario del Hacker, los autores Guy Steele y otros, han perfilado por lo menos siete definiciones diferentes de un pirata o Cracker: 1. Una persona que disfruta aprendiendo sobre los detalles de los sistemas de la computadora y sobre cmo aumentar sus capacidades; como opuesto a la mayora de los usuarios de computadoras, quienes prefieren aprender slo lo mnimamente necesario. Uno que programa con entusiasmo, o que disfruta programando, ms que teorizando solamente acerca de la programacin. Una persona capaz de apreciar el valor pirata. Una persona que es buena programando rpidamente. Un experto en un programa particular o uno que frecuentemente trabaja usndolo o en l. Un experto de cualquier gnero. Un malvolo e inquisitivo entrometido que trata de descubrir informacin hurgando a su alrededor. Por ejemplo un pirata de la contrasea es uno que trata, posiblemente por medios engaosos o ilegales, de descubrir las contraseas de las computadoras de otra gente. Un pirata de la red es uno que trata de aprender acerca de la red de computadoras (posiblemente para mejorarla o posiblemente para interferirla).

2.

3. 4. 5. 6. 7.

Por lo tanto, para nuestros propsitos, la piratera tambin llamada Hacking, es cualquier actividad relacionada con la computadora que no ha sido sancionada o aceptada por el patrn o dueo de un sistema de red o software. Debemos distinguirlo, de cualquier modo, de la piratera de Software (Cracking) y del crimen computacional, donde el tpico principal es el derecho de propiedad de la informacin y el uso de sistemas de computacin para perpetrar lo que, en cualquier otra situacin, se mirara simplemente como un robo monetario fraude. Hasta cierto punto esta definicin es bastante amplia. No obstante, tal definicin nos provee con una rica carga de casos y sucesos que estn en el corazn mismo de los tpicos ticos en computacin.

Coatepec, Ver. Mxico informes@ccat.edu.mx www.ccat.edu.mx www.x25.org.mx

Seguridad en Software

Definicin de un KEYFILE:
Siempre eh dicho que todo sistema de proteccin tiene su forma de desprotegerlo y precisamente de eso se encarga la ingeniera reversa o tambin llamada CRACKING, de analizar y encontrar en el cdigo desensamblado de un software la proteccin con la cual este verifica que no est registrado, existen cientos de tipos de protecciones algunas bsicas, otras no tanto pero al fin y al cabo todas son factibles de vulnerar, como en el siguiente ejemplo que analizaremos dos tipos de proteccin basado en KEYFILE.

Diferencias a tomar en cuenta:


Existen dos tipos de archivos en general con los cuales los programadores protegen el software, estos son los siguientes: RegFile: archivo .reg que contiene las entradas del Registro en lugar de efectuar directamente los cambios en el Registro. KeyFile: archivo que especifica el nombre de archivo que contiene la clave o registro para que el software quede registrado.

Comenzando con el anlisis:


Existen muchos variantes de protecciones basadas en KEYFILE, la que veremos en este articulo est basada en KEYFILE con verificacin Hexadecimal de Contenido Variable que desde este momento llamaremos KVHCV. Esta verifica como su nombre lo dice que exista un archivo en algn lugar del disco duro, lgicamente especificado por el programa el cual debe de tener y contener una extensin predeterminada y un valor dentro del mismo, en algunos casos los programadores encriptan el contenido del KEYFILE pero aun as es reversible.

Utilerias a usar:
1. W32dasm 2. OllyDbG v 1.10 3. Editor de Texto 4. Editor Hexadecimal 5. Calculadora Cientfica

Coatepec, Ver. Mxico informes@ccat.edu.mx www.ccat.edu.mx www.x25.org.mx

Seguridad en Software

Anlisis del Comportamiento de la Proteccin


Lo primero que todo reverser hace es analizar el programa que trata de vulnerar, con diferentes utileras y adems lo ejecuta para ver el comportamiento de la proteccin y el software en s mismo, cabe mencionar que para este artculo usaremos un CRackME para prueba de concepto llamado:

El cual nos ayudara a entender como los reverses hacen su trabajo. Al ejecutar el crackme lo primero que aparece es una NAg screen donde nos dice el nombre del creador y un string reference CLick OK to check for the Keyfie y un botn Aceptar ahora le damos click en Aceptar y vemos la siguiente pantalla:

Otro String Reference Hmmmmm, I cant find the file! como podemos ver cuando le damos click en el botn de Aceptar en la primera NAgScreen nos ejecuta otra NAgScreen en la cual nso dice que no encuentra el archivo, esto me hace pensar y preguntarme varias cosas, primeramente me doy cuenta que el Crackme verifica si existe un archivo, pero qu archivo es, con que extensin, en que formato y en donde lo busca? Esas preguntas las iremos resolviendo en el transcurso de este texto.

Coatepec, Ver. Mxico informes@ccat.edu.mx www.ccat.edu.mx www.x25.org.mx

Seguridad en Software

Anlisis interno del Ejecutable


Una vez hecho el anlisis del comportamiento de la proteccin pasamos a hacer un reconocimiento interno del PE (Portable Ejecutable) a ms detalle donde veremos y encontraremos en que lenguaje fue programado, si esta empacado o encriptado, para eso usaremos el RDG Packer Detector v 0.6.7 el cual nos dir muchas cosas.

Le damos click en abrir y seleccionamos el Crackme en cuestin:

Y como podemos ver nos dice en que lenguaje de programacin fue hecho y lo ms importante no est empacado ni protegido, cabe mencionar que esto es un error ya que facilitan el trabajo para los piratas informticos que quieren tener el software totalmente libre de uso sin pagar las regalas pertinentes. El siguiente paso es analizar el ejecutable en lo que yo llamo cdigo muerto que consiste simplemente desensamblar el (PE) con el W32Dasm una utilera realmente viejita pero sigue siendo de gran utilidad y vala para los reversers, una vez dicho estoy pasamos a desensamblar el (PE) y en el W32Dasm podremos ver lo siguiente:

Coatepec, Ver. Mxico informes@ccat.edu.mx www.ccat.edu.mx www.x25.org.mx

Seguridad en Software

En esta ventana podemos ver las partes que conforman el (PE) ahora viene lo ms complicado analizaremos cada parte que conforma al (PE) En la imagen siguiente podemos ver la cabecera del ejecutable que en este caso contiene 5 secciones las cuales contienen toda la informacin que el ejecutable necesita para poder ser inicializado

Pero antes de explicarles en qu consisten las cabeceras, les explicare a grandes rasgos que es un Portable ejecutable.

Coatepec, Ver. Mxico informes@ccat.edu.mx www.ccat.edu.mx www.x25.org.mx

Seguridad en Software

Anlisis de Archivos Portables Ejecutables PE Files Que es el Formato Portable Ejecutable?

Desde la versin 3.1 de Windows introdujeron un nuevo tipo de formato para los archivos ejecutables el cual llamaron PE (Portable Executable). El cual tuvo su inicio en el formato COOF (Common Object File Format) que usa Unix para que se pudiera mantener su compatibilidad con MS-DOS y los sistemas operativos Windows, este nuevo tipo de archivo ejecutable continuo con la cabecera MZ del MS-DOS. Pero por que le pusieron el nombre de Portable Executable? Eso simple y sencillamente porque es portable y totalmente compatible con cualquier versin del sistema operativo windows. As como tambin es usado en procesadores diferentes a Intel X86, MIPS Alpha entre muchos otros, cabe mencionar tambin que los DLL y Drivers de dispositivos tambin se manejan en el formato PE. Pero como nos podemos dar cuenta de esa cabecera? Pues simplemente abrimos con un editor Hexadecimal un PE y podremos ver la cabecera:

Esto nos dice mucho acerca del ejecutable para conocer y comprender los conceptos bsicos de cmo se ejecutan y el por qu se ejecutan las aplicaciones hechas para el Sistema Operativo WINDOWS 32 Bits, como se cargan las libreras de funciones dinmicas llamados tambin DLL, y sus funciones importadas y exportadas del mismo.

Coatepec, Ver. Mxico informes@ccat.edu.mx www.ccat.edu.mx www.x25.org.mx

Seguridad en Software

En la siguiente imagen tomada de internet, podemos ver don la estructura lgica de un PE

Archivos en General y el Formato PE Como hemos visto existen gran variedad de archivos donde los datos en un archivo comn y corriente no es ms que un conjunto de datos organizados de tal forma en registros donde cada registro podramos llamarlo como en la programacin estructurada, con esto decimos que es un espacio que ocupa en memoria para guardar datos de forma organizada.
Entonces, en los archivos con formato PE, tenemos un encabezado y un cuerpo.

Coatepec, Ver. Mxico informes@ccat.edu.mx www.ccat.edu.mx www.x25.org.mx

Seguridad en Software

10

El encabezado de los archivos PE lo podemos dividir en 4 sub encabezados que son los siguientes:

El encabezado DOS MZ El encabezado PE El encabezado NT opcional El conjunto de tablas de secciones

Veamos la organizacin en la siguiente tabla: PE EXE (Windows 32Bit EXE, DLL, OCX, etc) Contiene informacin necesaria para ejecutar el DOS STUB. Conservado por compatibilidad El desplazamiento (OFFSET) 3Ch apunta al encabezado PE

Encabezado MZ EXE Encabezado MZ extendido

Encabezado DOS

DOS STUB

Usualmente despliega 'Requires windows to run' o un mensaje similar

Agregado para avisar que el programa rueda en Windows

Encabezado PE

Contiene info necesaria para correr el programa en Win32 Encabezados agregados por W32

Contiene info adicional necesaria para Encabezado opcional NT correr el programa en Win32 Tabla de Objetos o Secciones Objetos o secciones Informacin sobre objetos o secciones en el archivo Datos de las secciones

Cuerpo del archivo

Coatepec, Ver. Mxico informes@ccat.edu.mx www.ccat.edu.mx www.x25.org.mx

Seguridad en Software

11

A este antiguo encabezado EXE MZ se le han agregado algunos campos que informan al cargador del Sistema Operativo (SO) dnde est el encabezado PE con informacin relevante para W32. Encabezado MZ Extendido 001C Dword 0020 Dword 0024 Dword Tabla de relocalizacin con un nmero variable de reubicacin de elementos. Identifuicador OEM Informacin OEM.

0028 26Bytes Reservado. 003C Dword Desplazamiento del nuevo encabezado EXE desde el inicio del archivo o 0 si es un archivo MZ EXE

El ltimo campo de esta extensin, 'e_lfanew', indica la direccin donde est la signatura que identifica el formato del archivo. Si se trata de un archivo con un programa W32, este campo apunta a dos caracteres: "PE" (Portable Executable), el formato elegido por M$ para los archivos con programas W32. Si abrimos NOTEPAD.EXE con con HEX WORKSHOP y revisamos el campo e_lfanew en el desplazamiento 003Ch, veremos el nmero 8000h, que al revs es 0080h, el desplazamiento donde veremos los caracteres 'PE', que identifican el formato del archivo (Si trabajas con HEX WORKSHOP, no cierres todava este archivo). Si ahora abrimos con HEX WORKSHOP el archivo WINFILE.EXE, generalmente ubicado en el directorio C:\WINDOWS, veremos que el desplazamiento 003Ch apunta al desplazamiento 0400h, donde encontramos los caracteres 'NE', que es el formato de los archivos W16. Inmediatamente despus de la signatura hay dos bytes o una palabra (WORD) con ceros, despus de los cuales inicia el encabezado PE. En la actualidad, el formato NE est prcticamente extinguido. Lo pasar por alto y me concentrar en el formato PE. Entre el encabezado MZ DOS y la signatura PE, est la seccin "STUB" del archivo, la cual se incluye para el despliegue de un mensaje que indica que el programa slo puede correr en Windows.

Coatepec, Ver. Mxico informes@ccat.edu.mx www.ccat.edu.mx www.x25.org.mx

Seguridad en Software

12

Tambin existen muchas secciones importantes que deberamos de conocer a cerca de los Portables Ejecutables como lo son: El tamao de la secciones Punto de Entrada (RVA Entry Point) Base de las secciones Base de la Imagen (ImageBase) Alineamientos Tamao de la imagen Directorio de datos SizeOfRawData PointerToRawData

Y muchas y muchas ms cosas que debemos de conocer a cerca de los PE, que en este texto no se trataran ya que el objetivo principal es el de mostrar la proteccin de KEYFILES.

Regresando a la imagen previa, tomada del desensamblado del crackme:

Ahora explicaremos algunas de las secciones PE del crackme en cuestin: .data y .text : permiten especificar las secciones de memoria donde se ubicaran los cdigos de maquina correspondientes a las lneas de texto que siguen a la directiva. .reloc : En pocas palabras, los traslados de base son simplemente una lista de ubicaciones en un archivo ejecutable en un valor delta se necesita ser aadido a los contenidos actuales de la memoria. Las pginas de un archivo ejecutable se ponen en la memoria slo cuando son necesarios, y el formato de los Movimientos de base as lo refleja. Las reubicaciones de base residen en una seccin llamada. Reloc, pero la forma correcta de encontrarlos es a partir de la DataDirectory con la entrada IMAGE_DIRECTORY_ENTRY_BASERELOC.

Coatepec, Ver. Mxico informes@ccat.edu.mx www.ccat.edu.mx www.x25.org.mx

Seguridad en Software

13

.rsrc : esta seccin contiene la informacin sobre los recursos compartidos que son las funciones importadas y exportadas que usa el ejecutable. Con esta explicacin creo que es suficiente, ahora si continuemos con la proteccin de KEYFILES. Una vez desensamblado el ejecutable vamos y damos click en el botn: para que nos muestre los String references que contiene y vemos la siguiente ventana:

Donde podemos ver los textos que muestra al llevar a cabo una accin y si ustedes son muy avivados podemos darnos cuenta de algo sper importante, recuerdan que habamos dicho en lneas anteriores que el crackme buscaba un archivo? Y no lo encontraba? Bueno pues ah nos podemos dar cuenta que archivo busca: Abex.l2c Ya vieron que fcil fue encontrar el nombre del archivo que busca para saber si esta registrado? Ok ahora creemos un archivo con ese nombre en el folder donde tenemos el crackme:

Lgicamente este lo creamos en primera instancia con el Block de notas, una vez hecho esto, ejecutamos el crackme y vemos que mensajes nos manda ahora:

Coatepec, Ver. Mxico informes@ccat.edu.mx www.ccat.edu.mx www.x25.org.mx

Seguridad en Software

14

Ok perfecto como vemos ya no dice que no encuentra ninguna keyfile, ahora dice que el archivo encontrado cumple con el nombre mas no con el contenido, ya dimos el primer paso, lo siguiente es ahora abrirlo el ejecutable con el debugger llamado OllyDBG el cual nos mostrara en cdigo desensamblado la informacin:

Coatepec, Ver. Mxico informes@ccat.edu.mx www.ccat.edu.mx www.x25.org.mx

Seguridad en Software

15

Ya lo tenemos abierto en el debugger, el siguiente paso es dar clic con botn derecho y seleccionar la opcin Serarch for All reference strings y aparece esto:

Donde sin ms palabras podemos ver lo mismo que en el W32dasm los strings references que contiene el ejecutable, ahora demos doble click sobre abex.l2c y veamos a donde nos lleva:

Aqu claramente podemos ver todo el cdigo que se encarga de decidir si es vlido o no el KEYFILE en la direccin de memoria: veamos el cdigo desensamblado para entenderle mejor 2 cabe sealar que resaltare las lneas ms importantes en color rojo con mis comentarios:
00401025 |. 68 B9204000 PUSH PoC-21.004020B ; |FileName = "abex.l2c" \\ aqu pone en memoria el nombre del archivo\ 0040102A |. E8 5E000000 CALL <JMP.&KERNEL32.CreateFileA> especficamente la de la libreara KERNEL32 llamada CreateFIleA \\ 0040102F |. A3 CA204000 00401034 |. 83F8 FF 00401037 |. 74 3C MOV DWORD PTR DS:[4020CA],EAX ; \CreateFileA \\ en este apartado usa una api de Windows

CMP EAX,-1 \\ compara el registro EXA con -1 \\ JE SHORT PoC-21.00401075 \\ si es igual salta a la direccin de memoria 401075 \\ ; /pFileSizeHigh = NULL PUSH DWORD PTR DS:[4020CA] CALL <JMP.&KERNEL32.GetFileSize> ; |hFile = NULL ; \GetFileSize \\ toma el tamao del archivo\\

00401039 |. 6A 00 PUSH 0 0040103B |. FF35 CA204000 00401041 |. E8 4D000000

Coatepec, Ver. Mxico informes@ccat.edu.mx www.ccat.edu.mx www.x25.org.mx

Seguridad en Software
00401046 |. 83F8 12 00401049 |. 75 15 memoria 401060 \\ 0040104B |. 6A 00 0040104D |. 68 35204000 00401052 |. 68 40204000 00401057 |. 6A 00 CMP EAX,12 \\ compara el registro EAX con 12 \\

16

JNZ SHORT PoC-21.00401060 \\ hace un salto condicional JNZ (salta si no es cero) a la direccin de

PUSH 0

; /Style = MB_OK|MB_APPLMODAL ; |Title = "Well done!" \\ empuja el string a memoria \\ ; |Text = "Yep, keyfile found!" \\ empuja el string a memoria \\

PUSH PoC-21.00402035 PUSH PoC-21.00402040 PUSH 0 ; |hOwner = NULL

00401059 |. E8 41000000 CALL <JMP.&USER32.MessageBoxA> ; \MessageBoxA \\ aqu hace uso de la librera USER32.DLL para mostrar pun mensaje por medio de la API MessageBoxA \\ 0040105E |. EB 28 00401060 |> 6A 00 00401062 |. 68 79204000 00401067 |. 68 7F204000 string a memoria \\ 0040106C |. 6A 00 JMP SHORT PoC-21.00401088 \\ y termina la ejecucin \\ PUSH 0 ; /Style = MB_OK|MB_APPLMODAL ; |Title = "Error" \\ empuja el string a memoria \\ ; |Text = "The found file is not a valid keyfile!" \\ empuja el

PUSH PoC-21.00402079 PUSH PoC-21.0040207F

PUSH 0

; |hOwner = NULL

0040106E |. E8 2C000000 CALL <JMP.&USER32.MessageBoxA> ; \MessageBoxA \\ aqu hace uso de la librera USER32.DLL para mostrar pun mensaje por medio de la API MessageBoxA \\ 00401073 |. EB 13 00401075 |> 6A 00 JMP SHORT PoC-21.00401088 \\ y termina la ejecucin \\ PUSH 0 ; |/Style = MB_OK|MB_APPLMODAL

00401077 |. 68 54204000 PUSH PoC-21.00402054 ; ||Title = "Error" \\ empuja el string a memoria que ser el titulo de la ventana que contendr la siguiente lnea de string\\ 0040107C |. 68 5A204000 a memoria \\ 00401081 |. 6A 00 PUSH PoC-21.0040205 ; ||Text = "Hmmmmm, I can't find the file!" \\ empuja el string

PUSH 0

; ||hOwner = NULL ; |\MessageBoxA \\ aqu hace uso de la librera

00401083 |. E8 17000000 CALL <JMP.&USER32.MessageBoxA> USER32.DLL para mostrar un mensaje por medio de la API MessageBoxA \\ 00401088 \> E8 0C000000 0040108D $- FF25 54304000 00401093 $- FF25 58304000 00401099 .- FF25 5C304000 0040109F $- FF25 64304000 CALL <JMP.&KERNEL32.ExitProcess>

; \ExitProcess \\ termina la ejecucin \\ ; kernel32.CreateFileA ; kernel32.GetFileSize ; kernel32.ExitProcess ; USER32.MessageBoxA

JMP DWORD PTR DS:[<&KERNEL32.CreateFileA>] JMP DWORD PTR DS:[<&KERNEL32.GetFileSize>] JMP DWORD PTR DS:[<&KERNEL32.ExitProcess>] JMP DWORD PTR DS:[<&USER32.MessageBoxA>]

**********************************************************

Coatepec, Ver. Mxico informes@ccat.edu.mx www.ccat.edu.mx www.x25.org.mx

Seguridad en Software

17

Ok con esto creo que tenemos todo claro para finalizar este anlisis hagamos una unin de lo que hace el CRackme: 1. 2. 3. 4. busca si existe el archivo: abex.l2c si lo encuentra verifica el contenido. Compara el contenido del KEYFILE con 12h de error usand Si el contenido no es lo que necesita manda un mensaje o las Apis del sistema operativo. 5. si es lo que necesita te registra y te manda el mensaje de chico bueno. Ese es el proceso que necesita para validarlo, pero nos encontramos con un problema cuando lo compara con 12h que canijos es esto? Bueno pues muy fcil lo resolveremos con la calculadora de WINDOWS, si estn leyendo bien amigos, CON LA CALCULADORA DE WINDOWS resolveremos este dilema del contenido que necesita el KEYFILE Para ser vlido. Vamos y abrimos la calculadora, la pasamos a formato cientfico y seleccionamos el formato Hexadecimal de la misma y ponemos lo siguiente:

Coatepec, Ver. Mxico informes@ccat.edu.mx www.ccat.edu.mx www.x25.org.mx

Seguridad en Software

18

Una vez hecho esto simplemente seleccionamos el formato DEC para pasar ese mismo valor hexadecimal a valores decimales y veamos que nos dice:

NoS podemos dar cuenta que el valor 12h tiene un valor 18 en decimal, mmmm entonces lo que tenemos que hacer segn el cdigo que vemos del crackme es crear un archivo con el nombre de abex.l2c e incluirle dieciocho valores entonces se me ocurre poner: Chilitom3x ccat201 Guardamos el archivo y ..

Ahora si objetivo cumplido, ya vieron que fcil.

Saludos: Rodolfo h-Baz aka Pr@fEsOr X2011 DiciembreCoatepec, Ver. Mxico informes@ccat.edu.mx www.ccat.edu.mx www.x25.org.mx

Vous aimerez peut-être aussi