TORN@DO presents: cRACKER's n0TES

Tips & Trucos para crackear ' Programas' Visual Basic



Crackeando Visual Basic (Eternal Bliss)
M�TODOS de COMPARACION

En Visual Basic, hay m�s de 8 m�todos de comparaci�n disponible que el autor puede usar para verificar el serial/c�digo correcto. Yo voy a mencionar s�lo 8 porque son los m�s f�ciles y los m�s factibles. Los m�s comunes de los 3 son:

1) COMPARACION de STRING

En este m�todo de comparaci�n, un string p.ej "Contrase�a Correcta" es comparado a la contrase�a introducida en la caja de texto p.ej "Contrase�a introducida".

El tipo de datos String consiste en una sucesi�n de caracteres continuos que representan a los caracteres mismos en lugar de a sus valores num�ricos. Un String puede incluir letras, n�meros, espacios, y puntuaci�n. El tipo de datos String puede guardar strings de longitud fija que van en longitud desde 0 a aproximadamente 63K caracteres y strings din�micos que van en longitud de 0 a aproximadamente 2 mil millones de caracteres.

El c�digo en VB ser�:

If "Contrase�a Correcta" = "Contrase�a introducida."
Then 	<--Comparaci�n Directa de 2 Strings 
GoTo Correct Message 
Else 
GoTo Wrong Message 
End if

B�sicamente, esta es considerada la forma m�s simple de comparaci�n usada por los esquemas de protecci�n. Puede ser f�cilmente usado para romper en Softice cuando el autor usa esta funci�n.

Breakpoints disponibles incluye:
i)
__vbastrcomp o __vbastrcmp <--Posiciones para la Comparaci�n de STRing

Nota: �Si est�s crackeando un programa VB6, tienes que agregar msvbvm60 delante de los dos puntos de ruptura!.
ej. bpx msvbvm60!__vbastrcomp o bpx msvbvm60!__vbastrcmp

ii) Buscando por una combinaci�n de bytes espec�fica (visto en el ensayo 59 de Sandman)
56,57,8b,7c,24,10,8b,74,24,0c,8b,4c,24,14,33,c0,f3,66,a7

2) COMPARACION de VARIANTES

En este m�todo, dos variables (del tipo de datos Variante) son comparadas entre s�.

El tipo de datos Variante es un tipo de datos especial que puede contener datos num�ricos, string, o de fecha as� como los tipos definidos por el usuario y los valores especiales Vac�o y Nulo. El tipo de datos Variante tiene un tama�o de almacenamiento num�rico de 16 bytes y puede contener datos al rango de un Decimal, o un tama�o de almacenamiento de car�cter de 22 bytes (m�s longitud de string), y puede guardar cualquier car�cter texto.

Un ejemplo del c�digo est� as�:

  
 Dim correcto As Variant, entr� As Variant <--Define "correcto" y "entr�" como Variante   
 correcto = Correct Password 	                    <--Pone "correcto"como la "Password Correcta"   
 entr� = Text1.Text 			        <--Pone "entr�" como la password introducida por ti   
 If correcto = entr� Then 		           <--Compara usando el m�todo de Variante   
 GoTo Correct Message   
 Else   
 GoTo Wrong Message   
 End  If

En este m�todo, los breakpoints anteriores no aparecer�n porque el programa ya no usa __vbastrcomp etc...

Breakpoint disponible:
i)
__vbavartsteq <--la Posici�n para Probar si la Variante es Igual

Nota: �Si est�s crackeando un programa VB6, tienes que agregar msvbvm60 delante del punto de ruptura!.
p.ej. bpx msvbvm60!__vbavartsteq

3) COMPARACION de LARGO

Este es tambi�n uno de los m�todos frecuentemente usado. Dos variables (del tipo de datos Largo ) son comparadas entre si .

El tipo de datos Largo es un entero de 4-bytes que oscila entre un valor de -2,147,483,648 a 2,147,483,647.


Por lo tanto, una limitaci�n para este m�todo es que lo que es comparado s�lo puede consistir en n�meros. (Gracias a esta virtud, nosotros veremos menos semejante protecci�n)

Un ejemplo del c�digo es como esto:

