Karpoff Spanish Tutor 1999-2002

Programa:

Hot Corners v1.85


 

PROTECCION: Name / Serial
Objetivo: Hacer un Keygen
Descripcion: Hot Corners permite que usted rapidamente active o desactive su Screen Saver al mover el ratón a cualquier esquina de su pantalla.
Dificultad: Novato.
DOWNLOAD: http://www.SouthByPC.com
Herramientas: TRW2000, W32dasm
CRACKER: ByTESCRK   FECHA: 25/11/2001

 

 INTRODUCCION

Estas utilerías son muy bonitas, por lo menos a mi me gustan, una de las mejores es SuperCleaner (la manera de generar el serial para ese programa es diferente a la de este).

Este programa lo que hace es como lo detallo en la descripción, vayamos a lo nuestro y empecemos.

Si quieres más información sobre SuperCleaner verifica el tuto de mi buen amigo
CaoS ReptantE de nombre "Parches Inteligentes".

 

 AL ATAKE

Primero carguemos el programa y hagamos clic en el botón Enter Registration y en Name: y Code: Ingresemos los valores que deseemos, hacemos clic en Ok y nos aparece una MessageBox conteniendo el mensaje siguiente

Sorry, you have entered an incorrect registration code.

Salgamos y abramos nuestro W32DASM y veamos los References Strings y busquemos la cadena de texto anterior y caemos aqui...

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004030EF(C) <= Investigamos aqui...
|
:00403137 6A00 push 00000000

* Possible StringData Ref from Data Obj ->"Hot Corners"
|
:00403139 6880B04000 push 0040B080

* Possible StringData Ref from Data Obj ->"Sorry, you have entered an incorrect "
->"registration code."
|
:0040313E 68F0B24000 push 0040B2F0
:00403143 56 push esi

* Reference To: USER32.MessageBoxA, Ord:01C3h
|
:00403144 FF1548914000 Call dword ptr [00409148]
:0040314A B801000000 mov eax, 00000001
:0040314F 5E pop esi
:00403150 81C400020000 add esp, 00000200
:00403156 C21000 ret 0010

Nos vamos a ir a 004030EF y caemos aquí...

* Possible Reference to Dialog: DialogID_006F, CONTROL_ID:03FC, ""
|
:004030CF 68FC030000 push 000003FC
:004030D4 56 push esi
:004030D5 FFD7 call edi
:004030D7 8D442408 lea eax, dword ptr [esp+08]
:004030DB 8D8C2408010000 lea ecx, dword ptr [esp+00000108]
:004030E2 50 push eax
:004030E3 51 push ecx
:004030E4 E857020000 call 00403340 <= Vamos a entrar aqui
:004030E9 83C408 add esp, 00000008
:004030EC 84C0 test al, al
:004030EE 5F pop edi
:004030EF 7446 je 00403137 <= Aqui caemos
:004030F1 8D542404 lea edx, dword ptr [esp+04]
:004030F5 8D842404010000 lea eax, dword ptr [esp+00000104]
:004030FC 52 push edx
:004030FD 50 push eax

* Possible StringData Ref from Data Obj ->"Software\Hot Corners\Configuration"

:00403340 8B4C2404 mov ecx, dword ptr [esp+04] <= Aqui caemos
:00403344 81EC00010000 sub esp, 00000100
:0040334A 8D442400 lea eax, dword ptr [esp]
:0040334E 53 push ebx
:0040334F 50 push eax
:00403350 51 push ecx
:00403351 32DB xor bl, bl
:00403353 E8A8000000 call 00403400 <= Se genera el serial, entramos...
:00403358 8B842414010000 mov eax, dword ptr [esp+00000114]
:0040335F 83C408 add esp, 00000008
:00403362 8D542404 lea edx, dword ptr [esp+04]
:00403366 52 push edx <= Se puede ver el serial correcto (d edx)
:00403367 50 push eax <= Nuestro serial malo (d eax)

* Reference To: KERNEL32.lstrcmpA, Ord:0329h <= El serial se compara en el Kernel32, problemas si queremos parchar
|
:00403368 FF1500914000 Call dword ptr [00409100]
:0040336E 85C0 test eax, eax
:00403370 B001 mov al, 01
:00403372 7402 je 00403376
:00403374 8AC3 mov al, bl

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00403372(C)
|
:00403376 5B pop ebx
:00403377 81C400010000 add esp, 00000100
:0040337D C3 ret

