Karpoff Spanish Tutor 1999-2001

Programa:

Helpburger v1.58-R1 B32


 

PROTECCION: Serial
Objetivo: Obtener un serial válido, Crear un loader
Descripcion:
Un programa que permite la creación de archivos de ayuda de Windows
Dificultad: Novato
DOWNLOAD: http://www.langdaledesigns.co.uk/hb/hb_setup.exe
Herramientas: OllyDBG, W32DASM, Princess Sandy
CRACKER: ByTESCRK   FECHA: 18/11/2001

 

 INTRODUCCION

 Hola, ¿como están?, habia pensado hacer un cuarto tutorial, sin embargo, no sobre esto, pero debido a que deseo aclarar algunas dudas, de que hacer respecto a algunas situaciones que a veces surgen, como por ejemplo: ¿qué hacer si ingresamos un serial y el programa no dice si es bueno o malo, si no que sigue siendo “sin registrar”?, es debido a eso que ha surgido este tuto y la forma de crackeo que yo en lo personal llamo "la puerta trasera".

 

 AL ATAKE

  

Antes que nada vamos a empezar cargando el OllyDB, este programa es muy sencillo y fácil de usar,
algunas ya se habrán preguntado, ¿por qué usa el solo programas para windows?, ¿por qué creen?,
por que mi sistema operativo es Windows Millennium y por no estar reinstalando mi software a cada
momento, es por eso que lo uso. Pero bueno volvamos a lo nuestro estre programa es muy intuitivo,
seguramente sus autores habrán pasado algún tiempo diseñando su protección, la cual no explicaré,
puesto que aún no entiendo aún a cabalidad, sin embargo, hay algunos puntos que no consideraron.

Teclas de ayuda para OllyDBG

F2 = Poner y quitar un punto de ruptura
F7 = Entrar en una call
F8 = Tracear paso a paso
F9 = Tracear al final
Enter = Entrar en la call sin tracer

Analizando a nuestra victima

Cargamos el programa y presionamos F4, se abren nuestras opciones, hacemos clic en la pestaña Registration

1.- Ingresamos un nombre por ejemplo ByTESCRK en la casilla Copyright Message
2.- Ingresamos un número de serie por ejemplo 123456
3.- Clic en Ok y no nos dice nada, al ir a Help > About... vemos que sigue sin registrar

¿Qué buscar?

Al usarlo nos damos cuenta que no activa, la casillo No Splash screen. Vamos a la ayuda y vemos los
beneficios por ser usuarios registrados.

Benefits of Registration

Unlocked features - When you register Helpburger, you will be emailed a registration code which you enter
into the Helpburger registration options screen. This code unlocks the restrictions in the trial version :

· No limit on number of help topics - the trial version is limited to a maximum of 20 topics in a help
project. With the registered version, you can have as many topics as you like

· Your title and copyright message in your finished help file. The trial version uses fixed messages.
Registering makes your finished help files look more professional.

· Automatic replacement of abbreviations as you type - saving a lot of your time as you can automatically
insert frequently used words and phrases into your help file with less typing and less mistakes (see options).
This feature is similar to Microsoft Word's 'Autocorrect' feature.

· Improved options and preferences selection - including the option of disabling the splash screen when the
program starts, and you gain complete control over your help file source by being able to fine tune the help
project source-code before it is converted to a help file.


Y en especial cuando creamos nuestro archivo de ayuda sale un título "Created by an unregistered version of Helpburger", odio eso. Ok estos son los puntos que atacaremos, pero en especial uno el de usuario registrado, entonces empecemos.

Decompilamos el programa en W32DASM y una vez su código pueda verse, buscamos la cadena “unregistered”, viendo en las Reference Strings encontramos una y arriba otra que dice “ Registered”, hacemos doble clic
sobre ella.

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004859C7(U)
|
:004859F2 E8654D0000           call 0048A75C    
<-Vamos a poner un punto de ruptura aquí
:004859F7 84C0                        test al, al   
<- Si al = 0
:004859F9 7431                         je 00485A2C   
<- al = 0 entonces ir a 00485A2C
:004859FB 8D55EC                  lea edx, dword ptr [ebp-14]
:004859FE 8B45FC                  mov eax, dword ptr [ebp-04]
:00485A01 8B80D8020000       mov eax, dword ptr [eax+000002D8]
:00485A07 E8A4A8FAFF          call 004302B0
:00485A0C 8D45EC                  lea eax, dword ptr [ebp-14]

* Possible StringData Ref from Code Obj ->" Registered"   
<- Caemos aqui, investigamos para arriba.

:00485A0F BAAC5A4800               mov edx, 00485AAC
:00485A14 E85FE3F7FF                call 00403D78
:00485A19 8B55EC                         mov edx, dword ptr [ebp-14]

Aquí debiera de aparecer el código del “ Unregistered”, pero ha sido omitido.

Entrando en la llamada vemos lo siguiente...

* Referenced by a CALL at Addresses:
|:0047AAD6 , :0047B3BC , :0047E9DD , :0047FC7E , :004859F2
|:004862D2 , :0048BDED , :0048BE06 , :0048C813 , :0048E9BD
|:0048F50C
|
:0048A75C 55                    push ebp
:0048A75D 8BEC               mov ebp, esp
:0048A75F 51                     push ecx
:0048A760 C645FF00        mov [ebp-01], 00

* Possible StringData Ref from Code Obj ->"HB4"
<- Algo así como un tipo de Service Pack
|

:0048A764 B990A74800            mov ecx, 0048A790
<- Recibe el valor HB4
:0048A769 8B152C894900        mov edx, dword ptr [0049892C]
:0048A76F A128894900            mov eax, dword ptr [00498928]
<- Lleva nuestro serial malo
:0048A774 E8A7AAFFFF         call 00485220
<- Entramos aqui
:0048A779 84C0                         test al, al
:0048A77B 7404                         je 0048A781
:0048A77D C645FF01                mov [ebp-01], 01

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0048A77B(C)
|

:0048A781 8A45FF mov al, byte ptr [ebp-01]
<- Si deseamos crackearlo cambiemos esto por B00190
:0048A784 59           pop ecx
:0048A785 5D           pop ebp
:0048A786 C3           ret

Pero, como nuestra intención es encontrar el serial correcto entramos a la llamada en 0048A774 y encontramos
esto, la rutina de generación del serial.

* Referenced by a CALL at Address:
|:0048A774
|

:00485220 55                          push ebp
:00485221 8BEC                     mov ebp, esp
:00485223 83C4E8                 add esp, FFFFFFE8
:00485226 894DF4                 mov dword ptr [ebp-0C], ecx
:00485229 8955F8                  mov dword ptr [ebp-08], edx
:0048522C 8945FC                 mov dword ptr [ebp-04], eax
:0048522F C645F300             mov [ebp-0D], 00
:00485233 837DF800             cmp dword ptr [ebp-08], 00000000    
<- Verifica que no sea nulo
:00485237 7427                      je 00485260    
<- Si el serial es nulo brinca a 00485260
:00485239 8B55F4                 mov edx, dword ptr [ebp-0C]
:0048523C 8B45F8                 mov eax, dword ptr [ebp-08]
:0048523F E8B0FDFFFF      call 00484FF4    
<- Esta es la rutina de generación del serial
:00485244 8945E8                 mov dword ptr [ebp-18], eax    
<- Aqui ya nos aparece el serial en eax
:00485247 33D2                     xor edx, edx
:00485249 8B45FC                 mov eax, dword ptr [ebp-04]    
<- Recibe nuestro serial
:0048524C E8032EF8FF      call 00408054    <- Aqui chequea nuestro serial
:00485251 8945EC                 mov dword ptr [ebp-14], eax
:00485254 8B45EC                 mov eax, dword ptr [ebp-14]
:00485257 3B45E8                 cmp eax, dword ptr [ebp-18]    
<- Compara los dos seriales
:0048525A 7504                     jne 00485260    
<- Si no son iguales brinca a 00485260
:0048525C C645F301            mov [ebp-0D], 01    
<- Si brinca no guarda el valor 1 en ebp-0D
:00485260 8A45F3                 mov al, byte ptr [ebp-0D]    
<- Si ha brincado ebp-0D = 0
:00485263 8BE5                      mov esp, ebp
:00485265 5D                          pop ebp
:00485266 C3                          ret    
<- Retorna con al = 0 si el serial es malo o al = 1 si es bueno

Al momento de estar en 00485244 podemos hacer clic en EAX en los registros al lado superior derecho y
presionar enter, veremos el valor que tiene EAX en mi caso es igual a 017273??h o lo que es igual a
decir 242777??d

CREANDO EL LOADER

Primeramente bajarnos el programa Princess Sandy de Eminence, luego vamos a cargarlo, sabemos que la dirección que tenemos que modificar es 00485260, cargamos el programa y nos pide el nombre del programa que queremos parchar, al nosotros asignárselo ya podemos ver la ventana principal del programa, luego hacemos clic en el botón Add Item, nos aparece otra ventanita, ingresamos la dirección 00485260, la instrucción original en HEX (8A45F3), luego nuestra instrucción a modificar siempre en HEX (B00190), clic en Add y si ya no vamos a parchar en BUILD, nos pedirá el nombre el programa loader, hacemos clic en Guardar y listo, nuestro loader ha sido creado y tendremos una versión registrada hasta que esta cambie (si entramos en la call de la generación del serial podemos ver HB, HB2, HB3, HB4, SR, vemos la evolución del programa y que las rutinas de generación están enlazadas). Recuerden que es mejor un serial que un parche o que un loader pues con un serial podemos ingresarlo una y otra vez si el autor del programa no lo cambia, pero tenemos que estar creando un parche para cada nueva versión del programa al no tener este y eso nos hace más difícil la vida.

Asi tambien quiero invitarlos a que puedan considerar otras herramientas, como por ejemplo, el ScAEvoLa's PatchEngine v1.33, Topo, VeoVeo (para activar las casillas deshabilitadas), ya que este es un programa que se presta para muchas cosas.

Eso es todo, ahora ya hemos generado nuestro propio serial o nuestro keygen, antes que nada no está demás decirles que

 

"Si les gusta el programa paguen por él"

No me responsabilizo por el mal uso de este tutorial, el fin principal es "Aprender Más".

Un saludo para Karpoff, CaoS_Reptante, Profesor X y a todos los crackers hispanohablantes.

 

Karpoff Spanish Tutor: Pagina dedicada a la divulgacion de informacion en Castellano, sobre Ingenieria Inversa y Programacion. Email "Colabora con tus Proyectos"
www.000webhost.com