Você está na página 1de 10

Como crackear todos los programas de Visual

Basic
(un Tutorial)
por Razzia
traducido por ^[G]oLe[E]^
** Este Tutorial fue tomado prestado de la p!gina de fra"ia de #ngenieria
#n"ersa de C$digo ***
Cortesia de la pgina de Fravia de ingenieria inversa
~
Este Tutorial es EXTREMADAMENTE interesante: mas y mas programas han
sido escrito en lenguajes sobreinflados como isual !asic o Delphy" y como
correctamente se#ala Razzia" esto hace $ue estos programas sean mas
crac%eables $ue las aplicaciones &normales&' Adem(s encuentro sumamente
inteligente el estilo de Razzia )los bloc%s &mas info acerca del programa&
deber*an ser usados por todos los crac%ers desde ahora" por ejemplo+ y muy
bien estructurado, -igue su consejo y siempre &haz el punto& )considera tu
apro.imaci/n+ 0ANTE-0 de saltar a la sesi/n de crac%ing'
1tra t2cnica muy interesante" 3til para es$uemas de protecci/n $ue cambian el
algoritmo matem(tico cada 4ez $ue son instalados" es el parcheado de los dll
de ! por si mismo" para M1-TRARTE )en un mesagebo. $ue llamar(s+ $ue
pass5ord deber*as ingresar
Disfruta'
tutorial de ra%%ia para el crackeo de "&
Introduction
Ultimamente mas y mas programas salen que son probramados en VB.
Puesto que los programas en VB son material desconocido para la mayoria de
los crackers, los ignoran y los tacan de !incrackeables!. "n este documento te
mostrar# que esto no es cierto por su protecci$n basada en te%to
&serials'reg(!s).
Como erramientas solo necesitaremos *o+t,C" y -ie. en un caso. /dems,
asumo que el lector est +amiliari0ado con el cracking. Para principiantes,
recomiendo los grandes tutoriales ecos por 1orc y ed2son sobre crackeo en
.indo.s. Pero tratare de acer el me3or es+uer0o para acer este te%to
entendible para todos los que tienen un minimo conocimiento sobre cracking.
'reparandonos
/ntes de empe0ar a bombardearte con listados en asm, tomemos un
momento para pensar acerca de con que estamos tratando. "stamos tratando
con e%e!s que no tiene c$digo por si mismos, pero que en lugar, acen
llamadas a librerias con +unciones standard. 4u# signi+ica esto5 esto signi+ica
que ay una gran desventa3a para proteger programas escritos en VB. Por
qu#5 piensas que los escritores de dll de VB acen 67 +unciones di+erentes que
podr8as usar para comparar 9 cadenas5 :o, por supuesto que no. "llos acen
la dll para ser tan e+iciente como sea posible y peque;a como sea posible.

Por consiguiente una buena suposici$n es que solo abr 6 &o 9) lugar&es)
dentro de la dll donde las 9 cadenas pueden ser comparadas. < este es el
caso, como vers si terminas de leer este documento. <a empe0$ a brillar la
peque;a lampara en tu cabe0a5 =>>)
:o ser8a grandioso si supieramos en que parte de la dll, son comparadas 9
cadneas5 *8, ser8a grandioso. "sto reducir8a el crackeo de VB a un aburrido
traba3o de +i3ar un simple breakpoint en el lugar indicado. Continua leyendo para
mas detalles.


Estrategia

/ntes de continar, ser8a sabio +i3ar una estrategia &como deberias acer
siempre con todos los otros casos de cracking).
Pensemos acerca de la protecci$n ... ,ngresas una cadena de te%to, presionas
enter u !?@! o lo que sea. Auego .indo.s pasa los dsatos ingresados en la dll
VB. Aa dll VB ace lo que necesita para saber si los datos ingresados son
correctos o incorrectos. < obtienes un mensage, diciendote que ingresaste un
buen'mal c$digo.
/s8 que donde estar8a el eslab$n d#bil en la cadena5 la respuesta es donde
.indo.s pasa los datos que ingresaste a la dll VB. "se es nuestro punto de
entrada. Podemos acer que *o+t,C" interrumpa aqu8. < entonces estaremos
en la +uente de la cadena de protecci$n. Con la ayuda de breakpoints
podemos monitorear que pasa con nuestro te%to.
Pienso que aora tenemos su+iciente in+ormaci$n de +ondo para crackear un
primer e3emplo.

