El Cracking en Windows

Iniciado por ARGVC, 20 Junio 2007, 09:32 AM

0 Miembros y 1 Visitante están viendo este tema.

ARGVC

¡¡¡ IMPORTANTE !!!

Si no tienes claro el crack en DOS incluidas las instrucciones en ensamblador vas a perder el tiempo leyendo esta página, te aconsejo que comiences la casa por los cimientos. No se puede construir un tejado donde no hay algo que lo sujete. Una vez que se tienen los conocimientos necesarios para crackear en DOS, resulta muy fácil hacerlo en windows (aunque parezca una paradoja), ya que disponemos de herramientas más potentes que nos facilitan y reducen mogollón el trabajo. En cambio, es imposible crackear en windows sin conocimientos básicos de ASM. No creas que esto del crackeo es cosa de unos minutos ni que siempre se localiza lo que andamos buscando. Ten siempre una copia de seguridad de tus datos más importantes, los cuelgues son habituales y después de unos cuantos siempre se pierde algo importante por el camino.

UNA NOTA CURIOSA

Sabéis que para crackear en DOS es imprescindible estar familiarizado con las interrupciones (o tener un buen manual de consulta), bien pues olvidaros de ellas en windows. El crackeo en este entorno requiere del conocimiento de las API's (o un buen manual de consulta). Sólo cuando se rueda un programa de dos en windows es útil el tema de las interrupciones.

Cuando desensambléis el código de lo que sea en windows observaréis que siendo un entorno de 32 bits la memoria continua estando segmentada. No se a que es debido ésto, pero supongo que será en previsión a la demanda de memoria que tendrán los programas dentro de poco tiempo. De todos modos podréis comprobar que los segmentos son increiblemente grandes, Windows asigna a cada aplicación en ejecución la friolera de 4 gigabytes. Aunque no se disponga de tanta memoria, el entorno hace uso de la memoria virtual para ello, de tal modo que si rodamos 10 aplicaciones es como si tuvieramos 40 Gigas de ram.

También podréis observar que algunos registros llevan una E delante, este es el caso de

AX-BX-CX-DX-SI-DI-BP-SP-IP

que se convierten en

EAX-EBX-ECX-EDX-ESI-EDI-EBP-ESP-EIP

Los registros son los mismos solo que en lugar de ser de 16 bites son de 32 y, por supuesto, podemos utilizarlos como más nos convenga.


SOFTICE... (nuestra arma más poderosa. Alguien lo denominó 'La Bestia')

Con este programa se hacen maravillas que hace unos años eran inimaginables cuando se crackeaba en DOS. Antes, para crackear una protección no demasiado complicada, era necesario tracear el código durante días entreros, saltando mil y una instrucción anti-traceo (int 3 a punta pala, modificacion de las direcciones  de retorno, etc). Ahora y con la ayuda de este poderoso programa se puede interrumpir la ejecución de cualquier cosa en el momento que nos interese. Para ello es necesario saber en qué lugar o momento hay que poner un BP (break point o punto de ruptura).

Si has llegado hasta aquí, pensaré que tienes los conocimientos necesarios para poder saltarme la explicación de algunas cosas (de lo contrario necesitaría muchisimo espacio web y mogollón de curro para poder explicarlo todo). Por este motivo centraré esta página en el uso de softice, y que mejor forma de empezar que con una correcta...


CONFIGURACION DE SOFTICE

El primer paso, después de la instalación es editar el archivo "winice.dat" y quitarle el punto y coma al menos a las siguientes lineas

EXP=c:\windows\system\kernel32.dll
EXP=c:\windows\system\user32.dll
EXP=c:\windows\system\gdi32.dll


Esto nos permitirá interceptar las llamadas de las funciones mas importantes.

En la linea PHYSMB=XX cambiar XX por el número de megabytes de memoria ram que tengais disponible.
En la línea DRAWSIZE=XXXX cambiar XXXX por el número de Kb. de memoria de video que tengais.
En esta otra INIT="X;" podréis personalizar el arranque del softice intercalando entre INIT=" y X;" lo siguiente
LINES ?;
donde "?" es el número de lineas que queremos que tenga la pantalla (60 es una buena cantidad)
CODE ON;
esto permite que a la izquierda del código podamos ver, en modo hexadecimal, los bytes que componen cada instrucción
WC ?
"?" = número de lineas que queremos que muestre el código.
WR
nos mostrara el el estado de los registros.
La linea deberia de quedar así (más o menos):
INIT="code on;lines 60;wr;wl;wc 30;X;"


Winice.dat debería quedar más o menos así
CitarNMI=ON
SIWVIDRANGE=ON
LOWERCASE=OFF
MOUSE=ON
NOLEDS=OFF
NOPAGE=OFF
PENTIUM=ON
THREADP=ON
VERBOSE=ON

PHYSMB=128
SYM=1024
HST=256
DRAWSIZE=8192
TRA=8

INIT="CODE ON;LINES 60;WC 30;WD 20; WW 10;WATCH EAX;WATCH *EAX;WATCH EBX;WATCH *EBX;"
INIT="WATCH EDX;WATCH *EDX; X;"

F1="h;"
F2="^wr;"
F3="^src;"
F4="^rs;"
F5="^x;"
F6="^ec;"
F7="^here;"
F8="^t;"
F9="^bpx;"
F10="^p;"
F11="^G @SS:ESP;"
F12="^p ret;"
SF3="^format;"
CF8="^XT;"
CF9="TRACE OFF;"
CF10="^XP;"
CF11="SHOW B;"
CF12="TRACE B;"
AF1="^wr;"
AF2="^wd;"
AF3="^wc;"
AF4="^ww;"
AF5="CLS;"
AF8="^XT R;"
AF11="^dd dataaddr->0;"
AF12="^dd dataaddr->4;"
CF1="altscr off; lines 60; wc 32; wd 8;"
CF2="^wr;^wd;^wc;"

EXP=c:\windows\system\kernel32.dll
EXP=c:\windows\system\user32.dll
EXP=c:\windows\system\gdi32.dll
EXP=c:\windows\system\comdlg32.dll
EXP=c:\windows\system\shell32.dll
EXP=c:\windows\system\advapi32.dll
EXP=c:\windows\system\msvbm50.dll

WDMEXPORTS=OFF
MONITOR=0
; WINICE.DAT
; (SIW95\WINICE.DAT)
; for use with SoftICE Version 3.2 (Windows 95)
; 14 July 1997
; *************************************************************************
; If your have MORE than 32MB of physical memory installed, change
; the PHYSMB line to the correct # of Megabytes.
; If you have LESS than 32MB you can save a bit of memory by
; specifying the correct # of Megabytes
; Example: PHYSMB=32
; *************************************************************************
; ***** Examples of sym files that can be included if you have the SDK *****
;    Change the path to the appropriate drive and directory
;LOAD=c:\windows\system\user.exe
;LOAD=c:\windows\system\gdi.exe
;LOAD=c:\windows\system\krnl386.exe
;LOAD=c:\windows\system\mmsystem.dll
;LOAD=c:\windows\system\win386.exe
; ***** Examples of export symbols that can be included *****
;    Change the path to the appropriate drive and directory
;EXP=c:\windows\system\vga.drv
;EXP=c:\windows\system\vga.3gr
;EXP=c:\windows\system\sound.drv
;EXP=c:\windows\system\mouse.drv
;EXP=c:\windows\system\netware.drv
;EXP=c:\windows\system\system.drv
;EXP=c:\windows\system\keyboard.drv
;EXP=c:\windows\system\toolhelp.dll
;EXP=c:\windows\system\shell.dll
;EXP=c:\windows\system\commdlg.dll
;EXP=c:\windows\system\olesvr.dll
;EXP=c:\windows\system\olecli.dll
;EXP=c:\windows\system\mmsystem.dll
;EXP=c:\windows\system\winoldap.mod
;EXP=c:\windows\progman.exe
;EXP=c:\windows\drwatson.exe
; ***** Examples of export symbols that can be included for Windows 95 *****
;    Change the path to the appropriate drive and directory
;EXP=c:\windows\system\shell232.dll
;EXP=c:\windows\system\comctl32.dll
;EXP=c:\windows\system\crtdll.dll
;EXP=c:\windows\system\version.dll
;EXP=c:\windows\system\netlib32.dll
;EXP=c:\windows\system\msshrui.dll
;EXP=c:\windows\system\msnet32.dll
;EXP=c:\windows\system\mspwl32.dll
;EXP=c:\windows\system\mpr.dll

Con esta pequeña modificación ya estamos preparados para utilizarlo. Resetea el ordenador para que la nueva configuración tenga efecto.

Si ya lo tenemos instalado, el siguiente paso es probarlo, así que Ctrl+D para entrar y F5 para salir... que... ¿funciona?... bien ahora vamos a aprender a utilizarlo.


ARGVC

Observar los registros

Entrar en softcite Ctrl+D y escribir "D EAX". En la ventana de datos aparecerá el contenido en ascii del registro EAX. Hacer la misma prueba con el resto de registros y observareis que la ventana cambia indicandonos lo que hay en cada uno de ellos pero ojo, no nos enseña lo que hay en EAX sino lo que hay en el lugar al que apunta EAX, si EAX=04043567 estaremos viendo los datos que hay en la posición de memoria 04043567.
Si hacemos "D *EAX" softcite cojerá el valor de los primeros 4 bytes a los que apunta EAX y nos enseñará lo que hay en esa dirección. Se que es un poco lioso pero hacer pruebas hasta que comprendáis lo que está sucediendo.
Veamos un ejemplo práctico:
Supongamos que en la ventana de registros observamos que EAX = 0050F608
entonce, si hacemos "D EAX" veremos que la ventana de datos apunta a la dirección 0050F608 y veremos los bytes que contiene. Estos pueden ser por ejemplo 11-01-00-00-FF-FF-FF-FF etc...
Ahora vamos a hacer "D *EAX" ¿ que hace softice ? pues carga los primeros cuatro bytes (11-01-00-00), los coloca en orden inverso (00-00-01-11) y nos muestra el contenido de esta dirección (00000111). ¿ lo habeis entendido ?. Este dato es muy importante ya que las funciones son llamadas pasandoles como parámetros una dirección concreta y otras veces son llamadas diciendoles en qué dirección se encuentra la dirección donde están los datos. Sería como decir "la dirección es 00000111" y "la dirección se encuentra donde apunta EAX"
Se que es un poco complicado pero practicar con esto hasta que entendáis este detalle y no paséis a otro punto hasta tenerlo bien claro.

Break Point

El break point (bp) hay que entenderlo como un lugar (el que a nosotros nos interese) donde haremos que el programa se detenga y softice nos de el control enseñandonos el código desensamblado o descompilado. Para hacer una prueba sobre esto hacer lo siguiente:

1.- Dentro de windows pulsar Ctrl + D para entrar en softice
2.- Escribir "BPX GETWINDOWTEXTA"
acabamos de decirle que cuando se ejecute la función de capturar el texto de una ventana interrumpa ese programa y nos de el control.
3.- Salir de softice con F5
4.- Ejecutar cualquier programa que tenga una ventana donde se escriba alguna cosa (digamos, por ejemplo, la introducción de un número de serie)
5.- Escribir lo que sea y pulsar aceptar.
6.- Si en este momento estáis dentro de softice es que vuestro bp ha funcionado, si no es así es que el programa que habeis arrancado no utiliza "getwindowtexta" para la captura de texto, así que probar con "getwindowtext", "getgdlgitemtexta" o "getdlgitemtext".
7.- Estamos antes de que el programa capture el texto que hemos introducido, para que termine la función y saber quien la ha llamado pulsar F12 y F12 otra vez.
8.- Ahora estamos después del código que ha capturado el texto introducido... y a partir de este momento hay que trabajarselo.
9.- A partir de aquí, el programa hará una serie de comprobaciones de la cadena introducida. Esta comprobación varía dependiendo del programador que ha hecho la aplicación. Es posible que realice varias operaciones con  el valor de cada byte que compone la cadena (sumas, restas, multiplicaciones, operaciones XOR, Etc.) y lo compare con el número que se supone es el adecuado (de aquí que varios números de serie sean validos para registrar un mismo programa). También es posible (aunque rara vez sucede) que se compruebe la cadena con otra cadena (la buena) en cuyo caso veremos la buena y la introducida por nosotros en la memoria, no estarán muy alejadas la una de la otra. En cualquier caso, despues de la comparación siempre hay una instrucción que nos envía al código que continua la ejecución normal del programa o nos tira a la calle en caso de que la comparación no sea la adecuada. Estas instrucciones son mas o menos así:

cmp dword ptr tal_y_cual, pascual       compara un número con otro
je 00123456                                       salta al código bueno si es igual
jmp 00345678                                    salta al código de tirarnos a la calle


Es lógico pensar que si variamos la instrucción je 00123456 por jne 00123456 ó jmp 00123456 el código se ejecutará como si el programa fuera legal o registrado y no importa el tipo de protección que tenga, nos da lo mismo que sea un disco llave, una mochila o un número de serie. Da lo mismo el tipo de protección que utilice el programador y lo sofisticada que ésta sea, a nosotros nos importa un pepino, tan solo tenemos que dar con la instrucción que la comprueba y parchearla.

Podemos poner un BP en cualquier función de las API's de Windows. Las que capturan el texto introducido en una ventana son:

BPX GETWINDOWTEXT
BPX GETWINDOWTEXTA (para la versión de 32 bites)
BPX GETDLGITEMTEXT
BPX GETDLGITEMTEXTA (para la versión de 32 bites)


Hay que tener en cuenta que cuando softice detiene la ejecución del programa por el BPX nos encontraremos ANTES DE QUE ESTA FUNCION SE EJECUTE, así que tendremos que pulsar F12 para ejecutarla y ver quien la ha llamado ya que la comparación se efectuará después. Este fundamento es la base para destripar cualquier protección del tipo nº de serie. Os aseguro que una vez comprendido el mecanismo es muy fácil saltarse la mayoría de estas protecciones, tan sólo tendremos que dar con el fragmento de código que realiza esta tarea..

Puntos de ruptura importantes

Además de los puntos de ruptura ya comentados y dependiendo del comportamiento de la aplicación, podemos probar los siguientes:

    Supongamos que despues de introducir un número de serie no válido nos sale una ventan advirtiendonos de ello, bien pues deberemos detener el programa en algún sitio, así que porbaremos con alguna de estas funciones:

MESSAGEBEEP
SENDMESSAGE
MESSAGEBOX
SHOWWINDOW
GETPRIVATEPROFILESTRING
GETPRIVATEPROFILEINT
HMEMCPY


Es importante observar el comportamiento de cada programa para meterle mano por un sitio u otro. Colocando un BPX en la función que utilice el programador para mostrarnos el mensaje de error (tendremos que probarlas todas) estaremos en la parte del código que ya HA HECHO la comprobación de la protección, con lo que estaremos muy cerca del código que deberemos parchear, sólo tendremos que tener en cuenta que éste código está detras de lo que estamos traceando. Para no perdernos sobre un millón de paradas que nos hará Softice sobre las funciones interceptadas, hay que colocar los BPX SOLAMENTE antes de que el código llame a la función en el momento oportuno, o sea, que no hay que colocar los BPX antes de rodar la aplicación, hay que ponerlos en el preciso instante en el que sabemos que va a ser llamada para comprobarla. Supongamos que rodamos la aplicación y estamos sobre la ventana de introducción del numerito, pues introducimos el numerito y antes de pulsar sobre el botón de aceptar es cuando colocamos el BPX, de esta forma sabemos que softice dentendrá la aplicación en el momento que a nosotros nos interesa.

