Lo primero que haremos sera ejecutar el programa
e intentar registrarnos.
Para registrar el programa, pulsar el boton "I" y la opcion
Enter Registration Key donde se pedira:
Enter Your Name: Mr.Grey
Enter Your Company: Jumanji
Enter Registration Key: 3007199
El campo Registration Key solo admite hasta 7 digitos.
El valor introducido, puede ser cualquiera.
Pulsar el boton OK.
Nos saldra una ventana con un mensaje de error, "WRONG Key has been
entered...Cannot unlock 4Screens".
Apuntar este mensaje.
Arrancar el W32Dasm y desensamblar una copia del fichero 4Screens.exe.
Una vez terminado el proceso, salvar el proyecto para no tener que desensamblarlo
otra vez.
Pulsar el menu Refs / String Data References, aparecera una ventana
con todos los strings que el W32Dasm considera como tales. Buscar el mensaje
que nos aparecio al intentar registrar el programa.
Una vez que lo hayamos localizado, pulsar un doble click sobre la linea
y nos situaremos automaticamente en la linea que contiene dicho mensaje.
Pulsar sobre el boton Close de la ventana SDR.
Nos encontraremos en el siguiente punto:
* Referenced by a (U)nconditional or (C)onditional
Jump at Address:
|:004013D5(C)
|
:004014B4 6A00 push 00000000
:004014B6 6A00 push 00000000
* Possible StringData Ref from Data Obj ->"WRONG
Key has been entered...cannot "
....................................... ->"unlock
4Screens."
|
:004014B8 682CF14200 push 0042F12C <--Aparecemos
aqui
:004014BD E81F930100 call 0041A7E1
Como podemos ver, aqui llegamos desde un salto condicional en la linea
:004013D5.
Vayamos hasta esta parte del codigo:
* Referenced by a (U)nconditional or (C)onditional
Jump at Address:
|:004013AB(C)
|
:004013C3 33C0 xor eax, eax
:004013C5 EB05 jmp 004013CC <-- Salto incondicional
* Referenced by a (U)nconditional or (C)onditional
Jump at Addresses:
|:004013A7(C), :004013B7(C)
|
:004013C7 1BC0 sbb eax, eax
:004013C9 83D8FF sbb eax, FFFFFFFF
* Referenced by a (U)nconditional or (C)onditional
Jump at Address:
|:004013C5(U)
|
:004013CC 33C9 xor ecx, ecx
:004013CE 85C0 test eax, eax
:004013D0 0F94C1 sete cl
:004013D3 84C9 test cl, cl
:004013D5 0F84D9000000 je 004014B4 <-- Salto
al mensaje de error
Aqui podemos ver que hasta la linea :004013CC viene desde un
salto incondicional situado en la linea :004013C5 y a la linea :004013C3
desde un salto condicional en la linea :004013AB.
Esta parte del codigo es la que nos interesa:
* Referenced by a (U)nconditional or (C)onditional
Jump at Address:
|:004013C1(C)
|
:0040139F 8A10 mov dl, byte ptr [eax] <--
Esto es importante
:004013A1 8A1E mov bl, byte ptr [esi] <--
Esto es importante
:004013A3 8ACA mov cl, dl
:004013A5 3AD3 cmp dl, bl
:004013A7 751E jne 004013C7
:004013A9 84C9 test cl, cl
:004013AB 7416 je 004013C3 <-- Salto condicional
:004013AD 8A5001 mov dl, byte ptr [eax+01]
:004013B0 8A5E01 mov bl, byte ptr [esi+01]
:004013B3 8ACA mov cl, dl
:004013B5 3AD3 cmp dl, bl
:004013B7 750E jne 004013C7
:004013B9 83C002 add eax, 00000002
:004013BC 83C602 add esi, 00000002
:004013BF 84C9 test cl, cl
:004013C1 75DC jne 0040139F
En la linea :0040139F, es donde empieza realmente la comprobacion
del numero de registro, asi que pasaremos al SoftIce y pondremos un BreakPoint
en la linea :0040139F.
Para ello, arrancaremos el Symbol Loader del SoftIce y cargaremos
el fichero 4Screens.exe mediante el menu File / Open Module,
despues pulsaremos en el menu Module / Load.
Apareceremos en la pantalla tipica del SoftIce.
Aqui pondremos el siguiente BreakPoint:
bpx 0040139F
Pulsar F5 para volver al programa y pedir otra vez la opcion
de registrar el programa.
Entrar los campos y pulsar el boton OK.
Saltaremos al SoftIce, justo en la linea en la que pusimos el BreakPoint.
En este punto, miramos el contenido del registro EAX y ESI,
podremos ver el numero de registro real:
d EAX <-- Nuestro numero = 3007199
d ESI <-- Numero real = 3370776
Ahora ya podemos desactivar el BreakPoint que teniamos, escribiendo:
bd 00
y pulsar F5 para volver al programa.
Una vez en el programa, escribir el codigo real y ya esta registrado.
NOTA: Para este programa, da igual lo que se ponga en los campos
del registro.
Siempre es el mismo numero de registro.
Un saludo,
Mr Grey
|