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