Dim correcto As Long, introducido As Long <--Define "correcto" e "introducido" como Largo 
correcto = 12345 			  <--Pone "correcto" como el c�digo correcto
introducido = Text1.Text 		   <--Pone "introducido" como el c�digo introducido 
If entered = correct Then 		    <--Compara usando el m�todo de Largo 
GoTo Correct Message 
Else 
GoTo Wrong Message 
End If

No hay ning�n breakpoints espec�fico para este tipo de m�todo porque el c�digo para esta comparaci�n est� en el programa principal y no en un archivo dll de VB. As�, el mismo desde el programa al programa. Por favor consulta la secci�n "Consejo General para Crackear en VB" en lugar de eso.


Tocar� tambi�n brevemente los otros 5 m�todos de comparaci�n. Si los m�todos siguientes te parecen extra�os o imposibles, simplemente ign�ralos pero recuerda que no se limitan los esquemas de protecciones en VB a los tres m�todos anteriores.

4)COMPARACION SIMPLE

Este m�todo usa dos variables del tipo de datos simple para compararse entre s�.

Es un tipo de datos que guarda variables de coma flotante de precisi�n simple como n�meros de coma flotante de 32-bit (4-byte), oscilando entre un valor de -3.402823E38 a -1.401298E-45 para valores negativos, y de 1.401298E-45 a 3.402823E38 para valores positivos.

Por lo tanto, una limitaci�n para este m�todo es que lo que es comparado s�lo puede consistir en n�meros. Pero a veces, en una rutina de c�lculo donde tu nombre de usuario es convertido a numero de serie, el numero de serie correcto puede estar en forma de Simple.

Un ejemplo del c�digo es como esto:


Dim correcto As Single, entrado As Single   <--Define "correcto" y "entrado" como Simple 
correcto = Password Correcta 		  <--Pone "correcto"como la "Password Correcta" 
entrado = Text1.Text 		   <--Pone "entrado" como la password introducida por ti 
If correcto = entrado Then 		    <--Compara usando el m�todo Variante 
GoTo Correct Message 
Else 
GoTo Wrong Message 
End If 

No hay ning�n breakpoints espec�fico para este tipo de m�todo porque el c�digo para esta comparaci�n est� en el programa principal y no en un archivo dll de VB. As�, �l mismo del programa al programa. Por favor consulta la secci�n "Consejos Generales para Crackear en VB" en lugar de eso.

5) COMPARACION DOBLE

Este m�todo usa dos variables de tipo de datos Doble para compararse entre s�.

Es un tipo de datos que sostiene n�meros de coma flotante de doble-precisi�n como n�meros de 64-bit en el rango -1.79769313486232E308 a -4.94065645841247E-324 para valores negativo; y de 4.94065645841247E-324 a 1.79769313486232E308 para valores positivos.


Como probablemente puedes ver, Doble es muy similar a Simple. Por lo tanto, una limitaci�n a este m�todo es que lo que es comparado s�lo debe consistir en n�meros. Pero a veces, en rutinas de c�lculos donde tu nombre de usuario es convertido a numero de serie, el numero de serie correcto puede estar en forma de Doble.

Un ejemplo del c�digo ser� as�:

Dim correcto As Double, entrado As Double   <--Define "correcto" y "entrado" como Doble 
correcto =Password Correcta 		     <--Pone "correcto" como la "Password Correcta" 
entrado = Text1.Text			       <--Pone "entrado" como el password introducido por ti 
If correct = entrado Then		        <--Compara usando el m�todo Variante 
GoTo Correct Message 
Else 
GoTo Wrong Message 
End If 

No hay ning�n breakpoints espec�fico para este tipo de m�todo porque el c�digo para esta comparaci�n est� en el programa principal y no en un archivo dll de VB. As�, el mismo del programa al programa. Por favor consulta la secci�n "Consejos Generales para Crackear en VB" en lugar de eso.

6) COMPARACION de ENTEROS

Este m�todo usa dos variables de datos del tipo Entero para compararse entre s�.

Es un tipo de datos que sostiene variables de entero guardado como n�meros enteros de 2-bytes en el rango -32,768 a 32,767. El tipo de datos Entero tambi�n es utilizado para representar valores enumerados.


