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.
|