Ahora vayamos a TRW2000 y en el botón Browse seleccionamos el archivo a ejecutar hacemos clic en Load y aparece la ventana de depuración, ahora pongamos un punto de ruptura en 00403400, con Ctrl+N nos aparece la ventana del programa y se quita la de depuración, ingresamos los valores en Name ByTESCRK y Code 19770424 y hacemos clic en Ok, automáticamente nos aparece otra vez la ventana de TRW y empieza el traceo...

:00403400 81EC00010000 sub esp, 00000100
:00403406 A048DA4000 mov al, byte ptr [0040DA48]
:0040340B 53 push ebx
:0040340C 55 push ebp
:0040340D 56 push esi
...
...
:00403429 AA stosb
:0040342A 8B9C2414010000 mov ebx, dword ptr [esp+00000114] <= Nuestro nombre
:00403431 B940000000 mov ecx, 00000040
...
...
:00403446 B86A000000 mov eax, 0000006A <= EAX recibe el valor de 6Ah
:0040344B 8BF1 mov esi, ecx
:0040344D 33C9 xor ecx, ecx
:0040344F 85F6 test esi, esi
:00403451 7E0C jle 0040345F
:00403453 0FBE1419 movsx edx, byte ptr [ecx+ebx] <= Extrae letra por letra
:00403457 41 inc ecx <= Incrementa ECX en 1
:00403458 3BCE cmp ecx, esi <= Compara la longitud del nombre
:0040345A 8D0450 lea eax, dword ptr [eax+2*edx] <= EAX = EAX + EDX * 2
:0040345D 7CF4 jl 00403453 <= Si es menor regresa a 00403453
:0040345F 8B3D98914000 mov edi, dword ptr [00409198]
:00403465 50 push eax
:00403466 8D442414 lea eax, dword ptr [esp+14]
:0040346A 683CB34000 push 0040B33C
:0040346F 50 push eax
:00403470 FFD7 call edi <= Agrega un guión a nuestro número ej. NNNN-
:00403472 83C40C add esp, 0000000C
:00403475 8D4C2410 lea ecx, dword ptr [esp+10]
:00403479 51 push ecx
:0040347A 55 push ebp
:0040347B FF15E0904000 Call dword ptr [004090E0]
:00403481 33C0 xor eax, eax
:00403483 B96A000000 mov ecx, 0000006A <= ECX recibe el valor de 6Ah
:00403488 85F6 test esi, esi
:0040348A 7E0F jle 0040349B
:0040348C 0FBE1418 movsx edx, byte ptr [eax+ebx] <= Extrae letra por letra
:00403490 40 inc eax <= Incrementa EAX en 1
:00403491 8D1492 lea edx, dword ptr [edx+4*edx] <= EDX = EDX + EDX * 4
:00403494 3BC6 cmp eax, esi <= Compara la longitud del nombre
:00403496 8D0C91 lea ecx, dword ptr [ecx+4*edx] <= ECX = ECX + EDX * 4
:00403499 7CF1 jl 0040348C <= Si es menor regresa a 0040348C
:0040349B 51 push ecx
:0040349C 8D442414 lea eax, dword ptr [esp+14]
:004034A0 683CB34000 push 0040B33C
:004034A5 50 push eax
:004034A6 FFD7 call edi <= Agrega un guión a nuestro número ej. 13046-
:004034A8 83C40C add esp, 0000000C
:004034AB 8D4C2410 lea ecx, dword ptr [esp+10]
:004034AF 51 push ecx
:004034B0 55 push ebp
:004034B1 FF15E0904000 Call dword ptr [004090E0] <= Concatena los valores ej. NNNN-13046-
:004034B7 0FBE441EFF movsx eax, byte ptr [esi+ebx-01] <= Extrae la última letra, en mi caso K
:004034BC 8D1480 lea edx, dword ptr [eax+4*eax] <= EDX = EAX + EAX * 4
:004034BF 8D0450 lea eax, dword ptr [eax+2*edx] <= EAX = EAX + EDX * 2
:004034C2 8D542410 lea edx, dword ptr [esp+10] <= EDX recupera el valor 13046-
:004034C6 8D4C0001 lea ecx, dword ptr [eax+eax+01] <= ECX = EAX + EAX + 01
:004034CA 51 push ecx
:004034CB 683CB34000 push 0040B33C
:004034D0 52 push edx
:004034D1 FFD7 call edi <= Agrega un guión a nuestro número ej. 1651-
:004034D3 83C40C add esp, 0000000C
:004034D6 8D442410 lea eax, dword ptr [esp+10]
:004034DA 50 push eax
:004034DB 55 push ebp
:004034DC FF15E0904000 Call dword ptr [004090E0] <= Concatena los valores ej. NNNN-13046-1651-
:004034E2 0FBE4C1EFF movsx ecx, byte ptr [esi+ebx-01] <= Extrae la última letra
:004034E7 8D442410 lea eax, dword ptr [esp+10] <= EAX recupera el valor 1651-
:004034EB 8D148D1D000000 lea edx, dword ptr [4*ecx+0000001D] <= EDX = ECX * 4 + 1Dh
:004034F2 52 push edx
:004034F3 6838B34000 push 0040B338
:004034F8 50 push eax
:004034F9 FFD7 call edi
:004034FB 83C40C add esp, 0000000C
:004034FE 8D4C2410 lea ecx, dword ptr [esp+10]
:00403502 51 push ecx
:00403503 55 push ebp
:00403504 FF15E0904000 Call dword ptr [004090E0] <= Concatena los valores NNNN-13046-1651-329
:0040350A 5F pop edi
:0040350B 5E pop esi
:0040350C 5D pop ebp
:0040350D 5B pop ebx
:0040350E 81C400010000 add esp, 00000100
:00403514 C3 ret



