Karpoff Spanish Tutor 1999-2001

Programa:

TempClean v3.04


 

PROTECCION: Name / Serial, Limitación de Tiempo
Objetivo: Hacer un Keygen
Descripcion: Ver introducción
Dificultad: Novato.
DOWNLOAD: http://alvilim.virtualave.net
Herramientas: TRW2000, W32dasm
CRACKER: ByTESCRK   FECHA: 02/10/2001

 

 INTRODUCCION

En Windows 9x/NT muchos programas usan archivos temporalmente los cuales se quedan muchas veces después de usar el programa. Es por esto que el espacio en el disco duro decrece y el sistema empieza a dar problemas de rendimiento y comunmente disminuye o su sistema puede colgarse de vez en cuando por falta de espacio para el swapfile.

TempClean limpia los directorios temporales o busca por estos archivos en su disco duro, usted no necesita pensar que puede enviar a su papelera de reciclaje. Puede personalizar fácilmente WINDOWS/TEMP, Caché de Internet, Historial de Mis Documentos o cualquier otro directorio que quiera que TempClean limpie, tambien puede personalizarlo para que lo haga al iniciar Windows usted no necesitará estar recordando.

 

 AL ATAKE

Primeramente lo que haremos es analizar el terreno, si ya tenemos instalado el programa nos vamos a cargarlo, nos damos cuenta que al cargarlo aparece en una ventana principal y tenemos un botón de "Register", hacemos clic en él y automáticamente nos aparece otra ventanita en dónde nos pide un Registration name y un Registration key, ingresamos uno cualquiera en mi caso

Registration name = ByTESCRK
Registration key = 12345

Y nos dice "Invalid registration key!" Abrimos el W32DASM y buscamos en las Reference Strings esa frase, al encontrarla y hacer doble clic en ella vemos esto...

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:005636C3(C)
|
:005636E6 8D55F8 lea edx, dword ptr [ebp-08]
:005636E9 8B83DC020000 mov eax, dword ptr [ebx+000002DC]
:005636EF E86089FCFF call 0052C054
:005636F4 8B4DF8 mov ecx, dword ptr [ebp-08]
:005636F7 8B55FC mov edx, dword ptr [ebp-04]
:005636FA 8BC3 mov eax, ebx
:005636FC E8F3000000 call 005637F4     <= Entramos aqui
:00563701 84C0 test al, al
:00563703 7419 je 0056371E
:00563705 8B4DF8 mov ecx, dword ptr [ebp-08]
:00563708 8B55FC mov edx, dword ptr [ebp-04]
:0056370B 8BC3 mov eax, ebx
:0056370D E826020000 call 00563938
:00563712 C7833402000001000000 mov dword ptr [ebx+00000234], 00000001
:0056371C EB1F jmp 0056373D

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00563703(C)
|
:0056371E 6A00 push 00000000
:00563720 668B0D7C375600 mov cx, word ptr [0056377C]
:00563727 B201 mov dl, 01

* Possible StringData Ref from Code Obj ->"Invalid registration key!"
|
:00563729 B8D8375600 mov eax, 005637D8    <= Aqui caemos, investigamos hacia arriba
:0056372E E815B3FEFF call 0054EA48
:00563733 C7833402000002000000 mov dword ptr [ebx+00000234], 00000002


Abrimos el TRW2000 y vamos a cargar el programa, este nos da brinca al momento de cargar el programa, ponemos un punto de ruptura en 005636FC, luego con F8 entramos a la call y caemos aquí...

