Sei sulla pagina 1di 19

Introduccin al Cracking en Linux 05 IDA.

Linux Crackme 3 by g30rg3_x (Retos de Yashira.org)


Programa: Descarga:
http://www.yashira.org/ReTos/All/linux_crackme3_251.gz
Programa para comenzar a utilizar IDA sobre wine en Linux y para
Descripcin:
resolverlo profundizaremos en GDB.
Dificultad: Bajsima.
Herramientas: IDA sobre wine, herramientas del sistema y GDB.
Solucionar el crackme, encontrando el serial correcto de diferentes
Objetivos:
maneras.

Cracker: [Juan Jose] Fecha: 29/10/2011

Introduccin:

Despus de varios aos de vagancia, el gusanillo del cracking ha vuelto a renacer (jeje) y me he
decidido a continuar con esta introduccin al Cracking en Linux. Mis motivos son dos; primero,
GNU/Linux es mi sistema operativo, y aunque , el cracking en este sistema no sea muy utilizado, su
estudio me ayuda a profundizar en la shell del sistema y en las grandes herramientas que nos
proporciona; y segundo, estos retos me sirven para encontrar objetivos prcticos a mis ltimas
aficiones, como son la programacin en C y la programacin en BASH, de lo contrario me acabo
cansando de programas sin tilidad y lo dejo :-(.

Respecto a este tutorial, lo voy a dividir en dos partes, en la primera introducir la ltima gran
herramienta que me faltaba por explicar, IDA, sin duda el mejor desensamblador actual y que ha
mejorado mucho como debugger incluso en Linux. Por cierto, aunque hay un IDA para Linux en
este caso vamos a utilizar el IDA 6.1 para windows ejecutndolo con wine, que como todos sabis
es un programa de linux que permite la ejecucin de ejecutables de windows. Solo dar unas ligeras
nociones de instalacin y manejo del debugger; de esta manera el que este interesado pueda
comenzar a descubrir la potencia que tiene esta gran herramienta incluso en linux.
En la segunda parte, vamos a resolver el linux crackme 3 de g30rg3_x, forma parte de los retos de
Yashira ( espero que nadie se ofenda al dar la solucin , pero este crackme me ha dado mucho
juego para lo que yo quera mostrar), tambin os puedo comentar que tanto el linux crackme 1 como
el 2 de Yashira los resolv con IDA (os lo dejo como prcticas para el que quiera empezar a usar
IDA en linux y su debugger); pero el 3 me propuse resolverlo solo con GDB y las herramientas del
sistema. Ya se, soy masoquista!!, pero mi idea de hacerlo con las herramientas que nos da el
terminal de linux al final me ha dado mucha satisfaccin y ese ha sido el motivo de escribir estos
tutoriales, espero que al final estos escritos sean tiles para alguien y sea una ayuda para los que
quieran comenzar con el cracking en linux.

Por cierto, yo lo primero que tuve que hacer es repasar mis anteriores tutoriales; para los que no los
tengan pueden obtenerlos de aqu:

Introduccin al Cracking en Linux 01

http://www.4shared.com/document/MdDtVpY3/Introduccion_al_Cracking_en_Li.html

Introduccin al Cracking en Linux 02

http://www.4shared.com/document/AjNlQnGw/Introduccion_al_Cracking_en_Li.html

Introduccion al Cracking en Linux 03

http://www.4shared.com/document/gjZErfvq/Introduccin_al_Cracking_en_Lin.html

Introduccion al Cracking en Lnux 04

http://www.4shared.com/document/xmTpWtb4/Introduccin_al_Cracking_en_Lin.html

1. IDA 6.1 con Wine.


Primero como es lgico debemos tener instalado en nuestro sistema el programa wine, yo tengo
Debian Squeeze de 64 bits y con el manejador de paquetes de Debian apt-get es as de sencillo:

juanjo@tukan{~}$ su
Contrasea:
root@tukan{/home/juanjo}# apt-get install wine

Eso si, se necesitan privilegios de root, por lo que primero con la orden su obtenemos esos
privilegios pidindonos la contrasea de root . En sistemas que utilicen el comando sudo la orden
seria sudo apt-get install wine e igualmente nos pedirn nuestra contrasea como administrador.

***Por sistema a lo largo de todo este tutorial veris el smbolo # antes de la orden si se necesita ser
root para ejecutarla y el smbolo $ para todas las dems. ***

Para los que no les guste la consola (lo siento pero en este tute os vais a cansar de verla) tambin se
puede utilizar el programa Synaptic, que lo podis encontrar en el men Sistema >
Administracin, os pedir la contrasea de root y desde l podemos instalar wine.

Particularmente, me gusta configurar varias cosas en wine para mejorar el manejo de IDA; para ello
con la combinacin de teclas Alt+F2 nos sale la ventana para ejecutar una aplicacin y ponemos
winecfg,que nos mostrar la configuracin de wine:

Como vemos vamos a emular Windows XP, de momento no es necesario cambiarlo; lo que si
cambiaremos es algunas opciones en la pestaa Grficos:
Aqu podis ver como lo tengo yo, normalmente solo hay que marcar la opcin Emular escritorio
virtual que no viene marcada por defecto. El problema es que cuando utilizamos wine para
ejecutar juegos, lo ideal es que se ejecuten a pantalla completa y no tendramos que marcar esa
opcin; pero muchas veces hay problemas y se nos queda toda la pantalla bloqueada y a la vez todo
el sistema ( ni Alt+F4 nos sirve); por tanto al emular un escritorio virtual, wine sale dentro de una
ventana segn las dimensiones que le demos; por tanto si se bloquea, con cerrar la ventana no
tendremos mas problemas. Por contra, los juegos se ejecutan normalmente en resoluciones de
800x600 y se ven muy pequeos; pero vamos a mi me da el apao.

Respecto a los valores que debemos poner en Dimensiones, en nuestro caso al ser IDA una
ventana que al maximizarla se adapta a las dimensiones mayores que le demos ( no as los juegos)
yo suelo poner una configuracin menor de la que tengo en la pantalla del ordenador, para que se
vea el IDA tan grande como se pueda y siga siendo manejable. Por tanto las dimensiones tenis que
adaptarla a vuestro monitor Ej, En Gnome, que es mi escritorio en Debian, si miramos las
Preferencias de monitor veo que mi monitor su resolucin es 1440x900; despus venan
1360x768 (que no me gusto) y la siguiente 1152x864 fue la que puse en winecfg.

Ahora ya estamos preparados para instalar IDA; si tenemos un instalador con ejecutarlo
normalmente se proceder a su instalacin, pues por defecto los archivos exe sera wine el
responsable de ejecutarlo; si no fuera as, desde una consola en la carpeta donde este el instalador
solo tenemos que ejecutar wine instalador.exe para que se ejecute. A veces este ltimo mtodo
es el mejor, pues vemos los errores que nos pueda dar y adems me he encontrado juegos que de
esta manera funcionan y ejecutndolos desde el explorador No. Curioso?.

Si el instalador ha funcionado sin problemas ( he probado para el tute la versin free de IDA y no he
podido instalarla ) nos dejara unos accesos directo en el men Aplicaciones > Wine desde donde
podemos ejecutar IDA.

En mi caso, he probado la versin 6.1 de Ida Pro que venia en un archivo comprimido (;-)), por lo
que solo descomprimindolo en una carpeta es suficiente. Lo bueno de IDA es que es un programa
que no necesita ningn framework ni archivos especiales del sistema, por eso funciona tan bien con
wine, todo lo que necesita esta en la carpeta del programa. Normalmente IDA se instala en Linux en
la carpeta que crea wine en nuestra home, en mi caso mov la carpeta a esa zona para que fuera mas
estandar:

Como veis la carpeta es .wine, por lo que al comenzar por un punto es una carpeta oculta, para verla
en el navegador por defecto de gnome, Nautilus, debemos dar a Ctrl+H. Ahora ya podemos entrar
en la carpeta y vemos que wine emula un sistema windows con su disco C ( una carpeta llamada
drive_c) y en su interior un sistema bsico con las carpetas windows, users y Archivos de
programa, siendo esta ltima donde pone el instalador la carpeta que nos interesa.
En mi caso , la puse yo y como no tenia accesos directos, ejecute el archivo idag64.exe para
comenzar a trabajar con IDA. Pens que era el necesario porque mi sistema era de 64, pero al usarlo
vi que no depende del sistema sino del archivo que vamos a analizar, siendo posible con el
idag64.exe abrir tanto archivos de 32 como de 64, pero no se puede abrir un archivo de 64 bits con
el idag.exe pues nos da este error:

La nica diferencia es el archivo DataBase que se guardan al final, los de idag64.exe su extensin
es .i64 y los de idag.exe son el clsico .idb.

Por tanto en este caso, el ideal seria utilizar idag.exe, as que lo ejecuto directamente desde el
explorador y nos salta un error:

Este error ya lo comento Ricardo Narvaja en sus grandes tutoriales sobre IDA, para solucionarlo
tenemos que tocar uno de los archivos de configuracin de IDA, que como nos dice el error est en
la carpeta cfg y se llama idagui.cfg, para ello solo tenemos que editarlo ( en Gnome se utiliza gedit)
e ir a la linea 254 y ponerle delante dos barras // para que no de mas problemas. Adems, ya que
estamos en este archivo buscamos la opcin DISPLAY_PATCH_SUBMENU = NO ( linea 50
), por defecto en IDA no aparece en el men las opciones para parchear nuestro ejecutable; pero
como a nosotros lo de parchear ejecutables lo llevamos en la sangre, debemos cambiarlo de esta
forma: DISPLAY_PATCH_SUBMENU = YES, guardamos el archivo y volvemos a iniciar
idag.exe.

