Eco de memoria
(Cruehead)
Una manera com�n de encontrar un n�mero de
serie v�lido es encontrar lo que el legendario
+ORC llama eco de
memoria ("memory echo"). Este es el
lugar donde nuestro numero de serie introducido
es comparado al numero de serie real, v�lido (a
menudo calculado desde nuestro nombre de usuario
introducido). Puedes crackear muchos
programas, simplemente encontrando el eco de
memoria, as� se desconfiado cuando veas un
c�digo as�:
mov bl,[esi] ; Toma un byte del numero de serie correcto
mov bh,[edi] ; Toma un byte del numero de serie introducido
cmp bl,bh ; Comp�ralos
jne... ; Si no emparejan, entonces el numero introducido es incorrecto.
As� que, para encontrar el eco de memoria aqu�,
habr�a que escribir, en SoftICE, "d
esi", y entonces ver�as el numero de serie
correcto en tu ventana de datos. Otro recorte de
c�digo que hace la misma cosa podr�a parecerse
a:
mov ecx,longdelserialv�lido ; cu�ntos bytes a comparar
repz cmpsw ; Cmp string al ds:esi (ser. correcto) con es:edi (nuestro ser.)
je ... ; Salta a la etiqueta "serial v�lido" si los strings emparejan.
Para encontrar el eco de memoria para un
programa que usa un c�digo as�, habr�a, que
escribir , en SoftICE "d esi."
�Simplemente como en el ejemplo anterior!
�Bien, ahora espero que entiendas un poco m�s
sobre lo que es el eco de memoria, y c�mo
encontrarlo!
|
Romper mensajes (+Greythorne)
BMSG <Manipulador de Ventana>
WM_GETTEXT (bueno para las passwords)
BMSG <Manipulador de Ventana> WM_COMMAND (bueno
para los botones de OK)
Informaci�n importante: Imagina que est�s
usando WM_COMMAND para intentar localizar el
Bot�n, y el hwnd resultante y ves que el hwnd
del bot�n es p.ej. 0324 y que el hwnd de la
ventana es p.ej. 0129
Para encontrar el Bot�n, usa el Valor de la
Ventana, no el Valor del Bot�n para BMSG (el
otro simplemente no trabajar�) as� para el
ejemplo, para encontrar nuestro bot�n nosotros
tendr�amos BMSG 0129 WM_COMMAND
|
Crackeando N�meros de serie
(josephCo)
Bien empezar� explicando un peque�o truco
que uso para atacar serials. Yo no uso ninguna de
las principales APIs (GetDlgItemtext(A),
GetWindowText... [si es que realmente hay uno
para usar]), yo casi siempre rompo en
HMEMCPY.
Cuando pongo mi breakpoint en HMEMCPY, yo solo
"paseo" (F10) dentro de �l
aproximadamente de 17 a 25 l�neas. Debes
encontrar un c�digo similar a esto:
PUSH ECX
SHR ECX,2 ; el n�mero de palabras a copiar
REPZ MOVSD ; las copia desde DS:ESI (32-Bit) a ES:DI (32-Bit)
POP ECX
AND ECX,3
REPZ MOVSB ; lo mismo que REPZ MOVSD, pero s�lo 1 Byte
XOR DX
XOR AX
Ahora, esto puede parecer un poco complicado,
pero simplemente pega con �l. Encontrar�s que
este m�todo normalmente es un poco m�s f�cil
para romper en tu numero de serie, o nombre.
En REPZ MOVSD, en sice, teclea: D DS:ESI (32
bit) o D DS:SI (16 bit). Debes ver tu nombre,
n�mero de serie, o cualquier cosa que escribiste
en el. Ahora teclea: D ES:EDI (32 bit) o D ES:DI
(16 bit). Esto mostrar� la situaci�n donde t�
informaci�n se copiar� para p.je.
22BF:00000000. Date cuenta del extra�o segmento
(22BF). Si t� BPR en este rango de memoria, no
podr�s romper de nuevo en absoluto. Ahora F10
hasta que toda tu informaci�n sea copiada (past
repz movsb). En este punto debes teclear: PAGE
22BF:00000000 (o cualquier SEG:OFFSET que
tengas). Algo as� se presentar�:
| Linear
|
Physical
|
Attributes
|
Type
|
| 80284960 |
01603960 |
PD A AU RW
|
System |
Lo que nosotros queremos es poner un BPR (break
point en rango) a la direcci�n de la
situaci�n lineal. Para hacer esto necesitas
saber cu�ntos bytes est�n en el rango, y tienes
que usar el SELECTOR 30
Ejemplo: BPR 30:80284960 30:80284969
RW
Esto s�lo pone un break en el rango para 9
bytes durante el acceso RW (lectura/escritura).
Si quieres ver c�mo direcciones diferentes
realmente pueden ser las mismas puedes:
D
30:80284960
Siempre usa el selector 30, porque siempre
existe. Estos son simplemente los hechos.
B�sicamente todo esto es impide al usuario hacer
F12 fuera del API normal y entonces buscar para
su serial/name. Esto es sumamente �til para
programas de 16 bit, porque el segmento siempre
cambia. Ahora puedes hacer alegremente (F5) y
repetir el proceso o BD <HMEMCPY> ( es
cualquier breakpoint) y debes romper cuando
tu serial/name es le�do. Simple ;)
|
Crackeando N�meros de Serie
usando HMEMCPY (CrackZ)
| Una funci�n de Windows interesante
crackeando n�meros de serie es HMEMCPY. Es
llamado cuando strings (p.ej.n�meros de
serie ) son copiados en la memoria. Para
usar HMEMCPY, primero tienes que entrar algunos
detalles en el di�logo de registro y entonces
despu�s de que has a�adido toda la
informaci�n, agrega un breakpoint a HMEMCPY
(Ctrl-D, BPX HMEMCPY). Vuelve al programa (Ctrl-D)
y aprieta el bot�n OK/Register, etc.. Sales
temporalmente a SoftICE, as� que pega F11 para
volver a la funci�n llamada. Si hay m�s cajas
de edici�n, aprieta Ctrl+D y F11 de nuevo, hasta
que est�s seguro, de que toda la informaci�n de
las cajas de edici�n ha sido copiada. Ahora
est�s mirando a algo as�: PUSH DWORD PTR [DI]
CALL KERNEL!LOCALUNLOCK
Este c�digo est� en USER, y la mayor�a de
los c�digos son verificados desde el archivo
ejecutable del programa (p.ej. FILE.EXE),
as� que avanza con F10 despu�s de que has
desactivado todo los breakpoints. Debes caminar a
trav�s de muchas instrucciones (quiz� 50 o
m�s), y probablemente pasar�s por
Kernel32!_freqasm antes de que vuelvas al c�digo
del programa. Si volvieras al c�digo del
programa, comienza avanzando despacio con F10 a
trav�s de �l. Si encuentras algo interesante -
quiz� dos numero de serie se Empujan en la pila
y entonces una LLAMADA es ejecutado... usa D para
ver esta situaci�n de memoria.
Si ves montones de Llamadas de funci�n y
saltos condicionales, podr�as no querer perder
tiempo verificando esto. As� que usemos la
informaci�n que conseguiste cuando entraste un
numero de serie incorrecto. En este caso deja
SoftICE y abre W32DASM. Ahora busca el mensaje
que conseguiste, cuando entraste un numero de
serie incorrecto, en string reference. As� ves
donde aparece el mensaje de numero de serie
err�neo. Debes apuntar esta direcci�n. Entonces
busca el mensaje que conseguir�as cuando
entrases un numero de serie correcto y anota la
direcci�n. As� que ahora sigamos usando SoftICE
y comencemos intentando conseguir registrar el
programa. Atr�s en SoftICE empieza caminando a
trav�s del c�digo y comprueba si un salto
condicional esta cerca del mensaje de tu numero
de serie incorrecto y tambi�n comprueba si salta
al mensaje de numero de serie v�lido. Ahora esto
debe bastarte para conseguir un numero de serie
v�lido o encontrar d�nde remendar el archivo.
|
Crackeando N�meros de serie en
Visual Basic (CrackZ)
Voy a resaltar otra manera en la que puedes
invertir protecciones de n�meros-de-serie en VB,
este acercamiento implicar� usar la caja de
mensaje que aparece cuando entras un c�digo
incorrecto. As� que antes de apretar O.K. pon un
BPX rtcMsgBox en SoftICE, necesitar�s tener
MSVBVM50.DLL cargado para hacer esto. Entonces
entra tu datos de registro favoritos y aprieta
enter. SoftICE romper� en la funci�n rtcMsgBox.
As� que desensambla tu programa. Ve al segmento
del c�digo donde la caja del mensaje aparece.
Debes ver f�cilmente que nuestra caja del
mensaje es referida por un control espec�fico.
Pon un breakpoint justo antes de esa funci�n de
comparaci�n, nota que las funciones de Visual
Basic no difieren en cualquier caso del API WIN32
en eso tambi�n ellos deben EMPUJAR cualquier
par�metro que ellos usen hacia la pila. As� que
debes alcanzar este c�digo f�cilmente (justo
antes de nuestra comparaci�n cr�tica),
podr�as necesitar empujar F5 & F11 unas
veces. Ahora debes poder coger el c�digo bueno.
La pr�xima vez cuando est�s invirtiendo un
objetivo de Visual Basic, podr�a valer la pena
intentar con las funciones siguientes:
__vbaLenBstr (consigue longitud de string)
__vbaStrCopy
__vbaStrMove
|
Crackeando N�meros de serie en
Visual Basic 3 (+wAj)
Lo explicado pueden usarse para cualquier
recorte si lo tienes delante de ti como el de
debajo: ; Recortes_de_comparaci�n_VB3
: 8CAF 8BCA mov cx,dx
: XXXX F3A6 repz cmpsb ;
(1). BPX en HMEMCPY. Introduce un car�cter de
tu numero de serie. Romper�s. PRET (F12) hasta
que consigas el m�dulo VBRUN300.DLL. Ahora
teclea BC *, y busca el hexadecimal del recorte
(8BCAF3A674019F928D5E08), y pon un BPX en la
situaci�n encontrada. BD * (para evitar
innecesarios breaks), e introduce todo tu
numero de serie, entonces BE * y aprieta OK...
�BOOM! estas en la comparaci�n.
(2). BPX en HMEMCPY. Introduce un car�cter de tu
numero de serie. Romper�s. PRET (F12) hasta que
consigas el m�dulo VBRUN300.DLL. Ahora teclea BC
*, y pon un BPX en el offset (BPX 8CAF) de donde
quieres romper el programa. BD * (para evitar
innecesarios breaks), e introduce todo tu
numero de serie, entonces BE * y aprieta OK...
�BOOM! estas en la comparaci�n.
Usando estos acercamientos t� no necesitas
modificar el archivo real. �por lo tanto mejor/
m�s f�cil!
|
Crackeando N�meros de serie en
Visual Basic 4+5 (The Sandman)
Crackear Visual Basic todav�a parece a
muchos, un hueso duro de roer porque simplemente
no pueden hacer un listado muerto de �l y
esperar a ver donde van... Por consiguiente
nosotros necesitamos adoptar nuevos m�todos para
enga�ar a esta barrera natural y una posible
manera es localizar rutinas dentro de las
librer�as runtime de VB en las que podemos poner
trampas (breakpoints) con SoftICE.
Para programar Softice para que localice para
nosotros la Rutina de Comparaci�n de String
r�pidamente pondremos las tres l�neas
siguientes en nuestro archivo WINICE.DAT:
AF4="^s 0 l ffffffff
56,57,8B,7C,24,10,8B,74,24,0C,8B,4C,24,14,33,C0,F3,66,A7;"
EXP=C:\WINDOWS\SYSTEM\VB40032.DLL
EXP=C:\WINDOWS\SYSTEM\MSVBVM50.DLL
Esto se ha probado en programas VB4 VB5 y
funciona, sin embargo, si el programa designado
usa Integer/Reals para el n�mero de serie
entonces el programa usar� un juego diferente de
rutinas en lugar de esas, desviando nuestra
Rutina de Comparaci�n de String totalmente...
En orden de combate pienso que he encontrado una
rutina de Integer/Real en VB5 en la que podemos
poner un BPX eso nos mostrar� el numero de serie
*real * que el programa espera que nosotros
usemos...
La Rutina VB5 se parece a:
PUSH EBP-20
CALL MSVBVM50._vbaR8Str ; Convierte string a Integer/Real
FCOMP QWORD PTR [00401028] ; Nuestra comparaci�n num�rica!
Una vez aterrizas en fcomp qword ptr
[00401028] Teclea: DL 00401028 para ver el numero
de serie *real*. DL no es un error de
mecanograf�a, DL quiere decir Visualizar
Long/real mientras que la D simplemente tiene la
propiedad de usar el formato de visualizaci�n
actual... Mira el manual de SoftICE para m�s
informaci�n sobre Comandos de SoftICE.
Bien, ahora tenemos algo nuevo para verificar en
SoftICE, as� que programa este nuevo Macro de
B�squeda en �l...
Abre WINICE.DAT, haz una copia de seguridad
primero ... :)
Aseg�rate de que tienes estas l�neas:
EXP=C:\WINDOWS\SYSTEM\VB40032.DLL
EXP=C:\WINDOWS\SYSTEM\MSVBVM50.DLL
AF3="^s 0 l ffffffff
FF,75,E0,E8,85,EF,FF,FF,DC,1D,28,10,40,00,DF,E0,9E,75,03;"
AF4="^s 0 l ffffffff
56,57,8B,7C,24,10,8B,74,24,0C,8B,4C,24,14,33,C0,F3,66,A7;"
ALT-F3 es nuestro b�squeda de Comparaci�n de
Integer/Real, s�lo trabaja en VB5
ALT-F4 es nuestra b�squeda de Comparaci�n de
String, funciona en VB4 VB5
|
Crackeando N�meros de serie en
Visual Basic 6 (widYa@cL 2011)
Aqu� tengo un m�todo alternativo que
podr�a ser �til cogiendo n�meros de serie en
VB6. ... Primero abre WINICE.DAT, haz los
siguientes cambios:
F5="^x;^dd eax;"
EXP=C:\WINDOWS\SYSTEM\MSVBVM60.DLL
Ve al di�logo de registro y rellena tu datos
de registro favoritos. Ahora debes entrar en
SoftICE (CTRL-D) y poner un breakpoint en
__vbaStrCat funci�n (BPX
MSVBVM60!__vbaStrCat). Ahora deja SoftICE (X
[ENTER]) y aprieta el bot�n de OK en tu
di�logo de registro... #bOOm #... ahora nosotros
debemos aterrizar aqu�:
:66060B5F PUSH EBP
:66060B60 MOV EBP,ESP
:66060B60 MOV EBP,ESP
:66060B62 PUSH EBP
:66060B65 PUSH EAX
:66060B66 PUSH DWORD PTR [EBP+08]
:66060B69 PUSH DWORD PTR [EBP+0C]
:66060B6C CALL [661106E8]
:66060B72 TEST EAX,EAX
:66060B7A MOV EAX,[EBP+08] ; estamos yendo a ver lo que est� en EAX
:66060B7D POP EBP ; estamos sent�ndonos aqu�
:66060B7E RET 0008
Ahora teclea los siguientes comandos:
BC * [ENTER]
BPX 66060B7D [ENTER]
X [ENTER]
Desde aqu�..... �Sigue apretando F5 hasta
que veas un tipo de numero de serie bueno en la
ventana de datos en formato de ancho de
car�cter!
|
|