Crackeando MATLAB 5
student
12 Enero 1998
+Aitor
+cracker
Comentario original de Fravia+
Motxilas

Parte I


by
+Aitor


+Cracker
+HCU Student


WKT
Member

Estoy desconcertado: el nivel de los tutoriales de nuestros compa±eros de clase estß mejorando continuamente, mientras que el nivel de los esquemas de protecci≤n parece
(si es que eso es posible) disminuir... ┐depende ello del hecho de que la mayor parte de los programadores no saben ya (tras tantos a±os de obligada Windows-Lobotomφa) c≤mo funciona el c≤digo? (y quiero decir c≤digo verdadero, poderoso, el ·nico sobre el que sientes pasar lentamente tu mirada :-)
No sΘ, no entiendo.
De cualquier forma estoy contento de albergar este tutorial de nuestro compa±ero de clase +Aitor y estoy TOTALMENTE de acuerdo con su filosofφa:
" Tenemos (ahora) a nuestro objetivo trabajando bien -sin la motxila- pero no estamos satisfechos. Nosotros no queremos crackear este programa, lo estamos haciendo para aprender mßs ... verdadero conocimiento serß nuestra ·nica satisfacci≤n..."
Exactamente +crackers! (y ahora esperemos que los otros tutoriales de +Aitor de una serie de al menos tres arrasen :-)

There is a a crack in everything
That's how the light gets in
Documento original
escrito para Fravia+
Si necesitas mßs
informaci≤n no lo dudes
y visita su web




"Un peque±o tutorial para
mostrar a crackers novatos y
de nivel intermedio c≤mo una motxila
puede ser derrotada fßcilmente"
Nivel
( )Principiante (x)Intermedio ( )Avanzado ( )Experto


Crackeando MATLAB 5
Parte I: Motxila


Introducci≤n
He elegido este programa porque posee tres niveles de protecci≤n:
1) El programa estß protegido con motxila, es decir, una vez instalado no funcionarß si la llave no estß conectada.
2) Con el programa se incluyen *TODAS* las toolboxes (vendidas aparte) pero ello no se menciona en ning·n sitio. Estas estßn incluidas en archivos comprimidos .Z de InstallShield que no se pueden descomprimir con el des-compresor de InstallShield porque estßn *ENCRiPTADOS* ... ... todos los archivos .Z en el CD del Matlab 5 estßn encriptados.
3) Una vez que has construido un peque±o decodificador, y todas las toolboxes prohibidas estßn instaladas aparece un chequeo de licencia ...
Este tutorial (el primero de una serie de al menos tres) trata sobre el primer nivel de protecci≤n ...
Motxila, llave hardware, pastilla de seguridad ... palabras terribles para muchos crackers (principalmente novatos). El objetivo principal de este tutorial es mostrar c≤mo una aplicaci≤n comercial protegida con motxila puede crackearse en menos de un minuto, igual de fßcil que muchos otros productos shareware, y si te das unos segundos mßs de tiempo serßs capaz de crackear el sistema de protecci≤n (probablemente comercial) completo.


Herramientas necesarias

Soft-iCE v3.2 Win95 (con v2.x bastarß; *obligatorio*)
Tu editor hexadecimal favorito (solo necesario para probar los parches)
W32Dasm v8.0 (cualquier versi≤n bastarß; necesario para una aproximaci≤n mßs profunda)

Target's URL/FTP

El programa *NO ES NECESARiO* para seguir los tutoriales. Recuerda, nosotros no somos solamente crackers ... esta serie te ense±arß esquemas de protecci≤n genΘricos, no es mi intenci≤n escribir uno mßs de esos "c≤mo crackear tal aplicaci≤n". De cualquier forma, se trata de software comercial, pero (difφcilmente) disponible en la red si sabes c≤mo buscar.


Historia del Programa