Y aqui tienen el código fuente en MASM...

.386
.model flat,stdcall
option casemap:none

include c:\masm32\include\windows.inc
include c:\masm32\include\user32.inc
include c:\masm32\include\kernel32.inc
includelib c:\masm32\lib\user32.lib
includelib c:\masm32\lib\kernel32.lib

.const

IDD_DIALOG EQU 1000
IDC_NAME EQU 1001
IDC_SERIAL EQU 1002
IDC_GEN EQU 1003
IDC_COPY EQU 1004

DlgFunc PROTO :DWORD,:DWORD,:DWORD,:DWORD
Operacion PROTO
Decimal PROTO
Clipo PROTO hWnd:HWND

.data

nombre db 64 dup(0),0
serial db 8 dup(0),0
nada db 20 dup(0),0
Icono db "keygen",0
Iconimage db "keygen",0
minombre db "ByTESCRK",0
titulo db "Hot Corners v1.85",0
copiado db "¡El serial ha sido copiado al portapapeles!",0
hInstance dd 0
hIcon dd 0
buff db 256 dup(?)
hWnd HWND ?

.code

start:

invoke GetModuleHandle,NULL
mov hInstance,eax
invoke DialogBoxParam,hInstance,IDD_DIALOG,NULL,addr DlgFunc,NULL
invoke ExitProcess,NULL

DlgFunc proc hDlg:DWORD,uMsg:DWORD,wParam:DWORD,lParam:DWORD

.if uMsg==WM_INITDIALOG
             mov eax,hDlg
             mov hWnd,eax
             invoke LoadIcon,hInstance,addr Icono
             mov hIcon,eax
             invoke SendMessage, hDlg, WM_SETICON,1,hIcon
             invoke SetDlgItemText,hDlg,IDC_NAME,ADDR minombre
.elseif uMsg==WM_CLOSE
             invoke EndDialog,hDlg,NULL
.elseif uMsg==WM_COMMAND
             mov eax,wParam
             mov edx,eax
             shr edx,16
             .if dx==BN_CLICKED
                         .if ax==IDC_COPY
                         invoke Clipo,hDlg
                         .elseif ax==IDC_GEN
                         invoke GetDlgItemText,hDlg,IDC_NAME,ADDR nombre,64

                         invoke Operacion

                         .if eax!=1
                                     invoke SetDlgItemText,hDlg,IDC_SERIAL,ADDR serial
                                     invoke SetDlgItemText,hDlg,IDC_NAME,ADDR nombre
                                     invoke Clipo,hDlg
                                     invoke MessageBox,hDlg,ADDR copiado,ADDR titulo,MB_ICONINFORMATION
                                     invoke SetFocus,IDC_NAME
                         .endif
                         ret
                         .endif
         .endif
.endif
ret

DlgFunc endp

