Karpoff Spanish Tutor 1999-2001

Programa:

Todos los de Skylark Utilities


 

PROTECCION: Name / Serial, Limitación de Tiempo
Objetivo: Encontrar un serial válido
Descripcion: Algunas buenas utilerías, en lo personal me gustan Find It y Part It
Dificultad: Aficionado.
DOWNLOAD: Victimas aqui > http://www.skylarkutilities.com
Herramientas: Softice, W32dasm
CRACKER: ByTESCRK   FECHA: 13/10/2001

 

 INTRODUCCION

Ok, en este Octavo tuto, vamos a escoger a una de las victimas, yo he escogido, Clean It v3.02 bastante nuevo, su última versión es del 05 de Octubre de 2,001.

Este programa fué hace ya como año y medio FREEWARE, en sus primeras versiones, luego pasó a ser SHAREWARE, con un precio de $14.95, en lo personal considero que es mucho valor para lo que hace, hay algunos otros que limpian más cosas y dan menos problemas, por ejemplo, la victima que he cedido a mi buen amigo CaoS ReptantE en su tuto sobre "Parche Inteligentes" es uno de los mejores en su género. Pero bueno cada uno le pone un precio a las cosas y el autor de este programa no iba a ser la excepción, sin embargo, en mi caso hubiese preferido que fuera siempre FREEWARE.

Pero pongámonos prestos y dispuestos y vayámonos...

 

 AL ATAKE

De acuerdo ya que tenemos a nuestra victima descargada e instalada, la ejecutamos y nos vamos a Help > Register Info > Enter Keycode... rellenamos las cajas de texto y clic en Register y... nos da el mensaje de error

Today just doesn't seem to be your day!
The Name and/or KeyCode entered is invalid!

Salimos y vamos a desensamblarla con W32DASM, vemos en las Reference Strings por el error y
llegamos a

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0040A35E(C)     <= Investigamos aqui...
|
:0040A3D8 8B560C mov edx, dword ptr [esi+0C]
:0040A3DB 6A30 push 00000030

* Possible StringData Ref from Data Obj ->"Registration Failed"
|
:0040A3DD 68FC764100 push 004176FC

* Possible StringData Ref from Data Obj ->"Today just doesn't seem to be your day!"
|
:0040A3E2 68A4764100 push 004176A4
:0040A3E7 52 push edx

* Reference To: USER32.MessageBoxA, Ord:01BEh
|
:0040A3E8 FF15B4424100 Call dword ptr [004142B4]
:0040A3EE 8B460C mov eax, dword ptr [esi+0C]
:0040A3F1 68810C0000 push 00000C81
:0040A3F6 50 push eax

Al ir a 0040A35E vemos esto...

:0040A352 8BCF mov ecx, edi
:0040A354 8BD8 mov ebx, eax
:0040A356 E8E5000000 call 0040A440     <= Vamos a entrar aqui...
:0040A35B 3BC3 cmp eax, ebx     <= Compara EAX y EBX
:0040A35D 5B pop ebx
:0040A35E 7578 jne 0040A3D8     <= Vamos al mensaje de error si no coinciden
:0040A360 8B5638 mov edx, dword ptr [esi+38]
:0040A363 8B4E44 mov ecx, dword ptr [esi+44]
:0040A366 83C128 add ecx, 00000028
:0040A369 8B420C mov eax, dword ptr [edx+0C]
:0040A36C 8D542418 lea edx, dword ptr [esp+18]
:0040A370 50 push eax
:0040A371 51 push ecx

* Possible StringData Ref from Data Obj ->"Thank you %s for registering my "
                                                               ->"program %s and for helping to "
                                                               ->"support shareware."
|
:0040A372 6828774100 push 00417728
:0040A377 52 push edx

Entrando en la llamada a 0040A440 vemos que aqui es toda la creación y comparación de nuestro serial, si vemos en W32DASM, vemos que hay varios saltos a esta dirección o comprobaciones del serial correcto