No hay mucho que decir. Un clßsico entre las aplicaciones de cßlculo/programaci≤n, disponible para diferentes sistemas. En mis archivos de software personales (solo con fines educativos :) tengo la versi≤n 3.5f para DOS que data de 1989, entonces se trataba de un paquete que incluφa PC-Matlab y AT-Matlab, con un n·mero de serie como protecci≤n. La ·ltima versi≤n que conozco es el objetivo de este tutorial, un CD-ROM que incluye la versi≤n 5.0 para Win95/NT y la versi≤n 4.2c.1 para Win32s, ambos protegidos con mochila y n·mero de serie.
Si quieres saber mßs sobre este producto contacta con la pßgina Web de The MathWorks o conΘctate a uno de los cientos de sitios relativos a Matlab distribuidos por la red.

Tutorial
+-------------------------------------+ + 1era APROXiMACiON + + Rßpido no-ZEN crack en 1 minuto + +-------------------------------------+
Lo primero que necesitamos es instalar el programa ... una instalaci≤n mφnima serß suficiente.
íA trabajar! Carga Soft-iCE y ejecuta matlab.exe. Inmediatamente el programa te avisa con un mensaje de error: "Error checking out MATLAB". Sin cerrar a·n la ventana de mensaje entra en Soft-iCE y examina la lista de manejadores de ventana, verßs algo como esto: Window Handle hQueue SZ QOwner Class Name Window Proc. ------------- ------ -- ------ --------------- ------------ 0268(1) 262f 32 MATLAB #32770 (Dialog) 17e7:4757 026c(2) 262f 32 MATLAB Button 17e7:102e ... etc.
Sφ, se trata de nuestra ventana de error y su bot≤n de "OK". Hagamos que Soft-iCE interrumpa la ejecuci≤n del programa en el momento en que la ventana de error sea destruida. Hacer esto nos permitirß localizar las instrucciones que hacen aparecer la ventana de error (esto es cierto para el 95% de las protecciones que te puedas encontrar, ┐increφble, no?) solo con PRETear un poco desde Soft-iCE. De acuerdo, coloquemos nuestro PUNTO de RUPTURA:
bmsg 268 wm_destroy
y dejemos correr al programa. Justo despuΘs de pulsar el bot≤n de "OK" Soft-iCE aparece de nuevo:
---USER!GETDLGCTRLiD+0017-------------------------------------- 17e7:4757 push bp 17e7:4758 mov bp,sp 17e7:475a push 4793 ... -------------------------------USER(08)------------------------
Unos cuantos comandos PRET desde aquφ hasta entrar en el c≤digo del programa:
137:41adc0 call 6b093c 137:41adc5 add esp,14 137:41adc8 mov [ebp-20],eax 137:41adcb cmp dword ptr [ebp-20],0 137:41adcf jz 41adff 137:41add1 cmp dword ptr [6ed6f0],0 137:41add8 jz 41addf 137:41adda call 441544 137:41addf push 10 137:41ade1 mov eax,6c1486 137:41ade6 push eax 137:41ade7 mov eax,6c1492 137:41adec push eax 137:41aded push 00 137:41adef call cs:[8d0ae4] ;ventana de error --> 137:41adf6 mov dword ptr [ebp-24],0 ;chico malo 137:41adfd jmp 41ae06 ;largo del programa! 137:41adff mov dword ptr [ebp-24],1 ;buen chico, adelante!
Increible, ┐eh? ┐No lo oyes? ... estß diciendo "crackeame" ;-). No lo pienses dos veces e intenta un parche (no-ZEN) rßpido:
137:41adcf jz 41adff -> 137:41adcf jmp 41adff
DespuΘs de testear el parche en memoria con Soft-iCE (funciona bien), serß fßcil parchear el c≤digo fφsicamente:
MATLAB.EXE, 3.457.536 bytes (peque±ito, ┐eh?) Buscar : 74 2e 83 3d Sustituir : eb -- -- --
Ahora ejecuta el programa y pruebalo con algunos ejemplos y demos, todo funciona perfectamente ... ┐no?

