| Víctima: |
Delphy CrackMe 2.d
|
| URL: | |
| Descripción: |
Programa
cuya unica finalidad es ser crackeado
|
| Tamaño del ejecutable: |
133
Kbytes
|
| Tipo de Protección: |
Anti-Win32Dasm,
Anti-FrogSice, posible Encriptacion y Serial
|
| Método de ataque |
Obtencion
de la rutina de generacion del serial a traves del SoftIce
|
| Objetivo |
Serial
& Keygen
|
| Cracker |
Mr_Burns
[K-FoR]
|
| Dificultad |
Newbie
- Aficionado - Avanzado
- Experto - Élite
|
| Herramientas |
SofIce,
papel y boli & Tasm v5.0
|
| Fecha: |
6-12-2000
|
|
|
|
HOLA DE NUEVO A TODOS!!! Espero que mi demora en el mundillo de los tutoriales no haya sido tan grande. Ante la falta de tiempo, mis proyectos Underground se ven retrasados, pero gracias a este puente, os podre “deleitar” con otro tutorial mas.
Antes de nada explicar que el CrackMe ha sido creado por 2Sweeet, no lo conozco pero he visto trabajos suyos y, la verdad, me han parecido bastante majos.
Despues de tanto sentimentalismo creo que deberiamos empezar con el trabajo, el cual me ha gustado hacer ;-)
|
|
|
Comenzamos ejecutando el CrackMe. Observamos que tenemos 3 editbox para introducir nuestros datos, y tres botones: “Register”, “Close” y“About”. Bueno, introducimos nuestros datos y apretamos “Register”, veremos que abajo de la win nos pone “Status: Wrong Code”. Vaya!!! Parece que no he acertado en el serial xDDDDD
Una vez estudiado como funciona el CrackMe haremos lo siguiente:
1º. Ejecutamos el Win32Dasm y lo desensamblamos... pero... en la direccion 41FCBC éste se nos cuelga. Esto quiere decir que hay dos posibilidades: esta empakado y/o encriptado o tiene anti-desensamblador. Yo voto por el anti-desensamblador porque el tamaño del CrackMe no es muy pequeño que digamos.
2º. Como no nos ha rulado, seguiremos probando con el IDA Pro a ver si sus protecciones anti-desensamblador se las puede saltar... pero tampoco nos rula. Este nos indica que no puede abrirse. :(
3º. Ejecutaremos el ProcDump para ver si esta encriptado el dichoso programilla de los ..... ;-) Pero... tampoco funciona, al abrir el CrackMe a traves de el “PE Editor” no avisa con una frase como esta “Error while accesing the file (READ/WRITE)”.
4º. Nos aferraremos a la unica posibilidad que tenemos: el SoftIce (SICE). Abrimos el CrackMe y rellenamos nuestros datos:
Username: Mr_Burns
Company: K-FoR
Key-String: 12345678
Al rellenar el serial nos daremos cuenta que tan solo nos deja introducir 8 caracteres. Hmmmm!!! Esto me esta dando una pistas preciosas... el serial puede que este en Hexadecimal!!!
Despues de esta deduccion, nos metemos en el SICE (Control + D) y metemos un bpx hmemcpy, y salimos de nuevo al CrackMe para apretar el boton “Register”. Inmediatamente saltamos al SICE, de nuevo. Quemamos la tecla F12 hata llegar a la direccion 442291 donde observamos que eax = Username.
Auna vez aqui seguiremos
dos caminos: uno sacar un serial valido; y una vez conseguido esto buscar
la rutina de generacion del serial.
|
|
|
A medida que traceamos vemos algo como esto:
mov eax,[ebp-04] <--- EAX = Nombre
Call 403BF8 <--- Comprueba que haya algo escrito, osea difrente de 0
Call 407904 <--- Capta el nº de letras que posee el nombre
mov ecx,eax <--- ECX = Nº de letras
mov edi,1
mov eax,1
cmp eax,ecx <--- Comprueba que el nombre sea mayor que 1 sino... error
ja 4422BD
...
Despues de haber comprobado que el nombre es correcto y haber sido guardado, realiza exactamente la misma operación con la compañía. Tracenado mas sobre el codigo vemos que realiza una serie de opreciones... hasta llegar a un salto sospechoso en 442293 donde aparece:
mov edx,[ebp-18] <--- Nuestro serial (12345678)
mov eax,[ebp-14] <--- EL SERIAL CORRECTO!!!!!!!! (B2B6D624)
Call 403B44 <--- Compara los serial
jz 4425AC <--- Salta si son iguales
Espero no tener que deciros que para ver el serial verdadero teneis que poner “d eax” ;-)
Como podreis ver, llegar a descubrir el serial es extremadamente facil. Una vez apuntado nuestro serial salimos del SICE y lo comprobamos para ver si ese es el verdadero, no hace falta que os diga que si que lo es xDDDD
Ahora iremos a por el
keygen!!!!
|
|
|
Una vez obtenido el serial correcto, nos dedicaemos a un estudio mas en profundidad sobre el codigo, para captar el generador de llaves. Asi que volvemos a ejecutar el CrackMe, introducimos los datos, entramos en el SICE, ponemos le bpx hmemcpy, salios del SICE, apretamos “Registrar”, y vamos de nuevo a la direccion 442291. Alli podremos observar lo siguiente:
mov eax,[ebp-04] <--- EAX = Nombre
Call 403BF8 <--- Comprueba que haya algo escrito oase difrente de 0
Call 407904 <--- Capta el nº de letras que posee el nombre
mov ecx,eax <--- ECX = Nº de letras
mov edi,1
mov eax,1
cmp eax,ecx <--- Comprueba que el nombre sea mayor que 1 sino... error
ja 4422BD
mov edx,[ebp-04] <-- Edx apunta a la Nombre
movzx edx,byte ptr [eax+edx-01] <-- Edx = carácter de la nombre
inc eax <-- Eax + 1
add edi,edx <-- Edi + Edx
cmp eax,ecx <-- Compara eax con ecx
jbe 4422AE <-- Si eax > ecx Realiza de nuevo la operacion
lea edx,[ebp-0C]
mov eax,[ebx+2C8]
Call 423224
Una vez terminado el bucle que trabaja con el Username (en mi caso Mr_Burns) tenemos guardado un numero en edi que usara mas adelante, para poder verlo introducimos “? edi” (en mi caso sera 809). Despues de haber trabajado con el Username, va a por el Company:
mov eax,[ebp-0C] <-- eax apunta a la compañia
Call 403BF8 <-- Comprueba que halla escrito algo
Call 407904 <-- Nº de caracteres de la compañia
mov [ebp-08],eax <-- [ebp-08] = Nº de caracteres de la compañia
mov esi,1
mov eax,1
cmp eax,[ebp-08] <-- Compara eax con [ebp-08]
ja 4422FA <-- Si eax > [ebp-08] ERROR!
mov edx,[ebp-0C] <-- Edx apunta a la compañia
movzx edx,byte ptr [eax+edx-01] <-- Edx = Carácter de la compañia
inc eax <-- Eax + 1
add esi,edx <-- esi + edx
cmp eax,[ebp-08] <-- Compara eax com [ebp-08]
jbe 4422EA <-- Si eax > [ebp-08] Realiza de nuevo la operacion
Espero que os hallais dado cuenta que realiza exactamente la misma operación con la compañía (en mi caso K-FoR) y que el resultado de esa serie de operaciones esta guardado en esi, para poder verlo poneis “? esi” (en mi caso sera 384)
Despues de esto hay una serie de operaciones a las que no debemos hacer caso, asi que tracearemos hasta llegar a la direccion 442351, donde veremos:
lea eax,[edi+esi] <-- eax = edi + esi
imul eax,eax,1F2h <--
mov [ebp-10],eax <-- [ebp-10] = eax
mov eax,[ebp-10] <-- Viceversa
imul dword ptr [ebp-10] <-- eax * [ebp-10]
imul edi <-- Multiplicacion por edi
mov [ebp-10],eax <-- [ebp-10] = eax
sub [ebp-10],esi <-- [ebp-10] - esi = SERIAL CORRECTO!!!!
Al final de esta serie de operaciones tenemos en [ebp-10] un numero un tanto atractivo... ¿y sabeis porque? Pq el numero es nuestro serial correcto en decimal!!!!!!!!!! Cuando consegui el serial, lo primero que hice es pasarlo a decimal ya que la mayoria de las veces se trabaja en decimal para luego pasarlo a otra base. Asi que ya estaba todo solucionado... ahora habia que hacer el KeYgEn en ASM.
Con todos los comentarios que he puesto en el tutorial no creo que os resulte dificil hacel el keygen en cualquier otro lenguaje, y para los que sabemos programar en asm esto no es nada ya que tan solo hay que copiar. Como el tamaño de este tutorial ha sobrepasado mis intenciones os pondre tan solo el codigo comentado (como hago siempre) y nada mas, aun asi si teneis cualquier tipo de duda, mandadme un mail.
;Delphi CrackMe 2.d KeYgEn
;CoDeD bY Mr Burns [K-FoR]
;DaTe:
4-12-2000
.MODEL TINY
.CODE
.386
ORG
100h
Start:
jmp LetsRock
Intro db 10,13,'Delphi CrackMe 2.d KeYgEn CoDeD bY Mr. Burns [K-FoR]'
db 10,13,'THe CRaCKMe iS WRiTTeN bY 2Sweeet'
db 10,13,'WeBSiTeS: http://go.to/mr_burns/'
db 10,13,' http://kfor.cjb.net/',10,13
db 10,13,'eNTeR YouR USeRNaMe: '
Nombre db 50,0
Nombre2 db 50 DUP(0)
CompanyOut db 10,13,'eNTeR YouR CoMPaNy: $'
Company db 25,0
Company2 db 25 DUP(0)
SerialOut db 10,13,'YouR KeY-STRiNG iS: '
Serial db 9 DUP(0)
SerialEnd db 10,13,'$'
TempSerial db 9 DUP(0)
TempSerialEnd
db 0
LetsRock:
mov ah,09h ;Introduce un texto por pantalla
lea dx,Intro
int
21h
mov ah,0Ah ;Lee el nombre introducido
lea dx,Nombre
int
21h
mov edi,1 ;EDI = 1
mov
eax,1 ;EAX = 1
NameLooP:
lea edx,Nombre2 ;EDX apunta al Nombre
movzx edx,byte ptr [eax+edx-1] ;edx caractrer del nombre
inc eax ;EAX + 1
add edi,edx ;EDI + EDX (resultado en EDI)
cmp eax,ecx ;Compara EAX con ECX
jbe
NameLooP ;Si EAX < ECX salta
mov ah,09h ;Saca un texto por pantalla
lea dx,CompanyOut
int
21h
mov ah,0Ah ;Lee la compañia
lea dx,Company
int
21h
mov esi,1 ;ESI = 1
mov
eax,1 ;EAX = 1
CompanyLooP:
lea edx,Company2 ;EDX apunta a la Compañia
movzx edx,byte ptr [eax+edx-1] ;EDX = Caracter de la compañia
inc eax ;EAX + 1
add esi,edx ;ESI + EDX (resultado en ESI)
cmp eax,ecx ;Compara EAX con ECX
jbe
CompanyLooP ;Si EAX < ECX salta
mov ecx,edi ;ECX = EDI
add edi,esi ;EDI + ESI
mov eax,edi ;EAX = EDI
imul eax,eax,1F2h ;
mov ebx,eax ;EBX = EAX
mov eax,ebx ;EAX = EBX
imul ebx ;* EBX
mov edi,ecx ;EDI = ECX
imul edi ;* EDI
mov ebx,eax ;EBX = EAX
sub ebx,esi ;EBX - ESI = Serial en decimal
mov
eax,ebx ;EAX = EBX = Serial
Hex_Convert: ;Rutina que convierte el numero decimal
lea esi,TempSerialEnd-1 ;a Hexadecimal y que no voy a comentar.
mov
edx,4
Loopy:
xor ebx,ebx
mov bl,al
movzx ebx,bl
and bl,0Fh
add bl,30h
cmp bl,39h
jle Ok1
add bl,7
mov byte ptr [esi],bl
dec esi
jmp
Part2
Ok1:
mov byte ptr [esi],bl
dec
esi
Part2:
mov bl,al
movzx ebx,bl
shr bl,4
add bl,30h
cmp bl,39h
jle Ok2
add bl,7
mov byte ptr [esi],bl
dec esi
jmp
Part3
Ok2:
mov byte ptr [esi],bl
dec
esi
Part3:
shr eax,8
dec edx
jnz
Loopy
ConvertDone:
inc esi
lea
di,Serial
CopyNumber:
movsb
cmp byte ptr [esi],0
jne
CopyNumber
mov ah,09h
lea dx,SerialOut
int 21h
mov ah,4Ch
int
21h
;
end start
|
|
|
Antes de marcharme me guataria saludar a todos los miembros del grupo K-FoR, en especia a ViPeR y a Pr@fesor X... y me gustaria saludar tambien a todos los componentes del canal #crackers.
Espero volver a veros pronto por aquí, aunque todo depende del tiempo que tenga.
Como siempre digo en mis tutoriales, si deseais hablar conmigo buscad en:
|
|
|
|
|
|
|
|
|
|
|
|
O por el contrario si tan solo deseas mandarme un e-mail: mr_burns_kfor@hotmail.com
http://go.to/mr_burns/http://mr_burns.go.to/http://mrburns.da.ru/
http://pagina.de/kforhttp://kfor.cjb.net
df“La ignorancia no es una es una excusa, es una opción.”