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.