Ahora ya no aparece el error, sale la pantalla de bienvenida, y en seguida sale la pantalla para poder
continuar con un trabajo anterior o comenzar el anlisis de un nuevo ejecutable:
Le damos a New y nos aparece la pantalla de seleccin del tipo de ejecutable que vamos a
estudiar:

En este caso nos interesa la pestaa Unix, donde seleccionamos la primera opcin de un
ejecutable normal elf y le damos OK. De esta forma sale el explorador para buscar el archivo con el
que vamos a trabajar:

Seleccionamos el archivo linux_crackme3 y le damos a Abrir.


Marcamos Analisis options y damos a Siguiente>

En este caso dejamos las opciones por defecto, si quisiramos despus cambiar algo se podra hacer
en el men Options > General, pestaa Analysis. Continuamos con Siguiente>
Marcamos Start analysis now y terminamos. Ahora ya solo hay que esperar a que termine el
anlisis, lo comprobaremos por encontrarnos la luz de la derecha del men en verde:
Ahora ha llegado el momento de ver el desensamblado y estudiar como funciona el crackme.
Como ya he comentado esto lo haremos en la segunda parte con otras herramientas, ahora vamos a
ver como podemos ejecutar el debugger remoto en linux. Para ello vamos al men Debugger >
Select debugger... o F9 y nos sale las opciones que nos ofrece:

Vamos a ver las dos opciones Remotas, yo la que mas he utilizado es Remote Linux debugger y
funciona bastante bien, pero actualmente al profundizar en GDB tambin he podido ver que el
Remote GDB debugger parece una buena opcin, aunque tengo que empezar a utilizarlo para
valorarlo a fondo.

Remote Linux debugger:

Para ambos debugger remotos su funcionamiento es similar, hace falta un servidor que sirve el
programa y un debugger cliente que nos lo presenta a nosotros. Para IDA (y tambin para GDB, ya
lo veremos en la segunda parte) el programa a estudiar debe localizarse tanto en el servidor como
en el cliente.

De esta manera podemos debuggear un programa que este en otro ordenador, tanto en la red local
como en otro maquina en internet; aunque para esto ltimo habra que abrir los puertos necesarios
en los router y en las maquinas que se vean involucradas
En nuestro caso vamos a realizarlo en la misma maquina, usando localhost como Hostname de
modo que tanto el servidor como el cliente se ejecutan en el mismo SO.

1 Ejecutamos el servidor.

Dejamos de momento el programa en IDA pendiente de seleccionar el tipo de Debugger ( imagen


anterior) y nos vamos a la carpeta de instalacin de IDA, que en mi caso es:

/home/juanjo/.wine/drive_c/Archivos de programa/ida61/

All encontramos los servidores linux ( marcados en verde):

