ESTUDIO COLECTIVO DE DESPROTECCIONES
Última Actualizacion: 25/10/2001

Programa Flash 32 v2.xx W95 / W98 / NT
Descripción Programa capturador de pantallas, creador de avis, etc...
Tipo Trial de 30 dias
Tipo de Tutorial [X]Original, []Adaptación, []Aplicación, []Traducción
Url http://www.logipole.com
Protección Serial Number
Dificultad 1) Principiante, 2) Amateur, 3) Aficionado, 4) Profesional, 5) Especialista
Herramientas SoftIce v4.0
Objetivo Obtención de un número de Serie, Patch y creación de KeyMaker
Cracker Mr.GReeN
Grupo Whiskey Kon Tekila
Fecha 04 de Mayo de 2000

INTRODUCCION
En este tutorial vamos a examinar una simple rutina de generación de número de serie y como traducir del Win32Asm a cualquier lenguaje de Alto Nivel la rutina, con el objeto de crear un KeyMaker para este programa.

Bien, al abrir la ventana de registro nos encontramos que contiene tres boxes: Apellido, Nombre y Serial. No hay más misterios!
AL ATAQUE
Bien, para ahorrar tiempo y complejidad al tutorial, diré que existe una rutina que intercala entre el Apellido y el Nombre una cadena con la que se vá a generar el serial: "Flash 32".

Por los tanto la cadena completa queda asi: Mr.GReeNFlash 32[WkT!]

Entramos en Soft-Ice previo BPX HMEMCPY y seguimos con los pasos reglamen- tarios que todos ya conocemos.

k!, Ya hemos llegado. Las direcciones que aqui se mostrarán son ficticias, solo para uso informativo. Bien, nos encontramos con la rutina de creación de Serial:

41FBA5 MOV ECX, BYTE PTR [EAX]; Carga en ECX cada uno de los caracteres de la cadena

41FBA8 XOR ECX, DWORD PTR [ESP+10]; Valor inicial ESP+10=FFFFFFFF y guarda el resultado en ECX.

41FBAC XOR ECX, 13579ACE; Lo xorea con este valor (dec=324508366) y vuelve a guardar el resultado en ECX.

41FBB2 INC EAX; Siguiente carácter.

41FBB3 MOV DWORD [ESP+10], ECX; Guarda en ESP+10 el valor de ECX (ya no será FFFFFFFF lo que está almacenado ahí).

41FBB7 CMP BYTE PTR [EAX], 00 ; Se alcanzó el final de la cadena????

41FBBA JNE 0041FB9D No!, pues salta pa arriba a una dirección que no interesa y continúa calculando!.

41FBBC MOV EAX, DWORD PTR [ESP+10] Si!. Se acabó la cadena y se guarda en EAX el valor almacenado en ESP+10.

41FBB2 LEA EDX, DWORD PTR [ESP+000000BC] Carga en EDX nuestro serial malo entrado en la 3º caja de la ventana de registro.

41FBC7 XOR EAX, 2468BDF0; Vuelve a xorear el resultado del cálculo de la cadena por 610844144 (decimal)

41FBCC PUSH EDX; Guarda el serial malo

41FBCD MOV DWORD PTR [0046ABF4], EAX; Guarda en esta offset el valor final: NUESTRO SERIAL CORRECTO!

41FBD2 CALL 004421DD; Llamada no interesante!!! Se curra el serial malo y lo guarda en EAX!.

41FBD7 MOV ECX, DWORD PTR [0046ABF4]; Almacena el serial bueno en ECX

41FBDD ADD ESP, 00000004; No nos interesa!.

41FBE0 CMP EAX, ECX; Compara el serial Malo y el Bueno! AQUI PATCHEA- MOS y hacemos eque ECX se compare consigo mismo!!!

41FBE2 JZ 0041FC12 ------> REGISTRADO!

***************************************

Pos bueno, yastá entendida la rutina que genera el serial correcto, podemos hacer en cual- quier lenguaje de alto nivel el Keygen correspondiente a este programilla shareware. Solo hay que recordar que el NICK debe estar en minusculas y qye empieza por el último carac- ter.

Valga un sencillo ejemplo en VBasic, ok?, a lo bestia y sin depurar. :-O

Private Sub Command1_Click()
Dim nick As String
Dim ecx, eax, paso, x As Double


' Text2.Text = Nombre y Text1.Text = Apellido. Cadena= Mr.GReeNFlash 32[WkT!]
nick = Text2.Text + "Flash 32" + Text1.Text

L = Len(nick) 'Longitud de la cadena.

paso = 0 'Porque FFFFFFFF = 0 :) Es ESP+10 como valor inicial


For x = 1 To L
' Iniciamos el bucle

ecx = Asc(Mid$(nick, x, 1))
'Cargamos en ECX cada uno de los caracteres de la cadena

ecx = ecx Xor paso 'recuerda paso = ESP+10
ecx = ecx Xor 324508366#
'XOR ECX, 13579ACE
paso = ecx
'MOV [ESP+10], ECX
Next
'Salta si no es 0

eax = paso '
MOV EAX, [ESP+10]
eax = paso Xor 610844144#
'XOR EAX, 2468BDF0

(RESULTADO NO ES EL SERIAL BUENO)

Tenemos que hacer algunos reajustes :) El resultado en EAX está desbordado por lo tanto:

If eax < 4294967295# Then eax = (eax - 4294967295#) OK!!! pero no sale negativo!!! (4294967295 = FFFFFFFF)

eax = -eax 'Pues lo convertimos en positivo!!!!

Text3.Text =
eax Nuestro Serial pá nuestro nick!!!!!

End Sub ' Adiós !


Y ya está todo hecho Newbies ;-). AstalaVista

  
*±±========-*-*-*-* P E R S O N A L   G R E E T Z *-*-*-*-========±±*
   A todos los Crackers del pasado, del presente y del futuro.
[ Entrada | Documentos Genéricos | WkT! Web Site ]
[ Todo el ECD | x Tipo de Protección | x Fecha de Publicación | x Orden Alfabético ]
(c) Whiskey Kon Tekila [WkT!] - The Original Spanish Reversers.
Si necesitas contactar con
nosotros , lee esto antes e infórmate de cómo puedes ayudarnos