* Referenced by a CALL at Addresses:
|:0040106A , :00401735 , :00404462 , :00408327 , :004083F2
|:0040A356
|

:0040A440 83EC18 sub esp, 00000018
:0040A443 A17C774100 mov eax, dword ptr [0041777C]
:0040A448 53 push ebx
:0040A449 55 push ebp
:0040A44A 56 push esi
:0040A44B 8B31 mov esi, dword ptr [ecx]
:0040A44D 57 push edi
:0040A44E 894C2418 mov dword ptr [esp+18], ecx
:0040A452 8944241C mov dword ptr [esp+1C], eax
:0040A456 8D7E28 lea edi, dword ptr [esi+28]
:0040A459 83C9FF or ecx, FFFFFFFF
:0040A45C 33C0 xor eax, eax
:0040A45E 897C2424 mov dword ptr [esp+24], edi
:0040A462 F2 repnz
:0040A463 AE scasb
:0040A464 F7D1 not ecx
:0040A466 49 dec ecx
:0040A467 33ED xor ebp, ebp
:0040A469 8D5C241C lea ebx, dword ptr [esp+1C]     <= Vemos el valor CLN y lo anotamos
:0040A46D 894C2420 mov dword ptr [esp+20], ecx
:0040A471 33FF xor edi, edi
:0040A473 896C2410 mov dword ptr [esp+10], ebp
:0040A477 FF15D4404100 Call dword ptr [004140D4]
:0040A47D 8BC8 mov ecx, eax
:0040A47F 8A06 mov al, byte ptr [esi]
:0040A481 84C0 test al, al
:0040A483 894C2414 mov dword ptr [esp+14], ecx
:0040A487 7415 je 0040A49E
:0040A489 3C2D cmp al, 2D     <= Vamos a forzar a AL para que su valor sea 2D
:0040A48B 7411 je 0040A49E     <= Vamos aqui...
...
...
...
:0040A49E 8A16 mov dl, byte ptr [esi]     <= Caemos aqui
:0040A4A0 46 inc esi
:0040A4A1 80FA2D cmp dl, 2D     <= Vamos a forzar a AL para que su valor sea 2D
:0040A4A4 740A je 0040A4B0     <= Vamos aqui...
:0040A4A6 5F pop edi
:0040A4A7 5E pop esi
:0040A4A8 5D pop ebp
:0040A4A9 8BC1 mov eax, ecx
:0040A4AB 5B pop ebx
:0040A4AC 83C418 add esp, 00000018
:0040A4AF C3 ret     <= Aqui salimos...
:0040A4B0 8A06 mov al, byte ptr [esi]     <= Caemos aqui
:0040A4B2 84C0 test al, al
:0040A4B4 7436 je 0040A4EC
:0040A4B6 3C2D cmp al, 2D     <= Vamos a forzar a AL para que su valor sea 2D
:0040A4B8 7432 je 0040A4EC     <= Vamos aqui...
...
...
...
:0040A4EC 8A06 mov al, byte ptr [esi]     <= Caemos aqui
:0040A4EE 46 inc esi
:0040A4EF 3C2D cmp al, 2D     <= Vamos a forzar a AL para que su valor sea 2D
:0040A4F1 740A je 0040A4FD     <= Vamos aqui...
...
...
...
:0040A4FD 8A06 mov al, byte ptr [esi]     <= Caemos aqui
:0040A4FF 84C0 test al, al
:0040A501 7436 je 0040A539
:0040A503 3C2D cmp al, 2D     <= Vamos a forzar a AL para que su valor sea 2D
:0040A505 7432 je 0040A539     <= Vamos aqui...
...
...
...
:0040A539 8A16 mov dl, byte ptr [esi]     <= Caemos aqui
:0040A53B 46 inc esi
:0040A53C 80FA2D cmp dl, 2D     <= Vamos a forzar a AL para que su valor sea 2D
:0040A53F 740A je 0040A54B     <= Vamos aqui...
...
...
...
:0040A54B 8A06 mov al, byte ptr [esi]     <= Caemos aqui
:0040A54D 84C0 test al, al
:0040A54F 7442 je 0040A593
:0040A551 3C2D cmp al, 2D     <= Vamos a forzar a AL para que su valor sea 2D
:0040A553 743E je 0040A593     <= Vamos aqui...
...
...
...
:0040A593 8B5C2420 mov ebx, dword ptr [esp+20]     <= Aqui caemos
:0040A597 8B742424 mov esi, dword ptr [esp+24]
:0040A59B 8B4C2418 mov ecx, dword ptr [esp+18]
:0040A59F 6A00 push 00000000
:0040A5A1 53 push ebx
:0040A5A2 56 push esi
:0040A5A3 E888000000 call 0040A630     <= Se genera la 1ra parte en HEX
:0040A5A8 3BC7 cmp eax, edi     <= Forzamos a EDI a comparar igual y anotamos el valor de EAX
:0040A5AA 740C je 0040A5B8     <= Vamos a 0040A5B8
:0040A5AC 8B442414 mov eax, dword ptr [esp+14]
:0040A5B0 5F pop edi
:0040A5B1 5E pop esi
:0040A5B2 5D pop ebp
:0040A5B3 5B pop ebx
:0040A5B4 83C418 add esp, 00000018
:0040A5B7 C3 ret
:0040A5B8 8B4C2418 mov ecx, dword ptr [esp+18]     <= Aqui caemos...
:0040A5BC 6A01 push 00000001
:0040A5BE 53 push ebx
:0040A5BF 56 push esi
:0040A5C0 E86B000000 call 0040A630     <= Se genera la 2da parte en HEX
:0040A5C5 3BC5 cmp eax, ebp     <= Forzamos a EBP a comparar igual y anotamos el valor de EAX
:0040A5C7 740C je 0040A5D5     <= Vamos a 0040A5D5
:0040A5C9 8B442414 mov eax, dword ptr [esp+14]
:0040A5CD 5F pop edi
:0040A5CE 5E pop esi
:0040A5CF 5D pop ebp
:0040A5D0 5B pop ebx
:0040A5D1 83C418 add esp, 00000018
:0040A5D4 C3 ret
:0040A5D5 3B5C2410 cmp ebx, dword ptr [esp+10]     <= Compara que EBX sea igual a un byte en
                                                                                              ESP+10 y lo anotamos