Por consiguiente, una limitaci�n a este m�todo es que lo que es comparado s�lo debe consistir en n�meros. Pero a veces, en rutinas de c�lculo donde tu nombre de usuario es convertido a numero de serie, el numero de serie correcto puede estar en la forma de Entero.

Un ejemplo del c�digo ser� as�:

Dim correcto As Integer, entrado As Integer   <--Define "correcto" y "entrado" como Entero 
correcto = Password Correcta 		      <--Pone "correcto"como la "Password Correcta" 
entrado = Text1.Text 		        <--Pone "entrado" como la password introducida por ti 
If correcto = entrado Then 		          <--Compara usando el m�todo Variante 
GoTo Correct Message 
Else 
GoTo Wrong Message 
End If 

No hay ning�n breakpoints espec�fico para este tipo de m�todo porque el c�digo para esta comparaci�n est� en el programa principal y no en un archivo dll de VB. As�, el mismo del programa al programa. Por favor consulta la secci�n "Consejos Generales para Crackear en VB" en lugar de eso.

7) COMPARACION de BYTE

Este m�todo usa dos variables del tipo de datos Byte para compararse entre s�.

Es un tipo de datos usado para sostener n�meros enteros positivos comprendido entre 0 y 255.
Las variables de byte se guardan como simples, n�meros sin firmar de 8-bit (1-byte).


Por lo tanto, una limitaci�n a este m�todo es que lo que es comparado debe consistir en n�meros y
s�lo para el l�mite de 255.Pero a veces, en rutinas de c�lculos donde tu nombre de usuario es
convertido a numero de serie,el numero de serie correcto puede estar en forma de Byte.

Un ejemplo del c�digo ser� as�:



Dim correcto As Byte, entrado As Byte    <--Define "correcto" y "entrado" como Byte 
correcto = Password Correcta 		<--Pone "correcto"como la "Password Correcta"
entrado = Text1.Text 		  <--Pone "entrado" como la password introducida por ti 
If correcto = entrado Then 		   <--Compara usando el m�todo Variante 
GoTo Correct Message 
Else 
GoTo Wrong Message 
End If 


No hay ning�n breakpoints espec�fico para este tipo de m�todo porque el c�digo para esta
comparaci�n est� en el programa principal y no en un archivo dll de VB. As�, el mismo del
programa al programa. Por favor consulta la secci�n "Consejos Generales para Crackear en VB"
en lugar de eso.

8) COMPARACION de MONEDA

Este m�todo usa dos variables del tipo de datos Moneda para compararse entre s�.
�S�, podr�a parecer raro, pero funciona!!

Es un tipo de datos con un rango de -922,337,203,685,477.5808 a 922,337,203,685,477.5807.
Usa este tipo de datos para c�lculos que implican dinero y para los c�lculos del punto fijo donde
la exactitud es particularmente importante.


Por lo tanto, una limitaci�n a este m�todo es que lo que es comparado debe consistir en n�meros.
Pero aveces,en rutinas de c�lculos donde tu nombre de usuario es convertido a numero de serie, el
numero de serie correcto puede estar en forma de Moneda.

Un ejemplo del c�digo es como esto:


Dim correcto As Currency, entrado As Currency    <--Define "correcto" y "entrado" como moneda 
correcto = Password Correcta 		<--Pone "correcto"como la "Password Correcta"
entrado = Text1.Text 			  <--Pone "entrado" como la password introducida por ti 
If correcto = entrado Then		 	   <--Compara usando el m�todo Variante 
GoTo Correct Message 
Else 
GoTo Wrong Message 
End If 


No hay ning�n breakpoints espec�fico para este tipo de m�todo porque el c�digo para esta comparaci�n
est� en el programa principal y no en un archivo dll de VB. As�, el mismo del programa al programa. Por favor consulta la secci�n "Consejos Generales para Crackear en VB" en lugar de eso.


�As� que, significa eso que con estos 8 m�todos de la comparaci�n, podemos romper todas las simples
rutinas de comparaci�n? La respuesta es NO. Esto es porque, yo comprendo que aparte de estos 8, la comparaci�n tambi�n puede hacerse entre Moneda y String, Variante y Largo etc ...
As� que, yo he creado esta tabla...

