elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Ingeniería Inversa (Moderadores: karmany, .:UND3R:., MCKSys Argentina)
| | |-+  ejemplo de crack(viejo pero bueno)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ejemplo de crack(viejo pero bueno)  (Leído 5,801 veces)
bAd bItE 32
Visitante


Email
ejemplo de crack(viejo pero bueno)
« en: 11 Junio 2003, 18:28 pm »


 El customizer es un programa que sirve para personalizar nuestras aplicaciones, con el podemos cambiar los titulos de las ventanas, las etiquetas, los nombres de los botones de comando etc... Tiene también una función interesante, sobre todo para aquellos programas que al caducar nos dejan el botón de activar la aplicación "apagado", ya que se puede volver a activar por medio de una función del Customiser.

Objetivo: Customiser.
Disponible en : http://www.ozemail.com.au/~wanga
Protección: Caducidad de la versión, la que sirve de base para el articulo, caduca el 1 de septiembre de 1998. Además limita a 30 las acciones que pueden ser grabadas.
Herramientas necesarias:
-Soft-Ice para Windows. (Con el encontraremos las rutinas de protección)
-Editor Hexadecimal. (Para hacer los cambios en el programa)
-W32as. Por si queréis ver el desensamblado (Por curiosidad, no es necesario)

Procedimiento:
Una vez en Windows, y con el Soft-Ice cargado, arrancamos el Customiser, lo primero que nos sale es una pantalla "informativa", con los 3 botones típicos de Continue, Order y Exit, si damos al Continue entramos en el programa, y todo parece ir normal, hasta que al cabo de un rato, o de varias acciones ! FLASH !, la pantalla informativa otra vez, con lo cual está claro que hay que eliminarla para tener un poco de tranquilidad, salimos del programa, para comprobar si es cierto que la versión caduca adelantamos el reloj del sistema hasta una fecha posterior a la de caducidad y corremos el programa, nos sale otra pantalla similar a la anterior en la que el botón continue ha desaparecido y solo quedan el Order y el Exit, o sea que debemos comprar, mal rollo este.
El ataque al programa puede tener distintos enfoques, yo he escogido el siguiente:
Ctrl+D y entramos S-Ice, hacemos un breakpoint en la función que da la
hora local, ponemos BPX GetLocalTime + intro, y hacemos Ctrl+D y volvemos
a Windows, arrancamos Customiser y S-Ice salta, caemos en el Kernel, damos
F12 dos veces y estamos ante el siguiente código del programa:

:0040166D E8D6ED0100              Call 00420448
:00401672 59                      pop ecx
:00401673 817DF8CE070000          cmp dword ptr [ebp-08], 000007CE <--1998
:0040167A 7F2B                    jg 004016A7
:0040167C 817DF8CE070000          cmp dword ptr [ebp-08], 000007CE <--1998
:00401683 7509                    jne 0040168E
:00401685 0FBE55FD                movsx edx, byte ptr [ebp-03]
:00401689 83FA09                  cmp edx, 00000009 <--09 Septiembre
:0040168C 7F19                    jg 004016A7

Vemos que en esta rutina esta el ano y el mes de caducidad de la demo.


:0040168E 817DF8CE070000          cmp dword ptr [ebp-08], 000007CE<-- otra vez 1998
:00401695 7527                    jne 004016BE <-*****
:00401697 0FBE4DFD                movsx ecx, byte ptr [ebp-03]
:0040169B 83F909                  cmp ecx, 00000009 <--- otra vez Septiembre
:0040169E 751E                    jne 004016BE <-*****
:004016A0 0FBE45FC                movsx eax, byte ptr [ebp-04]
:004016A4 48                      dec eax
:004016A5 7E17                    jle 004016BE <-*****

Parece que cambiando los saltos condicionales senalados,la demo no caduca,
pero y la nag-screen de entrada ?.

Seguimos con F10


:004016A7 6A01                    push 00000001
:004016A9 8B1538A34200            mov edx, dword ptr [0042A338]
:004016AF 8B0A                    mov ecx, dword ptr [edx]
:004016B1 FF710C                  push [ecx+0C]
:004016B4 E8D7D90100              call 0041F090 <---Llamada Interesante.
:004016B9 83C408                  add esp, 00000008
:004016BC EB55                    jmp 00401713

Califico a la llamada de interesante, porque es la primera que se produce
después de la comprobación de la fecha, y después de haber fijado los limites
de la demo, y además se repite después de un salto incondicional que salta
la segunda llamada, como si con una ejecución fuera suficiente, esto atrae
mi curiosidad.

:004016BE 6A00                    push 00000000
:004016C0 A138A34200              mov eax, dword ptr [0042A338]
:004016C5 8B10                    mov edx, dword ptr [eax]
:004016C7 FF720C                  push [edx+0C]
:004016CA E8C1D90100              call 0041F090 <---Llamada Interesante.