Operacion proc

             invoke lstrlen,ADDR nombre ;Contamos el tamaño del nombre
             pushad

             mov edi, offset nombre ;Guardamos el nombre
             mov esi, offset serial ;Se guardará el serial
             mov ebx, eax
             push ebx
             mov dword ptr[esi],4E4E4E4Eh ;Primeros caracteres NNNN
             add esi,3 ;Agrega tres espacios al serial
             jmp enes ;Va a la rutina enes
             mov ecx, 6Ah ;Mueve el valor 6Ah a ECX
             xor eax,eax

paso1:   movsx edx, byte ptr [edi+eax] ;Extraemos letra por letra
             inc eax
             lea ecx, dword ptr [ecx+2*edx]
             cmp eax, ebx
             jl paso1 ;Hasta finalizar

             .if ecx < 3E8h ;Chequeamos el valor para transformar a decimal
                 add esi,2
             .else
                 add esi,3
             .endif

             mov eax, ecx
             invoke Decimal ;Invocamos la rutina Decimal
enes:     add esi,1
             mov dword ptr[esi],2Dh ;Agrega un guión
             pop ebx
             xor eax,eax
             push ebx
             mov ecx, 6Ah ;Mueve el valor 6Ah a ECX

paso2:   movsx edx, byte ptr [edi+eax] ;Extraemos letra por letra
             inc eax
             lea edx, dword ptr [edx+4*edx]
             lea ecx, dword ptr [ecx+4*edx]
             cmp eax, ebx
             jng paso2 ;Hasta terminar

             .if ecx < 2710h
                 add esi,4
             .else
                 add esi,5
             .endif

             mov eax, ecx
             invoke Decimal
             add esi,1
             mov dword ptr[esi],2Dh ;Agregamos otro guión
             pop ebx
             xor eax,eax
             push ebx

             movsx eax, byte ptr [edi+ebx-01] ;Extraemos última letra
             lea edx, dword ptr [eax+4*eax]
             lea eax, dword ptr [eax+2*edx]
             lea ecx, dword ptr [eax+eax+01]

             .if ecx < 3E8h
                 add esi,3
             .else
                 add esi,4
             .endif

             mov eax, ecx
             invoke Decimal
             add esi,1
             mov dword ptr[esi],2Dh ;Otro guión
             pop ebx
             mov eax,1Dh

             movsx edx, byte ptr [edi+ebx-01] ;Extraemos la última letra
             lea ecx, dword ptr [4*edx+eax]

             .if ecx < 3E8h
                 add esi,3
             .else
                 add esi,4
             .endif

             mov eax, ecx
             invoke Decimal

             popad

             ret

Operacion endp

Decimal proc

             xor ebx, ebx
             mov ecx, 10
dividir:
             xor edx, edx
             idiv ecx
             add dl, 30h
             mov byte ptr [esi+ebx], dl
             dec ebx
             .if eax>9
                 jmp dividir
             .endif
             add al, 30h
             mov byte ptr [esi+ebx], al
             ret

Decimal endp

Clipo proc hDlg:DWORD
             LOCAL gmem :DWORD

             invoke GlobalAlloc,GMEM_MOVEABLE+GMEM_DDESHARE,254
             mov gmem,eax

             invoke GlobalLock,eax
             cmp eax,NULL
             je noabra
             mov ebx,offset serial
             lea esi,dword ptr[ebx]
             mov edi,eax
             mov ecx,29

             rep movsb

             invoke OpenClipboard,hDlg
             cmp eax,TRUE
             jne noabra2

             mov eax,gmem
             invoke SetClipboardData,CF_TEXT, eax

             invoke CloseClipboard

noabra2:
             mov eax,gmem
             invoke GlobalFree,eax

noabra:
             ret
Clipo endp

End Start


Ahora ya podemos usar el programa de manera más libre, aunque sin embargo quiero que recuerdes, lo de siempre...

"EL motivo de este tutorial es solo con el fin de conocer la seguridad en ciertos programas de manera educacional y tambien como diversión, si ha USTED, le gusta el producto por favor COMPRELO, algunas veces... los autores merecen su dinero ;o)"

Saludos a mis buenos amigos Karpoff, Pr@fesor_X, CaoS ReptantE (gracias por tus consejos y ayuda en la realización de este tuto) y a todos los crackers hispanohablantes, en especial a ti por que has llegado hasta una vez más hasta aquí.

Si tienes alguna duda o comentario escríbeme a: ByTESCRK@iespana.es

ByTESCRK
 

 

 

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