Tabla de Comparaciones

 

String

Variante

Largo

Moneda

Simple

Doble

Entero

Byte

String

Normal

V

SD

SC

SS

SD

SD

SD

Variante

-

Normal

V

V

V

V

V

V

Largo

-

-

Normal

__vbaFpCmpCy

Sim a D

DC

DC

DC

Moneda

-

-

-

Normal

__vbaFpCmpCy

__vbaFpCmpCy

__vbaFpCmpCy

__vbaFpCmpCy

Simple

-

-

-

-

Normal

DC

DC

DC

Doble

-

-

-

-

-

Normal

DC

DC

Entero

-

-

-

-

-

-

Normal

DC

Byte

-

-

-

-

-

-

-

Normal

V = Comparaci�n de Variante 
SD = String es convertido a Doble antes de comparar 
SC = String es convertido a Moneda antes de comparar 
SS = String es convertido a Simple antes de comparar 
Sim a D = Simple es convertido a Doble antes de comparar 
DC = comparaci�n Directa 
__vbaFpCmpCy = coma flotante se Compara con Moneda


Por esto, probablemente te dar�s cuenta de que usando Softice sin otras herramientas, estar�s un tiempo infernal intentando deducir qu� clase de breakpoints poner cerca de la rutina de comparaci�n. Esto es donde SmartCheck entra conveniente... Mira mas abajo c�mo usar SmartCheck en Cracking general en VB.


POSIBLES BREAKPOINTS

Hay mucho de ellos y simplemente he listado los m�s comunes.

1) Conversi�n de Tipo datos
i) String a Byte o Entero: __vbai2str
ii) String a Largo: __vbai4str
iii) String a Simple: __vbar4str
iv) String a Doble: __vbar8str
v) String a Moneda: VarCyFromStr (para VB6. Tienes que tener OLEAUT32.DLL en tu WINICE.DAT)
vi) Entero a String: VarBstrFromI2 (para VB6. Tienes que tener OLEAUT32.DLL en tu WINICE.DAT)

2) Moviendo Datos
i) String a memoria: __vbaStrCopy
ii) Variante a memoria: __vbaVarCopy o __vbaVarMove

3) Matem�ticos
i) Suma: __vbavaradd <--Agregando Variantes
ii) Substracci�n: __vbavarsub <--Substrayendo Variantes
iii) Multiplicaci�n: __vbavarmul <--Multiplicando Variantes
iv) Divisi�n: __vbavaridiv <--Divide Variante para conseguir respuesta en Entero
v) XOR: __vbavarxor <--XOR

4) Miscel�nea
i) __vbavarfornext <--Usado en c�digos donde hay una declaraci�n For... Next... (Loop)
ii) __vbafreestr
iii) __vbafreeobj
iv) __vbastrvarval <--Recibe el valor de una localizaci�n espec�fica en un String
v) multibytetowidechar
vi) rtcMsgBox
vii) __vbavarcat <--Uniendo 2 Variantes a la vez
viii) __vbafreevar
ix) __vbaobjset



Consejos Generales para Crackear en VB:

La �nica parte de crackear VB es que all� est� SmartCheck para ayudarnos. Es un programa muy �til y debes aprender a usarlo bien. O por lo menos entender lo que te est� mostrando. Nosotros usamos a menudo Softice en programas escritos en otros idiomas y W32Dasm. W32Dasm es m�s o menos in�til crackeando VB. Pero por suerte, nosotros tenemos SmartCheck. Yo intentar� y dar� una cuenta breve de c�mo hacer para usar al mismo tiempo SmartCheck y Softice para crackear.

1) como principio , ejecuta el programa unas veces. Prueba y ve qu� mensajes se muestran, la manera que el programa act�a.

2) usa SmartCheck para ejecutar el programa. Para la configuraci�n general de SmartCheck, puedes encontrarlo en el website expuesto encima de este ensayo. Despu�s de ejecutarlo una vez y intentarlo registrar, cierra el programa (No SmartCheck). Cuando escoges "Show All Events", puede verse un mont�n de informaci�n. Y es muy f�cil no encontrar las l�neas que necesitas. As� que, pulsa el bot�n en la l�nea quieres antes de escoger "Show All Events".Normalmente, es xxxxxx_Click. las xxxxxx son el nombre del bot�n al que se refiere el programa. Para programadores que son demasiado perezoso para cambiar el nombre, es normalmente CommandX_Click donde X empieza desde 1.