Seguimos con F10 ejecutando rutina a rutina, hasta situarnos encima de la
llamada a 0041F090, aqui hacemos F8 y vamos paso a paso, y llegamos a la
siguiente porción de código:

|:004016B4   , :004016CA   , :00401B07  <-- 3 Llamadas a la rutina. | :0041F090 55 push ebp :0041F091 8BEC mov ebp, esp :0041F093 81C42CFFFFFF add esp, FFFFFF2C :0041F099 53 push ebx :0041F09A 56 push esi :0041F09B 57 push edi :0041F09C 8B750C mov esi, dword ptr [ebp+0C] :0041F09F 8B5D08 mov ebx, dword ptr [ebp+08] :0041F0A2 B81C9D4200 mov eax, 00429D1C :0041F0A7 E8B4080000 call 0041F960 :0041F0AC 33D2 xor edx, edx :0041F0AE 8915BC104200 mov dword ptr [004210BC], edx :0041F0B4 6A00 push 00000000 :0041F0B6 53 push ebx * Reference To: USER32.EnableWindow, Ord:0000h <--- INTERESANTE NO? | :0041F0B7 E8EC100000 Call 004201A8 :0041F0BC 66C7853CFFFFFF1400 mov word ptr [ebp+FFFFFF3C], 0014 :0041F0C5 56 push esi :0041F0C6 6A00 push 00000000 :0041F0C8 8D8D50FFFFFF lea ecx, dword ptr [ebp+FFFFFF50] El desensamblado está hecho con el Wdasm. por eso tiene las referencias a las llamadas, y los números de linea no coincidiran probablemente con los que encontreis en S-ice, pero para ver el código claro sirven. El código sigue, y se ve con claridad que es la creación de una ventana, ¿Será la nag de entrada?, para comprobarlo, podemos hacer 2 cosas, evitar la llamada a la rutina, que como vemos en la referencia de arriba, ocurre desde 3 sitios, con lo cual hay que anular las 3(mucho trabajo), o bien podemos hacer que la rutina no haga nada una vez llamada (mas interesante), Pues vamos a lo segundo, si ya nos hemos pasado de la linea : :0041F090 55 push ebp <- Comienzo de la rutina. deberemos salir de S-ice y volver a empezar, para detenernos en ella antes de que se ejecute, para ello simplemente hacemos doble click encima, y la dejamos marcada como un Bpx, con lo cual podemos deshabilitar todas las demás y dejar activa esta solo con lo cual al ejecutar el programa se parará en esta linea. Una vez en esta linea, dentro de S-ice, ejecutamos el comando A, para ensamblar instrucciones en memoria.Nos quedara algo asi : 015F:0041F090 <-- introducimos RET, y damos intro, con lo cual la linea del programa quedará: 015F:0041F090 C3 RET Hacemos BD*, para deshabilitar los bpx, y F5 para que siga el programa y comprobar si hemos acertado, ya en Windows vemos que el programa va bien, sin nag, o sea funciona.Ahora debemos hacer el cambio permanente, para ello abrimos el programa con nuestro editor Hexadecimal y buscamos la cadena 558BEC81C42CFFFFFF, si saliera en mas de un sitio, habria que poner mas | bytes hasta que sea única. | C3 <---Este es el que ponemos en lugar de 55. Salvamos el programa una vez hecho el cambio, lo ejecutamos y vemos que efectivamente, la nag ha desaparecido, ahora debemos adelantar la fecha, para ver si la caducidad ha sido eliminada, lo hacemos y comprobamos que funciona, por tanto la primera parte esta hecha. Si seguimos trabajando con el programa, veremos que cuando llevamos hechas una serie de personalizaciones de aplicaciones, que alcancen la cifra de 30, nos sale una pantalla de aviso que nos dice que en la versión demo solo se pueden grabar 30, bueno habrá que investigar un poco. Para ello trabajamos con el programa, grabando todo hasta que nos de el aviso ya que vamos a partir de este aviso para neutralizarlo. Entramos en S-Ice y ponemos un Bpx  MessageBoxExa, salimos a Windows
ejecutamos el programa y activamos la casilla de grabar, damos aceptar y
S-Ice salta, damos F12, volvemos a salir a Windows, con el mensaje de aviso
pulsamos aceptar y de nuevo S-ice salta en :

:0040304A 90                      nop
:0040304B 90                      nop
:0040304C 55                      push ebp    <-- Aquí caemos :0040304D 8BEC mov ebp, esp :0040304F 6A00 push 00000000 :00403051 FF7514 push [ebp+14] :00403054 FF7510 push [ebp+10] :00403057 FF750C push [ebp+0C] :0040305A FF7508 push [ebp+08] * Reference To: USER32.MessageBoxExA, Ord:0000h | :0040305D E8C4D10100 Call 00420226 :00403062 5D pop ebp :00403063 C21000 ret 0010 Es evidente que aqui solo se nos muestra el mensaje, por tanto la comprobación se habrá hecho anteriormente. Seguimos con F10 hasta retornar de la rutina y llegamos a: * Referenced by a (U)nconditional or (C)onditional Jump at Addresses: |:004059B5(C), :004059BB(C) | :004059D1 56 push esi :004059D2 68E4A34200 push 0042A3E4 :004059D7 E88A200100 call 00417A66 <-- Investigamos esta llamada :004059DC 83C408 add esp, 00000008 ya que es la inmediata :004059DF 66C745E80000 mov [ebp-18], 0000 anterior a la del :004059E5 EB2E jmp 00405A15 MsgBox. :004059E7 6A10 push 00000010 * Possible StringData Ref from Data Obj>"The Customiser (Demonstration)"
                                  |