Case ( ) T*e Collector "+,(
Be collector es una utilidad para crear y mantener tu colecci$n de
imagenes'+otos. :o est mal para ser un programa VB. Cas in+o sobre el
programaD
:ombre D Be Collector v9.6
Eonde D ttpD''intranet.ca'~logic'collectr.tml
Bama;o D collectr.e%e F 9GH.7GI bytes
Protecci$n D serial
EAA D usa un dll VBJ KLLLLLLLLLLLLLL VBJ.EAA
"ncuentro +cil e%plicar las cosas por pasos. Por lo tanto, dividir# el proceso de
crackeo en peque;os pasos D
Paso 6 D "3ecuta Be Collector 3usto al inicio te pedir el serial
Paso 9D ,ngresa un serial tonto como !MNIHOGJ967!.
/ora presiona control>d para entrar a *o+t,C". "n *o+t,C" escribe !bp%
memcpy! para colocar un breakpoint en la +unci$n memcpy del kernel.
&,nterme00o D 4u# es memcpy5 Pindo.s usa muco memcpy en
operaciones concernientes a caden0as. "n este caso, ser usado para copiar
el bu++er con el te%to que ingresamos al espacio de memoria de la dll CV.
Qecuerdas cuando di3e que ibamos a interrumpir cuando .indo.s pasara
nuestra cadena a la dll VB5)
Paso J D Ee3a *o+t,C" con control>d. < presiona !?@R. "sto ar que *o+t,C"
interrumpa 3usto en el inicio de memcpy.
Paso G D /ora continuaremos rastreando mas en la memoria de la +unci$n
memcpy para encontrar donde ser almacenada la cadena que ingresamos.
Cantente presionando F67 asta que veas DDCemoryScopyingSsnippet
JMP 9E9F
USH ECX ;Estas lneas copian el SHR
CX,02 ;cadenas en ds:si a es:di
REPZ M!S" ;el REPZ M!S"#
PP ECX
$" ECX,0%
REPZ M!S& ;el REPZ M!S&#
XR "X,"X
Paso OD Tusto antes de Q"PU C?V*E as un !ed si!. Vers el te%to que
ingresaste, en mi caso, muestra !7MNIHOGJ96!.
-as un !ed esDdi! y no versa nada &aVn). Pero si presionas F67 y pasas el
Q"PU C?V*B versa el te%to siendo copiado a su nueva localidad, donde el dll
VB puede accesarlo.
Paso HD aora sabemos donde est locali0ado el te%to. Qevisemos nuestra
estrategia aqu8. :uestro plan +ue encontrar donde la dll VB mantuvo nuestro
serial, entonces pon un breakpoint en esa localidad de memoria y encuentra
con que es comparado. /s8 que +i3emos un bpr &breakpoint en rango) en la
localidad donde vive nuestra cadena. <a que las instrucciones Q"PU
C?V*&E'B) incrementaron el puntero en di &aora apunta al +inal de nuestra
cadena) acemos un !bpr esDdi>N esDdi>6 r.!. :o presiones enter, lee el paso I
antes.
Paso ID /ntes de tocar enter, te dire que debes esperar. *o+t,C" romper todo
lugar donde el bloque de memoria con la cadena es le8do o escrito. Por
e3emplo romperas dentro de la +unci$n strlen donde la longitud de la cadena es
calculada. < romperas donde la cadena es copiada a otro lugar en memoria
&por e3emplo con Q"PU C?V*P). Cuando esto pasa, +i3a un nuevo bpr en la
nueva localidad con la cadena. Bambien interrumpir cuando la cadena o parte
de ella es borrada. *i la cadena completa no es borrada completamente, no
remuevas el bpr correspondiente. *olo remu#velo cuando la cadena completa
sea escrita sobre algo mas. Bambi#n rompers de :uevo en memcpy.
-memcpy leer otro eco de la cadena en la memoria de la dll. Coloca un bpr
all8 tambi#n. < +inalmente rompers en la parte del c$digo que ace la
comparaci$n &la instrucci$n que vers es Q"PU CCP*B). Cuando alcanc# esa
parte de c$digo, tuve G breakpoints +i3ados. Un breakpoint para memcpy y J
bpr!s en J ecos de la cadena &o partes de ella).
Paso ND /ora emos encontrado el c$digo donde la dll VBJ ace la
comparaci$n, aora podemso poner un breakpoint all8 y desactivar los otros
breakpoints. :o los necesitaremos mas. -"C?* ":C?:BQ/E? el lugar
donde las cosas son comparadas en VBJ. Ao que ves es estoD
DBeSVBJScompareSsnippet D
: '&C( )o* c+, d+
: F%(, -ep. c)ps/ ;01 a23 las cadenas en ds:si 4
es:di
: 5607 8e 'C&, ; son co)pa-adas
: 9F la9:
: 92 +c9; a+,d+
: '"<E0' lea /+, =/p>0'?
: E'0E0, call 92C&
Tusto antes del Q"PU CCP*B si aces un !ed si! y un !ed esDdi!, vers con que
es comparado. "n este caso, el segundo y tercer carcter de la cadena que
ingresamos son comparados con !VN!. /s8 que si reinicias el programa e
ingresas 7VNIHOGJ96 se registrar.
Paso MD aVn no emos terminado. Bodo lo contrario2 Ee verdad, la parte
importante es lo que acemos aora. Aa pro%ima ve0 que cono0camos un
programa en VBJ &y conoceremos mucos de ellos D) queremos colocar un
breakpoint en la localidad con el c$digo arriba y leemos el serial correcto.
Como lo acemos5 Brat#moslo rpido con nuestro ob3etivoD Be Collector.
,nicia Be Collector e ingresa un serial tonto. "ntra a *o+t,C" y coloca un
breakpoint en memcpy. Ee3a *o+t,ce y presiona !?@!, esto te regresar a
*o+t,C". /ora, sal del kernel y entra al c$digo de VBQU:J77 &presiona F66 y
F67 asta que llegues all8)
/ora as una busqueda del partronD
NB,C/,FJ,/H,IG,76,M+,M9,NE,O",7N,"N,7",7H este es el Rmov c%, d%R y el resto
que emos visto arriba, buscaD s 7 l ++++++++++
NB,C/,FJ,/H,IG,76,M+,M9,NE,O",7N,"N,7",7H coloca un breakpoint en la
direcci$n que es retornada &bp% KsegDo++setW)