3) busca primero __vbastrcomp, __vbastrcmp o __vbavartsteq. Si tienes suerte, podr�as ver simplemente el c�digo correcto que compara al introducido por ti.

4) si no puedes encontrar estos 3, probablemente el programa usa los otros m�todos de comparaci�n. Ahora, pasa por las l�neas y busca el mensaje Bugger-apagado. Unas l�neas sobre �l, hay normalmente los pocos comandos de __vba que yo list�. Empieza desde el m�s cercano a la l�nea del mensaje Bugger-off. Pon tu breakpoint usando esto. Cuenta el n�mero de sucesos del breakpoint que pusiste y usa F5 en Softice para volver al programa y romper de nuevo.

Por ejemplo, si pusieras __vbafreestr, podr�a haber mucho ellos usados despu�s de que t� haces click en el bot�n del registro. Y si quieres que el breakpoint espec�fico te muestre los 10 __vbafreestr en SmartCheck, tienes que apretar F5 nueve veces para conseguir los 10 __vbafreestr.

�Recuerda que si est�s crackeando un programa VB6, agrega msvbvm60! delante.

5) ejecuta el programa, entra cualquier cosa sea necesaria y pulsa el bot�n para registrar. Softice romper� a menos de que pusieras el breakpoint mal. Una cosa rara que he descubierto en VB6 es que yo necesito poner el breakpoint PRIMERO antes de ejecutar el programa. Recuerda eso. Podr�a aplicarse a las versiones de VB m�s viejas.

6) comienzas remontando en CADA llamada y visualiza cualquier cambio de registro sospechoso. No te tomar� mucho tiempo puesto que est�s cerca del mensaje de Bugger-off. Si no te encontraras con nada sospechoso, retrocede a SmartCheck y busca el breakpoint pr�ximo. El breakpoint anterior podr�a estar despu�s de la rutina de comparaci�n.





 

The cRACKER's n0tES esta dividido dentro de 12 partes principales:
 TX. Notas del Traductor
 00. INDICE
 01. Ensamblador para Cracker (CoRN2)
 02. SoftICE (Men� de arranque , Configuraci�n, Comandos)
       
 1 Men� de arranque
       
 2 Configuraci�n
       
 3 Comandos
 03. Breakpoints & Detalles de API de Windows
       
 1 Programas restringidos
       
 2 Cajas de di�logo
       
 3 Verificando el Tipo de unidad
       
 4 Acceso a archivos
       
 5 Acceso al Registro
       
 6 Cogiendo n�meros de serie
       
 7 Accediendo a Tiempo & Fecha
       
 8 Generando ventanas
 04. Instrucciones de salto
 05. Instrucciones SET
 06. Tips & Trucos para Crackear
       
 1 Programas restringidos
       
 2 Dongles
       
 3 General
       
 4 Configuraci�n de InstallSHIELD
       
 5 Protecciones con Archivo llave
       
 6 Pantallas molestas
       
 7 L�mites de Runtime
       
 8 Serials
       
 9 Limites de Tiempo
       
10 Programas Visual BASIC
 07. Ventanas de Mensajes Para los Cracker
 08. Identificando funciones, Argumentos, y Variables (Rhayader)
 09. Los Sistemas de Protecciones de comerciales
       
 1 Armadillo
       
 2 C-Dilla SafeDISC
       
 3 SalesAgent
       
 4 SecuROM
       
 5 softSENTRY
       
 6 TimeLOCK
       
 7 VBox
 10. Bitmanipulation (Cruehead)
 11. Teor�a general de Cracking
 12. FAQ

 +A. C�mo contactar conmigo
 +B. �Que es lo Nuevo?


 



The cRACKER's n0TES are Copyright 1998-2000 by TORN@DO of ID.
Todo los Derechos Reservados.
Traducido por
Revisado por X-Grimator.