CURSO DE CRACKEO
"LAS COMPARACIONES NO SIEMPRE SON TAN ODIOSAS"
(DE CAZA CON LA BESTIA)
Está claro que cuando un programa nos pide que introduzcamos un código
para registrarlo, más tarde o más pronto va a tener que hacer una
comparación de lo que se haya introducido con otra cosa. Hay muchas
formas de llevar a cabo este proceso de una forma más o menos
discreta,o dicho de otra manera, se puede hacer bien o mal. En este
detalle radica la debilidad de muchos productos shareware que han sido
ideados sin tener en consideración la existencia de desensambladores o
debuggers. ¿Pereza? ("Agh! Qué palo tener que escribir más código!)
¿Soberbia? (Buaff, si la gente no tiene ni idea, ¿cómo van a descubrir
mi hardcoded serial?) ¿Falta de pericia? ¿o quizássimplemente
desconocimiento de la existencia del arte del crackeo?
El siguiente estudio va a poner en evidencia algunas de las cosas que
no deberían hacerse, al menos para evitar que personas sin
conocimientos como nosotros tengan acceso a aquello que supuestamente
debería estar oculto.
Después de ya algunos años de tradición shareware algunos
programadores no han querido enterarse de queSON altamente
sospechosas instrucciones como :
CALL xxxxxxX ===== Aquí dentro está el tomate!!
TEST EAX,EAX
JNZ (SALTA A MENSAJE ERROR)
o bien:
CMP EAX,EDX ====== El propio "tomate" sin envasar!!!!
JNZ (SALTA A MENSAJE ERROR)
Tomemos una muestra de producto shareware y analicemos sus errores:
http://mirror.direct.ca/pub/simtelnet/win95/util/cline95.zip
COMMAND LINE 95 V.1.0
(Datoda la impresión de que se trata de un buen ejercicio para la
técnica del salto invertido con Wdasm, pero vamos a optar por hacer
uso de "la bestia" :)
Nada más darle al ejecutable una ventana nos invita a registrarnos.
Entramos en el área de registro donde apreciaremos que se nos pide
nombre y código. Lo Rellenamos con cualquier chorrada:
NAME: COCFRIENDS
code: 11991199
Antes dedarle a OK, pasamos a Softice con Ctrl+D y preparamos un par
de breakpoints para detener el proceso en cuanto los datos sean
recogidos:
bpx getwindowtexta (+intro)
bpx getdlgitemtexta (+intro)
Con Ctrl+D regresamos a Windows. Le damos a OK y !!bien!! Estamos en
softice. El break bpx getdlgitemtexta ha sido el triunfador.
En circunstancias normales, le daríamos otra vez a F5 para regresara
Windows para que fuera recogido el segundo campo (un break por cada
campo : nombre, code,..), pero si lo hacemos recibiremos el mensaje de
error. Todo habrá terminado. Ignoro el motivo, pero aquí sólo hay un
sólo break. ¿Acaso sólo pretende leer los datos de un único campo? Da
lo mismo. Continuemos....
El break que nos ha dejado en Softice pero aún no estamos en el código
del programaque nos interesa. Estamos en USER32!. Un toquecito suave
al F12 nos devolverá al sitio desde donde fue llamado. Bien. Ahora ya
estamos en zona interesante:
+++++++++++++++++
* Reference To: USER32.GetDlgItemTextA, Ord:00EDh
|
:0040246C FF1584B24000 Call dword ptr [0040B284] >>Aparecemos aquí
:00402472 6A00 push 00000000:00402474 6A00 push 00000000
:00402476 6805040000 push 00000405
:0040247B BFE0934000 mov edi, 004093E0
:00402480 56 push esi
* Reference To: USER32.GetDlgItemInt, Ord:00ECh
|
:00402481 FF1580B24000 Call dword ptr [0040B280]
:00402487 A3CC924000 mov dword ptr [004092CC],eax
:0040248C 8BD0 mov edx, eax
:0040248E B9FFFFFFFF mov ecx, FFFFFFFF
:00402493 2BC0 sub eax, eax
:00402495 F2 repnz
:00402496 AE scasb
:00402497 F7D1 not ecx
:00402499 49 dec ecx
:0040249A 0FBE05E0934000 movsx eax, byte ptr [004093E0]
:004024A1...
Regístrate para leer el documento completo.