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