Hay que tener en cuenta que para programas de 32 bits utilizaremos el linux_server y para
programas de 64 bits utilizaremos linux_server64. En nuestro caso debemos utilizar linux_server,
y para saber sus opciones podemos utilizar la opcin -?

juanjo@tukan{~/.wine/drive_c/Archivos de programa/ida61}$ ./linux_server -?


IDA Linux 32-bit remote debug server(ST) v1.14. Hex-Rays (c) 2004-2011
Error: usage: ida_remote [switches]
-p... port number
-P... password
-v verbose

Como vemos hay pocas opciones, la mas interesante para darle un poco de seguridad en un caso
real, sera ejecutarlo con la opcin -Pcontrasea (si os fijais no hay espacio entre la P y la
contrasea para que sea correcto) y despus en la ventana de conexin de IDA debemos poner la
misma contrasea.

Por tanto en nuestro caso hay que ejecutarlo sin ninguna opcin, vemos la imagen de la primera vez
que lo ejecute:

Lo pongo, por si a alguien le da el mismo error que a mi, Permiso denegado, que sepa que es
debido a que el archivo no tiene permiso de ejecucin. Por tanto con darle ese permiso con la orden
chmod +x linux_server lo tenemos listo para ejecutarlo. Los programas que estn fuera del
PATH en linux se ejecutan de esta manera: ./linux_image, eso si estando en su misma carpeta.

Como vemos el programa tiene como puerto por defecto 23946 y en ese puerto se queda esperando
(Listening) las peticiones del cliente, ahora es cuando hay que ejecutar el cliente desde IDA.
Lo que vemos debajo de ================= se producir cuando acepte la conexin del cliente
( en este caso desde localhost) y la peticin del Serial: es parte de la ejecucin del crackme y
como vemos en estos casos remotos de programas que se ejecutan en el terminal, los datos que nos
pida el programa se observan en la consola donde se ejecuta el servidor, no nos lo pedir el
debugger cliente (IDA).

2. Ejecutamos el cliente.

Cuando nos pide seleccionar un debugger, marcamos Remote Linux debugger y damos a OK:
Nos sale un aviso, que nos explica los peligros que puede tener ejecutar un programa, ya sabis
cuidado con la viruta :-)

Le decimos Yes y ahora nos salen las opciones del debugger:

Es interesante marcar las dos primeras, para que el debugger pare al empezar y en el entry point del
programa. Le damos a OK y ya nos sale la pantalla para conectarse al servidor:
Como veis en Hostname hay que poner Localhost y el puerto se deja el que sale por defecto,
23946; le damos a OK y se intentara conectar.

En este punto puede saltar un error si como yo, estaba intentando utilizar el linux_server64 para un
programa de 32 bits:

Como ahora, utilizo el correcto, pues continuamos:

Como ya he comentado, hay que tener una copia del ejecutable en la maquina remota; en este caso
IDA te avisa y lo soluciona moviendo el ejecutable a la carpeta donde se ejecuta el servidor:

/home/juanjo/.wine/drive_c/Archivos de programa/ida61/linux_crackme3

Le damos a Yes y ahora si que sale el IDA transformado en debugger:


Ahora si que podemos comenzar a poner breakpoint y ver como se ejecuta el proceso; solo tened en
cuenta que si le damos para que corra el proceso con F9, nos pueden saltar excepciones que habr
que valorar:

Al principio suelen ser excepciones que no tienen importancia, y por tanto debemos conseguir que
el IDA no pare y el programa contine su ejecucin. En este caso, IDA nos da la solucin:
En esta ventana vamos a aprovechar para evitar que nos de mas problemas, para eso le damos a
Change exception definition:

Esta es la forma que esta definida, pero a nosotros no nos interesa que pare el programa, as que
debemos demarcar la opcin de Stop program y si queremos, le decimos que cuando pase sea la
aplicacin la que se encargue de la excepcin, marcando Pass to aplication. De todos modos, si
queremos volver a analizarla, se pueden ver en Debugger Options > Edit exceptiones.
Ahora ya podemos continuar dndole a Yes en la primera ventana.

Por cierto, si alguna vez veis que el programa se esta ejecutando sin ver ningn cambio, hay que
fijarse en esta zona:

Como veis el programa esta corriendo y seguramente, como me paso en este caso, debemos de
mirar el terminal donde se ejecuta el servidor porque nos esta pidiendo el serial:

Ponemos el serial y continuamos en IDA. En este caso se cierra el proceso y acabamos con el
debugger.

Remote GDB debugger

En este caso tambin tenemos un servidor y un cliente, para servidor se utiliza el gdbserver,
programa que se suele instalar con gdb ( #apt-get install gdb ) y nos va a servir para presentar el
programa, de modo que se queda escuchando en un puerto a la espera que un cliente, en este caso es
IDA pero tambin puede ser GDB (lo veremos en la siguiente parte) se conecte por ese mismo
puerto y comencemos el proceso de depuracin.

1 Ejecutamos el servidor.

Vamos a ejecutar gdbserver con las opciones necesarias para despus conectarnos con IDA; por
tanto vamos a ver cuales son su opciones bsicas:
juanjo@tukan{~}$ gdbserver --help
Usage: gdbserver [OPTIONS] COMM PROG [ARGS ...]
gdbserver [OPTIONS] --attach COMM PID
gdbserver [OPTIONS] --multi COMM

COMM may either be a tty device (for serial debugging), or


HOST:PORT to listen for a TCP connection.

Options:
--debug Enable general debugging output.
--remote-debug Enable remote protocol debugging output.
--version Display version information and exit.
--wrapper WRAPPER -- Run WRAPPER to start new programs.
Report bugs to "<http://www.gnu.org/software/gdb/bugs/>".

Como vemos en nuestro caso la opcin es - - remote-debug y debemos dar un HOST:PORT que
debern coincidir con las que pongamos en el cliente.
Tambin hay que mover la aplicacin que vamos a estudiar a donde se ejecute el servidor, como el
terminal por defecto siempre comienza en mi Home (~), es all donde pongo una copia de
linux_crackme3; /home/juanjo/linux_crackme3

Ahora ya podemos ejecutar el servidor de esta manera:

Como vemos localhost sera la direccin del host, si fuera una direccin ip nos llevara a la
maquina correspondiente, y el puerto 2345 es el puerto que gdbserver utiliza por defecto y que no
vamos a cambiar.

2 Ejecutamos el cliente.

Volvemos a IDA con el crackme cargado y como hemos utilizado ya el debugger remoto de linux,
debemos cambiarlo, para ello vamos al men Debugger > Switch debugger... donde nos aparece la
ventana para selecionar el debugger y marcamos la opci de Remote GDB debugger:
Le damos a OK y nos aparece la ventana de conexin, donde solo tenemos que rellenar el hostname
y el puerto con los valores que ya conocemos:

Con estos valores, le damos OK y se carga el debugger de IDA, que nos avisa que el programa ya
esta en ejecucin y por tanto para depurarlo tenemos que engancharnos (attach) a l:

Seguimos con Yes y ya estamos preparados, como nos dice IDA:

De esta manera tenemos el IDA unido de forma remota (aunque en este caso no hemos salido de la
misma maquina) a gdbserver.
Si continuamos el proceso con F9, en este caso si nos avisa que esta Running y que por tanto en la
ventana donde esta el gdbserver nos esta pidiendo el Serial:

Si miramos el terminal donde corre gdbserver vemos que nos da mucha informacin de la
comunicacin y al final nos esta pidiendo el serial, le ponemos un valor cualquiera y vemos que el
programa de esta manera termina de forma correcta:

En este momento IDA vuelve a aparecer como desensamblador y gdbserver vuelve a estar a la
escucha esperando una nueva conexin:

Con esto acabo con IDA, mi idea era explicar lo mas detallado posible el manejo de IDA como
debugger, para empezar a utilizarlo en Linux y poder poco a poco sacarle todo el partido a esta
gran herramienta.

En la siguiente parte, que al alargarse tanto este comienzo con IDA, sera la Introduccin al
Cracking 06, vamos a resolver el crackme con el debugger por defecto de GNU/linux, GDB y
todas las posibilidades que nos da la shell de Linux, Bash.

Cualquier comentario a cvtukan(arroba)gmail.com o en la lista de Crackslatinos.

http://groups.google.com/group/CrackSLatinoS

Potrebbero piacerti anche