* Referenced by a CALL at Addresses:
|:0056110E , :005636FC     <= Podemos ver que viene de dos lugares
|
:005637F4 55 push ebp
:005637F5 8BEC mov ebp, esp
:005637F7 51 push ecx
:005637F8 B904000000 mov ecx, 00000004
:005637FD 6A00 push 00000000
:005637FF 6A00 push 00000000
:00563801 49 dec ecx
:00563802 75F9 jne 005637FD
:00563804 874DFC xchg dword ptr [ebp-04], ecx     <= Recibe nuestro serial malo
:00563807 53 push ebx
:00563808 56 push esi
:00563809 894DF8 mov dword ptr [ebp-08], ecx
:0056380C 8955FC mov dword ptr [ebp-04], edx
:0056380F 8B45FC mov eax, dword ptr [ebp-04]
:00563812 E8F506FAFF call 00503F0C
:00563817 8B45F8 mov eax, dword ptr [ebp-08]
:0056381A E8ED06FAFF call 00503F0C
:0056381F 33C0 xor eax, eax
:00563821 55 push ebp
:00563822 681D395600 push 0056391D
:00563827 64FF30 push dword ptr fs:[eax]
:0056382A 648920 mov dword ptr fs:[eax], esp
:0056382D 33DB xor ebx, ebx
:0056382F 8B45FC mov eax, dword ptr [ebp-04]
:00563832 E82105FAFF call 00503D58
:00563837 8BF0 mov esi, eax
:00563839 8B45F8 mov eax, dword ptr [ebp-08]
:0056383C E81705FAFF call 00503D58
:00563841 83F80A cmp eax, 0000000A     <= Compara nuestro serial igual a 10
:00563844 0F85B6000000 jne 00563900
:0056384A 8BC6 mov eax, esi
:0056384C 85C0 test eax, eax
:0056384E 7E13 jle 00563863
:00563850 BA01000000 mov edx, 00000001
:00563855 8B4DFC mov ecx, dword ptr [ebp-04]     <= Nuestro nombre
:00563858 0FB64C11FF movzx ecx, byte ptr [ecx+edx-01]     <= Extrae caracter por caracter
:0056385D 03D9 add ebx, ecx     <= Agregar el valor decimal a EBX
:0056385F 42 inc edx     <= Incrementa EDX en 1
:00563860 48 dec eax     <= Decrece EAX en 1
:00563861 75F2 jne 00563855     <= Ciclo hasta que termine el nombre
:00563863 69C3C06A1200 imul eax, ebx, 00126AC0     <= EAX = EBX * 00126AC0
:00563869 8BD8 mov ebx, eax
:0056386B 8D45F0 lea eax, dword ptr [ebp-10]
:0056386E 50 push eax
:0056386F 8D55EC lea edx, dword ptr [ebp-14]
:00563872 8BC3 mov eax, ebx
:00563874 E8D74AFAFF call 00508350
:00563879 8B45EC mov eax, dword ptr [ebp-14]     <= Muestra el Decimal del pre-serial
:0056387C B903000000 mov ecx, 00000003
:00563881 BA01000000 mov edx, 00000001
:00563886 E8D506FAFF call 00503F60    <= Extrae los primeros tres caracteres
:0056388B FF75F0 push [ebp-10]
:0056388E 8D45E4 lea eax, dword ptr [ebp-1C]
:00563891 8B55FC mov edx, dword ptr [ebp-04]
:00563894 8A12 mov dl, byte ptr [edx]
:00563896 E8E503FAFF call 00503C80
:0056389B 8B45E4 mov eax, dword ptr [ebp-1C]
:0056389E 8D55E8 lea edx, dword ptr [ebp-18]
:005638A1 E80648FAFF call 005080AC     <= Vamos a entrar aqui

Analizando la llamada que se hace arriba podemos notar que el programa compara la
primera letra y dependiendo de su valor decimal lo acondiciona para que sea mayúscula

:005080AC 53 push ebx
:005080AD 56 push esi
:005080AE 57 push edi
:005080AF 8BFA mov edi, edx
:005080B1 8BF0 mov esi, eax
:005080B3 8BC6 mov eax, esi
:005080B5 E89EBCFFFF call 00503D58
:005080BA 8BD8 mov ebx, eax
:005080BC 8BC7 mov eax, edi
:005080BE 8BD3 mov edx, ebx
:005080C0 E87FBFFFFF call 00504044
:005080C5 8BD6 mov edx, esi
:005080C7 8B37 mov esi, dword ptr [edi]
:005080C9 85DB test ebx, ebx
:005080CB 7415 je 005080E2
:005080CD 8A02 mov al, byte ptr [edx]     <= Extrae el primer caracter
:005080CF 3C61 cmp al, 61     <= Compara que no sea minúsculas
:005080D1 7206 jb 005080D9     <= Si no es minúscula brinca
:005080D3 3C7A cmp al, 7A     <= Compara si es minúscula
:005080D5 7702 ja 005080D9     <= Si es otro caracter brinca y da el mensaje chico-malo
:005080D7 2C20 sub al, 20     <= Si es minúscula la cambia a mayúscula
:005080D9 8806 mov byte ptr [esi], al
:005080DB 42 inc edx
:005080DC 46 inc esi
:005080DD 4B dec ebx
:005080DE 85DB test ebx, ebx
:005080E0 75EB jne 005080CD
:005080E2 5F pop edi
:005080E3 5E pop esi
:005080E4 5B pop ebx
:005080E5 C3 ret     <= Regresamos a 005638A6