>presiona FO y aterri0aras en la mitad del c$digo de comparaci$n de arriba
>solo queda algo por acer y es cequear los punteros en esDdi y dsDsi

Caso 2 : Minimize Magic 1.2.4

Minimize Magic es una utilidad que puedes usar para minimizar tus programas en la
barra de tareas.
Mas del programa:
Nombre : Minimize Magic 1.2.4
Donde : http://www.genesoft.demon.co.u/
!ama"o : minimagic.e#e $ 1%&.'44 b(tes
)rotecci*n : password basado en una lla+e
D,, : usa -.4 dll /00000000000000 -.4.D,,
Para crackear este programa puedes proceder en la misma +orma que usamos
con Be Collector. Comen0ando con memcpy, traba3ando a tu manera al
c$digo que compara las cadenas que ingresaste. /lgo importante es saber que
el dll VBG siempre convierte las cadenas al +ormato PideCar antes de acer
algo con ellas. /s8 que en lugar de usar memcpy puedes +i3ar un breakpoint
en CultiByteBoPideCar para romper. Cequea tu re+erencia a las /P,Xs de
.indo.s para aprender mas acerca de esta +unci$n. -e eco la parte dura
del traba3o por ti y encontre el c$digo de la dll VBG que compara las 9 cadenas
&en +ormato PideCar2). /qu8 est el listadoD
: <, p3s9 esi
: <5 p3s9 edi
: '&5C2670 )o* edi, =esp > 70?
: '&56260C )o* esi, =esp > 0C?
: '&6C2676 )o* ec+, =esp > 76?
: %%C0 +o- ea+, ea+
: F%,,(5 -ep. c)ps@ ;0a23 las cadenas en ds:esi
: 560< 8e 0F59&%,2 ; 4 es:edi son co)pa-adas
: 7&C0 s// ea+, ea+
: '%"'FF s// ea+, FFFFFFFF
: <F pop edi
: <E pop esi
: C20C00 -et 000C
/ora sabemos lo su+iciente sobre la dll VBG, crackiemos Cinimi0e CagicD
Paso 6D inicia Cinimi0e Cagic y escoge registrar desde los menus. Be
preguntar tu :ombre y un Pass.ord. ,ngresa un nombre y pass.ord tonto.
:o presiones !?@! aVn, continua con el siguiente paso.
Paso 9D entra a *o+t,C" y coloca un breakpoint en memcpy. *al de so+tice y
presiona !?@!. /terri0aras en *o+t,C".
Paso JD Presiona F66 y F67 asta que estes +uera del kernel y en el c$digo de
VBG77J9.dll.
/ora buscaremos el patron del c$digo de arriba. -as !s 7 l +++++++++
OH,OI,Nb,Ic,9G,67,Nb,IG,9G,7c,Nb,Gc,9G,6G! y coloca un breakpoint en la
direcci$n que es retornada.
Paso GD Presiona FO para salir de *o+t,C"... romperas intermediamente de
:uevo en el ob3etivo, 3usto al inicio del c$digo de arriba. /qu8 el pass que
ingresaste sera comparado con el pass correcto. Qastrea asta 3usto antes de
Q"PU CCP*P y as un !ed esDedi!, esto mostrar el pass que ingresaste. *i
aces !ed esi! versa el pass correcto. &esta cadena sera en +ormato PideCar
por e3emplo podr8as ver / B Y - E " - E. "sto signi+ica que tu pass es
/BY-E"-E) ?kas, aora encontramos un pass +unctional que traba3ar solo
para la versi$n instalada en tu compu. *i le das el pass a alguien mas, el
programa no lo aceptar. "l pass es calculado desde una llave &key) que es
di+erente en cada compu. "sta @ey puede ser generada aleatoriamente en el
setup o basado en la in+o de tu d, o en la +eca, el tiempo o en algo.
Cualquiera que sea, podr8a ser di+8cil de encontrar como es generado o donde
es almacenado.
/s8 que, como podemos acer un crack general5 Podr8amos usar el truco
!Cagic Pindo.! aqu8. !Qeprogramaremos! el VBG77J9.dll para mostrar el pass
correcto. "l c$digo original en el VBG77J9.dll se ve como estoD
:0F59&%6' <, p3s9 esi
:0F59&%69 <5 p3s9 edi
:0F59&%6( '&5C2670 )o* edi, =esp > 70? ; es:ediA pass 23e
in;-esaste :0F59&%6E '&56260C )o* esi, =esp > 0C? ; esi
1A pass co--ecto
:0F59&%<2 '&6C2676 )o* ec+, =esp > 76?
:0F59&%<, %%C0 +o- ea+, ea+
:0F59&%<' F%,,(5 -ep. c)ps@ ; los co)pa-a
:0F59&%<& 560< 8e 0F59&%,2
:0F59&%<" 7&C0 s// ea+, ea+
:0F59&%<F '%"'FF s// ea+, FFFFFFFF
:0F59&%,2 <F pop edi
:0F59&%,% <E pop esi
:0F59&%,6 C20C00 -et 000C ; :inal de esta
:3nciBn
:0F59&%,5 <5 p3s9 edi ; el cBdi;o a/a8o de
esta di-ecciBn
:0F59&%,' '&5C260' )o* edi, =esp > 0'? ;no es i)po-tante,
pe-o
:0F59&%,C '&6C2670 )o* ec+, =esp > 70? ;necesita-e)os
este espacio
:0F59&%50 '&66260C )o* ea+, =esp > 0C?
:0F59&%56 0&E6 o- esp, esp
:0F59&%5, F2,,(F -epn. scas@
:0F59&%59 &'00000000 )o* ea+, 00000000
:0F59&%5E 5<0% 8ne 0F59&%'%
:0F59&%'0 '"65FE lea ea+, =edi102?
:0F59&%'% <F pop edi
:0F59&%'6 C20C00 -et 000C
"l c$digo est locali0ado en el o++set IaIGN en el arcivo vbG77J9.dll. /s8,
para acer que un crack general aga un parce que cambie el c$digo de
arribaD
:0F59&%6' <, p3s9 esi
:0F59&%69 <5 p3s9 edi
:0F59&%6a '&5C2670 )o* edi, =esp > 70?;es:edi 11Ate+to
23e in;-esate
:0F59&%6E '&56260C )o* esi, =esp > 0C? ;esi 11A pass
co--ecto
:0F59&%<2 '7%F5000,%00 c)p d@o-d pt- =edi?, 00,%0050;edi 1A
CPCD E
:0F59&%<' 5<25 8ne 0F59&%'7 ;si no 1 sali-
:0F59&%<( '0%E00 c)p /4te pt- =esi?, 00 F01 estas
lneas
:0F59&%<" 5670 8e 0F59&%,F F ponen
espacios
:0F59&%<F '%C,07 add esi, 00000007 F ent-e
ca-acte-es
:0F59&%,2 C,0,20 )o* /4te pt- =esi?, 20 F
:0F59&%,< E&0% 8)p 0F59&%,( F011salta-
el -et
:0F59&%,5 C20C00 -et 000C ;011 esto p-e*iene 3n c-as9
:0F59&%,( '%C,07 add esi, 00000007 F
:0F59&%," E&E& 8)p 0F59&%<( F01 al
inicio
:0F59&%,F '&%""CC65&0F )o* edi, =0F5&C6"C? G011 estas
lineas
:0F59&%5< '&56260C )o* esi, =esp > 0C? G lla)an a la
:3nciBn
:0F59&%59 ,(00 p3s9 00000000 G Messa;e&o+(
:0F59&%5& <, p3s9 esi G pa-a )ost-a-
:0F59&%5C <, p3s9 esi G el pass co--ecto
:0F59&%5" ,(00 p3s9 00000000 G
:0F59&%5F FF"5 call edi G
:0F59&%'7 <F pop edi
:0F59&%'2 <E pop esi
:0F59&%'% 90 nop
:0F59&%'6 C20C00 -et 000C
ComentariosD usamos el espacio de 9 rutinas, para prevenir un cras tenemos
que poner una +unci$n Q"B en el inicio de la segunda +unci$n &original) &ver
l8nea 7FIMBJHI). "sta parte del c$digo de dll VBG no es usada para cequear
los pass.ords. "s usada por otras partes del programa. Por lo tanto,
necesitamos acer algo para que solo algo pueda ser mostrado cuando
estamos tratando con una comparaci$n de pass.ords.
"sto es lo que el c$digo en la l8nea 7FIMBJO9 trata. Cequea para ver si "E,
apunta al siguiente te%to RPCR. /s8 podemos usar esto para activar el crack.
Para activar el crack, RPCR tiene que ser ingresado en la cadena por pass
cuando te registras. Aas l8neas marcadas con Z estn all8 para poner espacios
entre caracteres de la cadena. ?riginalmente all8 estar8a una cadena en
+ormato PideCar. "sto signi+ica que en memoria abrn ceros entre los
caracteres. Pero la +unci$n que emos usado para mostrarnos el te%to
&CessageBo%/) convierte los 7 al +inal de la cadena. /s8 que obtendr8amos
solo 6 letra si no ici#ramos el reempla0o de los ceros con espacios. Aas
l8neas marcadas con L estn all8 para llama a la +unci$n CessageBo%/ para
mostrar el pass correcto.
Qasgu# esos commandos del dll VBG. coloqu# un breakpoint en CessageBo%/
para ver como VBG lo llamaba. Bien, esto es para Cinimi0e Cagic. Para acer
un crack general, un parce podr8a ser escrito para parcear el dll VBG en
o++set IaIGN con el c$digo de arriba. Para usarlo, minimagic.e%e y vbG77J9.dll
deber8an estar en un directorio temporal y el parce e3ecutarse all8. Auego
iniciar minimi0e.e%e desde ese directorio temporal y usar !PC! por pass. < voila,
una ventana aparecer con el pass correcto. Una ve0 el pass correcto es
conocido, los arcivos temporales ser8an borrados y el pass puede ser usado
en el Cinimi0e Cagic original.
Caso - ) .u& .tation /lp*a +,0+
Aa mayoria de los programas VBG pueden ser crackeados con el m#todo
descrito en el caso 9, pero e encontrado 9 programas que usan un m#todo
distinto de comparaci$n. Uno de estos programas es *ub *tation /lpa 9.79.
Usa una protecci$n que primero convierte un numero que ingresaste a su valor
e% y luego lo compara con el numero correcto. Comencemos a crackear *ub
*tation /lpa aoraD las cosas se aclararn. ,n+o acerca del programaD
:ombre D *ub *tation /lpa 9.79
Eonde D ttpD''....es.at.demon.co.uk'inde%.tml
Bama;o D H9M.9GN bytes
Protecci$n D pass.ord basado en un user name
EAA : Usa VBG dll
Primeramente mencion# que VBG convierte cadenas al +ormato .idecar antes
de acer algo con ellos. Por lo tanto usaremos esta +unci$n como punto de
entrada. Ee nuevo lo aremos paso a paso =>>)
Paso 6D inicia *ub *tation /lpa y escoge register desde los menus. ,ngres un
nombre y un key de registro tonto.
Paso 9D entra a *o+t,C" y coloca un breakpoint en CultiByteBoPideCar &con el
commando !bp% multibyteto.idecar!)
Paso JD aora, sal de *o+t,C" y presiona RQegisterR.
Paso GD *o+tice interrumpir en el inicio de CultiByteBoPideCar, presiona F66
para salir. VersD
:FF7<00C25&0F call =HER$EI%2#M3lti&4teJoKideC9a-?
:'&"' )o* e/+, ea+
:'%FEFF c)p esi, FFFFFFFF
:5<07 8ne 0F5%'&CF
:6& dec e/+
:<% p3s9 e/+
:,(00 p3s9 00
:FF7<7'C95&0F call d@o-d pt- =0F5&C97'?
:'&E' )o* e/p, ea+
:'<E" test e/p, e/p
:0F'6<&2,0700 8. 0F56&2%"
:6% inc e/+
:<% p3s9 e/+
:<< p3s9 e/p
:<, p3s9 esi
:<5 p3s9 edi
:,(00 p3s9 00
:,(00 p3s9 00
:FF7<00C25&0F call =HER$EI%2#M3lti&4teJoKideC9a-?
:'&C< )o* ea+, e/p ;011 9as Ced e/pC a23
:<" pop e/p
:<F pop edi
:<E pop esi
"l lugar importante est 3usto despues de la segunda llamada a CultiByte>
BoPideCar. Eesactiva el primer bp en CultiByteBoPideCar y coloca un
:uevo bp despues de la segunda llamada a la +unci$n &en la l8nea con C?V
"/[,"BP). "n la l8nea "BP contendr un puntero a una cadena en +ormato
PideCar que +ue procesado. :o tiene que ser la cadena de la llave de
registro. Por lo tanto, editaremos ese breakpoint para que traba3e solo
interrumpiendo cuando este procesando la llave de registro. Como podemos
acerlo5 Bien, la +unci$n CultiByteBoPideCar retorna la longitud de la cadena
que procesa mas 6 en "/[. /s8 agregaremos una declaraci$n condicional en
el breakpoint. -as !bl! para encontrar que es el numero en ese breakpoint.
"ntonces as un !bpe (! y agrega !i+ alFRFKlengt?+@ey*tring16RW! al
breakpoint. Por e3emplo, si ingresas !969696!, lengt?+@ey*tring ser8a H D>>).