COMANDOS DEL SOFTICE

:pera ver el resto del tut este es el link

autor: Crack El Destripador

AndyArmin

Hola argvc, ¿Con esta configuración del winice.dat me rulará el SICE en Xp professional?.

Por cierto, que debugger me recomiendas Ollydbg o SoftIce.
Te lo pregunto porque recientemente he empezado con el tutorial de Ricardo Narvaja y sólo llevo las 10 primeras lecciones, por lo que no se si pasarme a tu tutorial o seguir con el de Ricardo.... aunque si el cuerpo aguanta CON LOS DOS!!!!! ;D ;D ;D

ARGVC

bueno,,
no podría recomendarte en base a decir si es uno mejor k el otro, pero si me pides a mi una respuesta, lo ideal sería que más o menos puedas manejar los dos o por lo menos saber lo básico del softice y manejar bien el Olly. te estoy dicendo que uses el Olly para que puedas manejarte por ahora, te va a alcanzar y sobrar en lo k hagas.

bueno sobre si te va  a andar, de lo que estoy seguro es que ande la versión del softice que se describe en este post y te lo muestra con un videotut...

http://foro.elhacker.net/index.php/topic,160341.0.html

ahora que hay otras versiones una de numega y otra de compuware que esas no me han andado, pero no estoy diciendo que no corran para xp. debe ser cuestión de configurar.

Por cierto en estos tutoriales que puse de Crack EL Destripador, se manejan con el softice, pero igualmente hay tantos otros al igual que el de ricardo narvaja para uso de Olly.

chau.

byebye

CitarPor cierto, que debugger me recomiendas Ollydbg o SoftIce.

bueno yo personalmente te recomiendo el olly, mas que nada por la comodidad y que es un buen depurador. yo usaba el softice probe 1 vez el olly por verlo y tampoco me convencia mucho y despues ya me puse con el y la verdad que es un pedazo de herramienta.

AndyArmin

Pues creo que me voy a decidir por el Olly y seguir con el tute de Ricardo. Gracias a los dos. ;D

genarotx

Cita de: argvc en 20 Junio 2007, 19:54 PM
bueno,,
no podría recomendarte en base a decir si es uno mejor k el otro, pero si me pides a mi una respuesta, lo ideal sería que más o menos puedas manejar los dos o por lo menos saber lo básico del softice y manejar bien el Olly. te estoy dicendo que uses el Olly para que puedas manejarte por ahora, te va a alcanzar y sobrar en lo k hagas.

bueno sobre si te va  a andar, de lo que estoy seguro es que ande la versión del softice que se describe en este post y te lo muestra con un videotut...

http://foro.elhacker.net/index.php/topic,160341.0.html

ahora que hay otras versiones una de numega y otra de compuware que esas no me han andado, pero no estoy diciendo que no corran para xp. debe ser cuestión de configurar.

Por cierto en estos tutoriales que puse de Crack EL Destripador, se manejan con el softice, pero igualmente hay tantos otros al igual que el de ricardo narvaja para uso de Olly.

chau.

hola argvc...........te agradezco mucho x el aporte............ya me volvia loco de andar buscandolo.............chidisimo x ti!!!!!!!!!!!!!!!!

Shaddy

Cita de: Dr. Catz en 20 Junio 2007, 23:03 PM
Pues creo que me voy a decidir por el Olly y seguir con el tute de Ricardo. Gracias a los dos. ;D

OllyDBG, OllyDBG y OllyDBG no busques más, no hay más. Que digas iDA o Olly vale, pero Softice? esta completamente desactualizado, antes se utilizaría el windbg o el syse que el sice, y ring0 no lo necesitas para absolutamente casi nada, ring3 te sobra, OllyDBG es la mejor herramienta sin duda.

http://shaddy.co.nr/OllyDBG.rar

Salu2..
"Si buscas resultados diferentes, no hagas siempre lo mismo" (Albert Einstein)

http://abssha.reversingcode.com
http://www.reversingcode.com