Regresamos a seguir analizando la manera en que se genera nuestro serial

:005638A6 FF75E8 push [ebp-18]
:005638A9 8D45E0 lea eax, dword ptr [ebp-20]
:005638AC 50 push eax
:005638AD 8D55DC lea edx, dword ptr [ebp-24]
:005638B0 8BC3 mov eax, ebx
:005638B2 E8994AFAFF call 00508350
:005638B7 8B45DC mov eax, dword ptr [ebp-24]     <= Recibe el pre-serial
:005638BA B903000000 mov ecx, 00000003
:005638BF BA04000000 mov edx, 00000004
:005638C4 E89706FAFF call 00503F60     <= Extrae los otros tres caracteres
:005638C9 FF75E0 push [ebp-20]
:005638CC 8D45F4 lea eax, dword ptr [ebp-0C]
:005638CF BA03000000 mov edx, 00000003
:005638D4 E83F05FAFF call 00503E18     <= Une los primeros + la letra + los otros caracteres
:005638D9 8D45F4 lea eax, dword ptr [ebp-0C]
:005638DC 8B4DF4 mov ecx, dword ptr [ebp-0C]

* Possible StringData Ref from Code Obj ->"TC3"
|
:005638DF BA34395600 mov edx, 00563934     <= Obtiene una variable predefinida por el autor
:005638E4 E8BB04FAFF call 00503DA4     <= Une todo transformándolo en TC3???????
:005638E9 8B55F4 mov edx, dword ptr [ebp-0C]
:005638EC 8B45F8 mov eax, dword ptr [ebp-08]     <= Podemos ver el serial correcto en EDX
:005638EF E83048FAFF call 00508124     <= Compara las primeras letras
:005638F4 85C0 test eax, eax
:005638F6 7504 jne 005638FC     <= Si no son iguales da el mensaje chico-malo
:005638F8 B301 mov bl, 01
:005638FA EB06 jmp 00563902     <= Si son iguales continua revisando el resto
:005638FC 33DB xor ebx, ebx
...
...
...
:00563917 E8E001FAFF call 00503AFC
:0056391C C3 ret     <= Retornamos a dar el mensaje de chico-malo

Es bastante notable el hecho de que en las Reference String del W32DASM podamos ver un string
con "Illegal registration name!" y lo siguiente lo vemos aquí...


* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0056363C(C)
|
:005636AB 8B83D8020000 mov eax, dword ptr [ebx+000002D8]
:005636B1 E89E89FCFF call 0052C054
:005636B6 8B45FC mov eax, dword ptr [ebp-04]

* Possible StringData Ref from Code Obj ->"CoKeBoTtLe99"     <= :o) Sin comentarios
|
:005636B9 BA6C375600 mov edx, 0056376C
:005636BE E8A507FAFF call 00503E68
:005636C3 7521 jne 005636E6
:005636C5 6A00 push 00000000
:005636C7 668B0D7C375600 mov cx, word ptr [0056377C]
:005636CE B201 mov dl, 01

* Possible StringData Ref from Code Obj ->"Illegal registration name!"
|
:005636D0 B888375600 mov eax, 00563788
:005636D5 E86EB3FEFF call 0054EA48
:005636DA C7833402000002000000 mov dword ptr [ebx+00000234], 00000002
:005636E4 EB57 jmp 0056373D

Creo que ahora ya puedo formar parte en la lista negra de este autor... ;o)

Hay un momento en el que yo dejé de seguir traceando pues el programa me saco y me dijo que mi serial no era correcto y si se pueden dar cuenta fué al momento de comparar la longitud del serial malo.

Cómo siempre recordarles que "Si les gusta el programa paguen por él" No me hago responsable por el mal uso de este tutorial, el fin principal es "Aprender Más".

Saludos a Karpoff, Profesor_X y a mi buen amigo CaoS ReptantE, por su paciencia para conmigo. Gracias nuevamente a tí por haber llegado hasta esta línea.

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