Paso OD /ora de3aremos corer el programa con FO. cuando *o+t,ce rompa as
un !ed edp! y ve la +orma PideCar de la llave que encontraste. Colocamos un
bpr en el bloque de memoria conteniendo la cadena y continuamos &FO). Ao
que pasar es esto. *o+tice romper en varios lugares. Ao que es importante
es que rompera en el c$digo de ?A"/UBJ9. cuando esto pase, rastrea un
poco mas para ver que est pasando. Aas primeras veces saldrs de
?A"/UBJ9 muy rpido. Pero eventualmente vers este c$digoD
& listado de ?A"/UBJ9.EAA)
D,<%6&,&% %9<C260C c)p =esp > 0C?, e/+ ; este es 3n
loop 23e
:,<%6&,&5 5E76 8le ,<%6&,C" ; *a a t-a*Ls de
:,<%6&,&9 %%C9 +o- ec+, ec+ ; los ca-acte-es
de 3na :,<%6&,&& '"0692 lea ea+, =ed+ > 6Ged+? ; cadena,
en el :inal
:,<%6&,&E '(0E )o* cl , =esi? ; ed+ tend-M el
*alo-
:,<%6&,C0 6, inc esi ; 9e+ de la
cadena
:,<%6&,C7 6F dec edi
:,<%6&,C2 FF6C260C dec =esp > 0C?
:,<%6&,C, '"7667 lea ed+, =ec+ > 2Gea+?
:,<%6&,C9 '<FF test edi, edi
:,<%6&,C& 5FE, 8; ,<%6&,&%
:,<%6&,C" '<FF test edi, edi
:,<%6&,CF 5F6( 8; ,<%6&57&
NNNNNNNNNNNNN
NNNNNNNNNNNNN
:,<%6&,F2 '970 )o* =ea+?, ed+ ; ed+ es
;3a-dado
:,<%6&,F6 %%C0 +o- ea+, ea+
:,<%6&,F, '%C626 add esp, 00000026
:,<%6&,F9 C27000 -et 0070
Paso HD vimos que la llave es trans+ormada en su valor e% y guardada en un
lugar en memoria. *i monitoreas esta localidad de memoria, terminars en el
dll VBG que la compara con otro valorD

:0F5(2CE7 <( pop ed+ ; ca-;a ed+
:0F5(2CE2 <' pop ea+ ; ca-;a ea+
:0F5(2CE% 2&C2 s3/ ea+, ed+ ; los -esta
:0F5(2CE< '%F'07 c)p ea+, 00000007
:0F5(2CE' 7&C0 s// ea+, ea+
:0F5(2CE( <0 p3s9 ea+
:0F5(2CE& 0F&50, )o*.+ @o-d pt- ea+, =esi?
:0F5(2CEE '%C,02 add esi, 00000002
:0F5(2CF7 FF266<F6995&0F 8)p d@o-d pt- =2Gea+ > 0F5&99F6?
:0F5(2CF' E'&&000000 call 0F5(2"&'
Vemos que "E[ y "/[ son cargados desde la pila y luego son restados. "sto
es una +orma indirecta de comparar los 9 valores. *i revisas el contenido de
"/[ y "E[, versa que uno tiene el numero que ingresaste y el otro tendr el
numero de registro correcto.
Paso ID aora encontramos esta localidad, es sabio notar los valores e% del
c$digo, para que puedas encontrarlos rpido cuando sospeces que otro
programa VBG usa esta protecci$n.

1otas 2inales

Bien, con las J t#cnicas de arriba e sido capa0 de realmente crackear
algunos programas VBJ'G que usan la protecci$n basada en te%to. /lgunas
veces cuando +i3as un breakpoint en la rutina de comparaci$n, *,C" no
interrumpira. Brata entonces de ingresar una cadena con una longitud
di+erente. Porque el programa podr8a ser cequeado por la longitud de la
cadena que ingresas y entonces comparar los caracteres aislados, pero de
nuevo ser comparados en las localidades declaradas en los e3emplos de arriba.
Con programas VBO no tengo muca e%periencia, solo e crackeado uno. "s
el -itlist Pro vJ.7. Parceando el dll VBO, pude remover su limitaci$n de J7
d8as 3usto como un programa regular. Por supuesto, el dll VBO tenia que ser
colocado en el directorio principal de -itlist Pro, esto para prevenir que otros
programas VBO usaran el EAA parceado.
"so es todo amigos, pueden contactarme &si saben como =>>) en irc con
retroalimentaci$n y preguntas.