TORN@DO presents: cRACKER's n0TES

Tips & Trucos para crackear Serials



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!


The cRACKER's n0tES esta dividido dentro de 12 partes principales:
 TX. Notas del Traductor
 00. INDICE
 01. Ensamblador para Cracker (CoRN2)
 02. SoftICE (Menú de arranque , Configuración, Comandos)
       
 1 Menú de arranque
       
 2 Configuración
       
 3 Comandos
 03. Breakpoints & Detalles de API de Windows
       
 1 Programas restringidos
       
 2 Cajas de diálogo
       
 3 Verificando el Tipo de unidad
       
 4 Acceso a archivos
       
 5 Acceso al Registro
       
 6 Cogiendo números de serie
       
 7 Accediendo a Tiempo & Fecha
       
 8 Generando ventanas
 04. Instrucciones de salto
 05. Instrucciones SET
 06. Tips & Trucos para Crackear
       
 1 Programas restringidos
       
 2 Dongles
       
 3 General
       
 4 Configuración de InstallSHIELD
       
 5 Protecciones con Archivo llave
       
 6 Pantallas molestas
       
 7 Límites de Runtime
       
 8 Serials
       
 9 Limites de Tiempo
       
10 Programas Visual BASIC
 07. Ventanas de Mensajes Para los Cracker
 08. Identificando funciones, Argumentos, y Variables (Rhayader)
 09. Los Sistemas de Protecciones de comerciales
       
 1 Armadillo
       
 2 C-Dilla SafeDISC
       
 3 SalesAgent
       
 4 SecuROM
       
 5 softSENTRY
       
 6 TimeLOCK
       
 7 VBox
 10. Bitmanipulation (Cruehead)
 11. Teoría general de Cracking
 12. FAQ

 +A. Cómo contactar conmigo
 +B. ¿Que es lo Nuevo?


 



The cRACKER's n0TES are Copyright 1998-2000 by TORN@DO of ID.
Todo los Derechos Reservados.
Traducido por
Revisado por X-Grimator.