+---------------------------------------------------+ + 2da APROXiMACiON + + Tirando abajo el propio sistema de protecci≤n + +---------------------------------------------------+
Tenemos a nuestra vφctima funcionando perfectamente sin la motxila, pero no estamos satisfechos. Nosotros no queremos crackear el programa, lo estamos haciendo para aprender mßs ... verdadero conocimiento serß nuestra ·nica satisfacci≤n (aparte de destruir Micro$oft y ver a Mr. Bill Fakes crucificado, por supuesto).
Echemos de nuevo una mirada al programa, y veamos con mßs profundidad c≤mo funciona el sistema de protecci≤n. Para hacer esto tendremos que restaurar el ejecutable original matlab.exe sin parchear. Ahora ya estamos listos para comenzar, echemos una ojeada al c≤digo previo a nuestro primer parche:
137:41adb2 push 23 137:41adb4 push dword ptr [ebp-1c] 137:41adb7 push dword ptr [ebp-18] 137:41adba push dword ptr [ebp-14] 137:41adbd push dword ptr [ebp-10] 137:41adc0 call 6b093c 137:41adc5 add esp,14 137:41adc8 mov [ebp-20],eax 137:41adcb cmp dword ptr [ebp-20],0 137:41adcf jz 41adff 137:41add1 cmp dword ptr [6ed6f0],0 137:41add8 jz 41addf 137:41adda call 441544 137:41addf push 10
Presta atenci≤n y dime quΘ puede estar pasando en el c≤digo anterior. Una serie de valores son colocados en la pila, luego se hace una llamada a una rutina, y finalmente el valor devuelto en EAX por esa rutina es usado para chequear nuestro acceso al programa. Coloquemos un punto de ruptura en 137:41adc0 y sigamos la pista a la rutina llamada. DespuΘs de tracear un poco nos vemos aquφ: -->137:94118a push ebp 137:94118b mov ebp, esp 137:94118d push ebx 137:94118e push esi 137:94118f push edi 137:941190 mov eax,[ebp+18] 137:941193 push eax 137:941194 mov eax,[ebp+14] 137:941197 push eax 137:941198 mov eax,[ebp+10] 137:94119b push eax 137:94119c mov eax,[ebp+C] 137:94119f push eax 137:9411a0 mov eax,[ebp+8] 137:9411a3 push eax 137:9411a4 call 941525 137:9411a9 add esp,14 137:9411ac jmp 9411B1 137:9411b1 pop edi 137:9411b2 pop esi 137:9411b3 pop ebx 137:9411b4 leave 137:9411b5 ret 14
Este trozo de c≤digo NO ES del propio MATLAB ... ┐d≤nde puede estar localizado? Echa un vistazo al directorio MATLAB\bin: Directorio de C:\MATLAB\bin BCCENG~1 BAT 1.426 21/11/96 15:58 bccengmatopts.bat BCCOPTS BAT 1.632 21/11/96 15:58 bccopts.bat CMEX BAT 2.274 21/11/96 15:58 cmex.bat FMEX BAT 2.274 21/11/96 15:58 fmex.bat LIBENG DLL 29.696 22/11/96 9:51 libeng.dll LIBMAT DLL 60.416 21/11/96 12:05 libmat.dll LIBMX DLL 40.960 21/11/96 12:05 libmx.dll LIBUT DLL 40.960 21/11/96 12:05 libut.dll MATLAB EXE 3.457.536 06/01/98 7:24 matlab.exe MEX BAT 18.152 21/11/96 15:58 mex.bat MEDIT EXE 144.896 04/12/96 13:43 medit.exe MEXOPTS BAT 1.721 21/11/96 15:58 mexopts.bat MFC42 DLL 1.013.520 21/11/96 12:05 mfc42.dll MIPC50 DLL 248.320 21/11/96 12:05 mipc50.dll MLAPP TLB 2.789 21/11/96 12:06 mlapp.tlb ML_16 DLL 14.708 21/11/96 12:05 ml_16.dll MLPTOOL EXE 42.496 21/11/96 12:05 mlptool.exe MSCTOF DLL 31.744 21/11/96 12:05 msctof.dll MSFOPTS BAT 1.649 21/11/96 15:58 msfopts.bat MSVCEN~1 BAT 1.701 21/11/96 15:58 msvcengmatopts.bat MSVCIRT DLL 74.752 21/11/96 12:05 msvcirt.dll MSVCOPTS BAT 1.599 21/11/96 15:58 msvcopts.bat MSVCRT DLL 267.536 21/11/96 12:05 msvcrt.dll MWOLES05 DLL 43.520 22/11/96 11:51 mwoles05.dll PERL100 DLL 525.312 21/11/96 12:05 perl100.dll PERL EXE 36.352 21/11/96 12:05 perl.exe SHOWDLLS EXE 49.668 21/11/96 12:05 showdlls.exe WATENG~1 BAT 1.701 21/11/96 15:58 watengmatopts.bat WSPTOOL EXE 60.928 21/11/96 12:05 wsptool.exe LICENSE DAT 167 06/01/98 7:24 license.dat W32SSI DLL 66.560 02/04/96 11:01 w32ssi.dll 31 archivo(s) 6.286.965 bytes 2 directorio(s) 46.161.920 bytes libres
La mayorφa de los archivos tienen (mßs o menos) la misma fecha: 21-22/11/96, pero hay 4 que no la tienen:
MATLAB EXE 3.457.536 06/01/98 7:24 matlab.exe MEDIT EXE 144.896 04/12/96 13:43 medit.exe LICENSE DAT 167 06/01/98 7:24 license.dat W32SSI DLL 66.560 02/04/96 11:01 w32ssi.dll
matlab.exe : ejecutable principal, fecha de instalaci≤n medit.exe : Matlab editor/debugger license.dat : fichero ASCii de licencias, fecha de instalaci≤n w32ssi.dll : ┐quΘ demonios puede ser esto?
Coge tu editor hexadecimal favorito, busca nuestro c≤digo y íEUREKA! Para leerlo mejor coge W32Dasm y obtΘn el c≤digo desensamblado (unos 245 Kb):
Exported fn(): wSSIEIni - Ord:000Fh :40118A 55 push ebp :40118B 8BEC mov ebp, esp :40118D 53 push ebx :40118E 56 push esi :40118F 57 push edi :401190 8B4518 mov eax,[ebp+18] :401193 50 push eax :401194 8B4514 mov eax,[ebp+14] :401197 50 push eax :401198 8B4510 mov eax,[ebp+10] :40119B 50 push eax :40119C 8B450C mov eax,[ebp+C] :40119F 50 push eax :4011A0 8B4508 mov eax,[ebp+8] :4011A3 50 push eax :4011A4 E87C030000 call 401525 <--- llamada al sistema de chequeo :4011A9 83C414 add esp,14 :4011AC E900000000 jmp 4011B1 :4011B1 5F pop edi :4011B2 5E pop esi :4011B3 5B pop ebx :4011B4 C9 leave :4011B5 C21400 ret 14 <-------- volvemos a MATLAB
Si la motxila estß instalada esta llamada devuelve EAX = 0. Si no, devolverß EAX = -1 ($FFFFFFFF). El objetivo es claro, ┐no? ... parchearemos esta funci≤n para que siempre devuelva EAX=0. Hay m·ltiples soluciones, por ejemplo:
:40118A 55 push ebp :40118A 33c0 xor eax,eax :40118B 8BEC mov ebp,esp ---\ :40118C c21400 ret 14 :40118D 53 push ebx ---/ :40118E 56 push esi
DespuΘs de probar el parche en memoria con Soft-iCE (funciona perfectamente), serß sencillo parchear el c≤digo fφsicamente:
W32SSi.DLL, 66.560 bytes Buscar : 55 8b ec 53 56 57 8b 45 18 Sustituir : 33 c0 c2 14 00 -- -- -- --
Ahora corre el programa y pruebalo, todo debe funcionar perfectamente ... No nos importa (de momento) quΘ es lo que pasa en el interior de las rutinas de chequeo de hardware, pero si sigues la pista al c≤digo dentro de la DLL te encontrarßs trozos de c≤digo como Θste:
... :401712 push eax :401713 mov eax,80992014 :401718 push eax :401719 push dword ptr [4070A0] :40171F call dword ptr [407050] :401725 mov eax,[4070A0] :40172A push eax :40172B call dword ptr [407054] :401731 mov dword ptr [4070A0],-1 :40173B jmp 40175A :40173D mov ebp,[4076A4] :401743 mov esi,[4076A8] :401749 mov edi,[4076AC] :40174F mov edx,9966 :401754 mov ax,8 :401758 out dx,ax ...
o Θste:
... :40197B mov edx,9966 :401980 sub eax,eax :401982 in ax,dx :401984 cmp ax,9966 :401988 jne 401A67 :40198E in al,dx :40198F cmp al,55 :401991 jne 401A67 :401997 inc edx :401998 in al,dx :401999 cmp al,88 :40199B jne 401A67 :4019A1 mov edx,9964 :4019A6 sub eax,eax :4019A8 in ax,dx :4019AA and eax,FFFF :4019AF mov edx,eax :4019B1 cmp ax,1000 :4019B5 jb 401A67 :4019BB and al,3 :4019BD jne 401A67 :4019C3 mov [4070A4], edx :4019C9 mov byte ptr [4070F1],1 :4019D0 jmp 401A67 ...
material muy interesante, pero no para este tutorial ... tal vez en un futuro :)
Esta segunda aproximaci≤n nos proporciona dos iMPORTANTES ventajas sobre la primera:
1) Nuestra vφctima solo llama a la rutina de chequeo de la motxila una sola vez al arrancar la aplicaci≤n, pero te encontrarßs programas que hacen m·ltiples llamadas desde cualquier sitio y en cualquier momento durante su ejecuci≤n. Un ejemplo de esto podrφa ser AutoCAD 13 de AutoDesk. Su sistema de chequeo es prßcticamente el mismo, llegas a un punto en el que se hace una llamada devolviendo EAX=0 => buen chico, y Θsta es llamada no solo al comienzo, sino varias veces mßs mientras el programa se estß ejecutando. Si tomas como modelo la primera aproximaci≤n para este tipo de programas, tendrßs que parchear *cualquier* referencia que exista a la llamada ...
2) Cuando un programador distribuye parte del c≤digo en DLLs, lo hace con el fin de reducir el tama±o del ejecutable principal liberandole de la carga adicional de rutinas que son usadas solo una o dos veces a lo largo del programa, pero la mayor parte de las veces lo hace para *compartir* rutinas entre diferentes aplicaciones ... teniendo en cuenta la fecha del archivo w32ssi.dll no serφa de extra±ar que nos encontrasemos la misma DLL en otras aplicaciones por ahφ, y de ser asφ nos habrφamos cargado un sistema de protecci≤n comercial ;-).


Notas Finales
Saludos a todos los crackers de Euskal Herria (Pueblo Vasco) ... ... jotake irabazi arte !
(c) 1998 by +Aitor and the +HCU. All rights reserved.
Ob Duh

No me molestarΘ en explicarte que debes COMPRAR este programa si tienes intenci≤n de utilizarlo ... esto no es shareware ;-). Si eres el propietario de una copia legal del programa, ten en cuenta las leyes de tu paφs sobre ingenierφa inversa.


[ Entrada | Documentoz GenΘricoz | WKT TEAM Main Site ]
[ Todo el ECD | x Tipo de Protecci≤n | x Fecha de Publicaci≤n | x orden AlfabΘtico ]