:0040A5D9 740C je 0040A5E7     <= Si es igual genera un número para comparar afuera y lo guarda
                                                             en EAX
:0040A5DB 8B442414 mov eax, dword ptr [esp+14]
:0040A5DF 5F pop edi
:0040A5E0 5E pop esi
:0040A5E1 5D pop ebp
:0040A5E2 5B pop ebx
:0040A5E3 83C418 add esp, 00000018
:0040A5E6 C3 ret     <= Sale y va a comparar

Ahora tendremos nuestro serial escrito en nuestras notas, unamóslo todo y veamos que pasa, nos ha dado nuestro mensajito de Registration failed!, debemos recordar como llegamos a conseguir estos datos y fué por medio de 2D veamos que representa 2D en ASCII, al ver vemos que 2D en DEC es 45 y en ASCII representa al signo - o guión, entonces lo que se me ocurre es que separemos estos por medio de guiones el cual quedaría así...

CLN-00000000-00000000-0

Ahora presionamos Register y vemos... en mi caso

"Thank you ByTESCRK for registering my program Clean It and for helping to support shareware."

Este autor utiliza el mismo método de comparación para todos sus programas, lo único que deben tomar en cuenta son los primeros tres caracteres que varian para Clean It es CLN, Part It es PRT, Find It es FND, etc.

Si no quieres irte forzando los valores AL y llegar hasta donde se generan los códigos, cambia con un editor hexadecimal en 0040A48B, escribe esto E903010000 y NOPea el resto, ¿qué cómo calculas los offset?, consiguete un programa de OPCodes, si quieres el que yo uso, enviame un email.

"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 y a todos los crackers hispanohablantes, en especial a ti por que has llegado 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