:004059E9 68C4494200              push 004249C4

* Possible StringData Ref from Data Obj ->"You can only store 30 actions "
                                        ->"in the demonstration version."
                                  |
:004059EE 6888494200              push 00424988
:004059F3 6A00                    push 00000000
:004059F5 E852D6FFFF              call 0040304C <-- Aqui llama al MsgBox. :004059FA 66C745E81000 mov [ebp-18], 0010 <- Estamos en este punto Como ya hemos dicho la comprobación debe ser anterior a la llamada al MsgBox, seguimos el listado hacia arriba y vemos una llamada a 00417A66, hacemos como anteriormente, Bpx en la llamada y Ctrl+D para volver a Windows, hacemos como antes intentamos grabar una acción y de nuevo en S-ice en la linea que hemos puesto como Bpx: :004059D7 E88A200100 call 00417A66 Para investigar la rutina hacemos F8 para ir paso a paso y entramos en el siguiente codigo: * Referenced by a CALL at Addresses: |:004059D7 , :0041851F | :00417A66 55 push ebp :00417A67 8BEC mov ebp, esp :00417A69 83C4CC add esp, FFFFFFCC :00417A6C 53 push ebx :00417A6D 56 push esi :00417A6E 57 push edi :00417A6F 8B5D0C mov ebx, dword ptr [ebp+0C] :00417A72 8B7508 mov esi, dword ptr [ebp+08] :00417A75 B8B16A4200 mov eax, 00426AB1 :00417A7A E8E17E0000 call 0041F960 :00417A7F 53 push ebx :00417A80 56 push esi :00417A81 E89E0E0000 call 00418924 :00417A86 83C408 add esp, 00000008 :00417A89 8BF8 mov edi, eax :00417A8B 81FFFFFFFF7F cmp edi, 7FFFFFFF :00417A91 7538 jne 00417ACB :00417A93 56 push esi :00417A94 E8AF0E0000 call 00418948 :00417A99 59 pop ecx :00417A9A 83F81E cmp eax, 0000001E <-- Aqui está la limita- ción a 30 grabaciones, ya que 1Eh="30" decimal. :00417A9D 722C jb 00417ACB <-- Aquí salta si no hemos hecho todavía 30. :00417A9F 6A00 push 00000000 :00417AA1 6A00 push 00000000 :00417AA3 6A00 push 00000000 :00417AA5 6A00 push 00000000 Bueno pues ya está ya hemos encontrado donde se decide si tenemos permiso para grabar mas acciones o si se nos ha acabado el cuento y tenemos que comprar el programa, como la decisión es simple(seguir evaluando sin comprar) entonces debemos cambiar el salto condicional, por uno incondicional, para que salte siempre, con lo cual la limitación de las 30 grabaciones desaparece. Como podeis ver unas veces digo acciones, otras grabaciones otras..., pero es que no se como definirlo exactamente, espero que se me entienda. Bueno una vez encontrado esto solo queda, al igual que antes hacerlo definitivo, cogemos otra vez nuestro editor Hexadecimal y buscamos una cadena de bytes dentro de la rutina que sea única, yo he encontrado que si buscamos la cadena F81E72, solo aparece una vez en el programa, entonces solo queda cambiar el 72 (JB) por EB (JMP) y ya está el crack realizado. :00417A99 59 pop ecx :00417A9A 83F81E cmp eax, 0000001E :00417A9D 722C | EB <--- Este byte sustituye al 72 de arriba. Si quereis finalizar el trabajo, podeis buscar la palabra Demonstration, que aparece en todas las ventanas y eliminarla, esto se puede hacer con el editor Hexadecimal. Como habeis podido ver, el crack no es complicado, pero es bastante completo, ya que tiene limitación de tiempo, Nag-Screen, y está limitado en su funcionamiento. Bueno espero que se entienda bien, ya que se trata del primer articulo sobre cracking que hago, y deseo no haberlo complicado demasiado. De todas formas para los que tienen conocimientos sobre el tema, les pueden parecer un poco infantiles las explicaciones, pero yo recuerdo los primeros artículos que lei y hubiera dado algo en su momento por que me lo hubieran explicado, no dando por entendido que ya conocía muchas cosas, que tenía que ir aprendiendo por otros lados.  escrito por #GaRfiO '98


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines