elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a la Factorización De Semiprimos (RSA)


+  Foro de elhacker.net
|-+  Programación
| |-+  Ingeniería Inversa (Moderadores: karmany, .:UND3R:., MCKSys Argentina)
| | |-+  [Reto] Dioniso's Crackme
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Reto] Dioniso's Crackme  (Leído 4,375 veces)
PeterPunk77

Desconectado Desconectado

Mensajes: 77



Ver Perfil
[Reto] Dioniso's Crackme
« en: 23 Noviembre 2011, 01:47 am »

Buenas caballeros,
he creado un pequeño crackme para que se entretengan durante un ratillo.
Está programado en MASM32 y no tiene trucos antidebugger.
La misión, como de costumbre, es crear el keygen. Como creo que es muy sencillo inténtenlo sin programar un bruteforce.

link 1 -> http://www.megaupload.com/?d=GZEJ07G4
link 2 -> http://www.2shared.com/file/SUSxd8Ua/Dionisos_Crackme.html

Saludos.
PeterPunk
En línea

Flamer


Desconectado Desconectado

Mensajes: 1.052


crack, crack y mas crack...


Ver Perfil WWW
Re: [Reto] Dioniso's Crackme
« Respuesta #1 en: 23 Noviembre 2011, 02:46 am »

Ya esta descargado dame  tiempo para resoverlos boy adejar un lado el de mcsys argentina y prosigo con el tuyo
ya que le quiero hacer tutorial al de fly pero ba atener que esperar
saludos flamer
En línea

Mi Canal De Youtube y Blog

https://elblogdeflamer.blogspot.com

Flamer


Desconectado Desconectado

Mensajes: 1.052


crack, crack y mas crack...


Ver Perfil WWW
Re: [Reto] Dioniso's Crackme
« Respuesta #2 en: 23 Noviembre 2011, 06:27 am »

Oye dame tiempo para enviarte el crackme tu yo que resolvi ase tiempo con keygen incluido por privado
saludos :D
En línea

Mi Canal De Youtube y Blog

https://elblogdeflamer.blogspot.com

Flamer


Desconectado Desconectado

Mensajes: 1.052


crack, crack y mas crack...


Ver Perfil WWW
Re: [Reto] Dioniso's Crackme
« Respuesta #3 en: 23 Noviembre 2011, 06:29 am »

Oye dame tiempo para enviarte el crackme tu yo que resolvi ase tiempo con keygen incluido por privado
saludos :D
En línea

Mi Canal De Youtube y Blog

https://elblogdeflamer.blogspot.com

.:UND3R:.
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.118


Ingeniería inversa / MASM


Ver Perfil WWW
Re: [Reto] Dioniso's Crackme
« Respuesta #4 en: 23 Noviembre 2011, 06:51 am »

Hola, he estado viéndolo, poseo la estructura del serial. Pero me surge los siguientes problemas:

El serial introducido es el encargado de des-ofuscar o des-cifrar una función que empieza en 004012D3 que seguramente muestra algún mensaje de que el serial es correcto, pero las funciones son irreversibles, por lo menos para mí ya que pasa por:
004011ED y se sobre escribe un tamaño de 4F luego viene la siguiente función que comienza en 0040127C, esta se encarga de tomar los 4F valores, realiza una fórmula con ellos,el resultado es comparado con el valor correcto que debería si se cumple salta al lugar descifrado, pero si reverseamos hablamos de que hay que reversear 4F valores que están incorrectos, una vez hecho eso se debe adaptar al loop que comienza 004011ED para que escriba los 4F valores descubiertos, aquí mi duda puede ser con fuerza bruta?, existe otra forma a la que comenté?

Saludos


En línea


Solicitudes de crack, keygen, serial solo a través de mensajes privados (PM)
PeterPunk77

Desconectado Desconectado

Mensajes: 77



Ver Perfil
Re: [Reto] Dioniso's Crackme
« Respuesta #5 en: 23 Noviembre 2011, 14:12 pm »

@.:UND3R:. , puedes hacer esa parte con fuerza bruta si quieres. De todas formas creo que se puede resolver sin necesidad de ella, con un poco de estudio.
Saludos.
En línea

.:UND3R:.
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.118


Ingeniería inversa / MASM


Ver Perfil WWW
Re: [Reto] Dioniso's Crackme
« Respuesta #6 en: 29 Noviembre 2011, 17:14 pm »

Nunca logré reversearlo, me gustaría si pudieras tomarte la molestia de explicarme como se puede reversear te lo agradecería:

ID:UND3R
PASS:YXYY<YWWY=XXWY>YXZW

Screenshhot:


Solo logré realizarlo por fuerza bruta:
Iniciamos el Dioniso's fuerza bruta
Colocamos un ID y Generar


0040110E   .  6A 64         PUSH 64                                  ; /Count = 64 (100.)
00401110   .  68 55394000   PUSH Dioniso'.00403955                   ; |Buffer = Dioniso'.00403955
00401115   .  68 B90B0000   PUSH 0BB9                                ; |ControlID = BB9 (3001.)
0040111A   .  FF75 08       PUSH DWORD PTR SS:[EBP+8]                ; |hWnd
0040111D   .  E8 0C020000   CALL <JMP.&user32.GetDlgItemTextA>       ; \GetDlgItemTextA
00401122   .- E9 D93E0000   JMP Dioniso'.00405000
 *Ahí salta a llenar el serial con: WWWW<WWWW=WWWW>WWWW

00401218   .  E8 92000000   CALL Dioniso'.004012AF
0040121D   .  85C0          TEST EAX,EAX
0040121F   .  74 0A         JE SHORT Dioniso'.0040122B
00401221   .  FF75 08       PUSH DWORD PTR SS:[EBP+8]  *COLOCAR BP
00401224   .  E8 AA000000   CALL Dioniso'.004012D3
00401229   .  EB 14         JMP SHORT Dioniso'.0040123F
0040122B   >  E9 2A010000   JMP Dioniso'.0040135A                    ;  Default case of switch 00401184
* Injerto que se dirige a la función de fuerza bruta

En resumen debemos iniciarlo colocar un ID, colocar un BP en 00401221 y luego presionar generar.

En cuanto al tiempo, se demoró 2 días APROX, por lo que no es para nada eficiente, pero si el objetivo es romper con la seguridad del software, entendiendo de alguna u otra forma la estructura del serial y cual es el lugar de comprobación se puede conseguir

De todas formas se podría parchear se modifica el siguiente código y se borra cuando se escribe en la función de serial incorrecto y se agrega lo siguiente:
Código:
B8 01 00 00 00 EB 02 33 C0 C3 55 8B EC EB 32 45 6E 68 6F 72 61 62 75 65 6E 61 20 63 72 61 63 6B
65 72 2E 0D 0A 0D 0A 41 68 6F 72 61 20 70 72 6F 67 72 61 6D 61 20 65 6C 20 6B 65 79 67 65 6E 2E
00 6A 00 68 6C 30 40 00 68 D8 12 40 00 FF 75 08 E8 1C 00 00 00 C9 C2 04 00
Por lo que cada vez que se tenga el serial pasará por la función ya descifrada

Descargar Brute-Force:
http://www.mediafire.com/?tl5gzryr5u0q1a4

Si tengo más tiempo seguiré revisándolo, Saludos
En línea


Solicitudes de crack, keygen, serial solo a través de mensajes privados (PM)
PeterPunk77

Desconectado Desconectado

Mensajes: 77



Ver Perfil
Re: [Reto] Dioniso's Crackme
« Respuesta #7 en: 30 Noviembre 2011, 21:40 pm »

Buenas .:UND3R:.,
la verdad es que no se qué quieres que te explique.
La primera parte del crackme es obvia: con el crc32 del nombre y el serial introducido (en base 4) hago un xor y el resultado es un dword que es el usado para descifrar el procedimiento que muestra el mensaje de chico bueno. Así que lo único que necesitamos hacer es encontrar esta dword.
Una forma de hacerlo es encontrarla por fuerza bruta, por ejemplo con este código:
Código:
.386
.model flat,stdcall
option casemap :none

include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc

includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib

.data
    cte db 084h, 08Eh, 056h, 02Bh, 0E3h, 040h, 0D4h, 0A8h, 0BEh, 077h, 0DBh, 0A2h, 0A4h, 060h, 0D4h, 0A1h
        db 0F1h, 066h, 0C8h, 0A1h, 0B2h, 06Eh, 0DFh, 0B2h, 0FFh, 008h, 0B0h, 0CDh, 0DBh, 044h, 0D2h, 0AFh
        db 0A3h, 064h, 09Ah, 0B0h, 0A3h, 06Ah, 0DDh, 0B2h, 0B0h, 068h, 0DBh, 0E0h, 0B4h, 069h, 09Ah, 0ABh
        db 0B4h, 07Ch, 0DDh, 0A5h, 0BFh, 02Bh, 0BAh, 0AAh, 0D1h, 06Dh, 0D6h, 0F0h, 091h, 005h, 0D2h, 018h
        db 0C3h, 045h, 0BAh, 03Fh, 0A4h, 00Dh, 052h, 0DCh, 0D1h, 005h, 0BAh, 009h, 013h, 001h, 0BAh
    CRCPOLY dd 0EDB8831Fh
    dwCRC32 dd 3C048143h
    szHex db "%X",0
    szTitulo db "Brute", 0

.data?
    CRCTaboa db 1024 dup (?)
    funcion_encriptada db 80 dup (?)
    dwNumMaxico dd ?
    szNumMaxico db 9 dup (?)
    
.code

start:
    call taboa_crc32
@bucle_bruto:
    mov edx, dwNumMaxico
    mov esi, offset cte
    mov edi, offset funcion_encriptada
    xor ecx, ecx
@@:            
    mov eax, [esi]
    mov [edi], eax
    add esi, 4
    add edi, 4
    inc ecx
    cmp ecx, 19
    jb @B
    mov ax, word ptr [esi]
    mov word ptr [edi], ax
    mov al, byte ptr [esi + 2]
    mov byte ptr [edi + 2], al
    mov esi, offset funcion_encriptada
    mov ecx, 20
@@:            
    xor [esi], edx
    add esi, 4
    loop @B
    push offset funcion_encriptada
    push 79
    call crc32
    cmp eax, dwCRC32
    jz @correcto
    inc dwNumMaxico
    jmp @bucle_bruto
@correcto:
    push dwNumMaxico
    push offset szHex
    push offset szNumMaxico
    call wsprintf
    add esp, 12
    push MB_OK
    push offset szTitulo
    push offset szNumMaxico
    push 0
    call MessageBox
    push 0
    call ExitProcess

taboa_crc32 proc    
    push ebx
    mov edi, CRCPOLY
    inc edi
    xor ebx, ebx
    mov ecx, offset CRCTaboa
taboa_bucle:
    movzx eax, bx
    add eax, eax
    mov dx, 0fff7h
taboa_salto:
    test al, 01h
    jz taboa_salto_1
    shr eax, 01h
    xor eax, edi
    jmp taboa_salto_2
taboa_salto_1:
    shr eax, 01h
taboa_salto_2:
    inc dx
    jnz taboa_salto
    mov [ecx], eax
    inc ebx
    add ecx, 04h
    cmp bx, 0100h
    jnz taboa_bucle
    pop ebx
    ret
taboa_crc32 endp

crc32 proc len:DWORD, lpBuffer    
    mov ebx, lpBuffer
    mov esi, len
    mov edi, 0FFFFFFFFh
crc32_bucle:
    mov edx, edi
    mov eax, [ebx]
    and eax, 0FFh
    xor al, dl
    mov eax, [eax * 4 + offset CRCTaboa]
    shr edx, 08h
    xor eax, edx
    mov edi, eax
    inc ebx
    dec esi
    jnz crc32_bucle
crc32_salir:
    not edi
    mov eax, edi
    ret
crc32 endp

end start
y una vez encontrada ya podemos hacer un keygen fácilmente.
De todos modos yo no lo haría así, y aunque creo que el código de arriba no tardará ni media hora en encontrar la palabra mágica, seguramente la intentaría intuir:
Estudiando el resto del programa suponemos que las tres primeras instrucciones serán:
Código:
004012D3  /$ 55             PUSH EBP
004012D4  |. 8BEC           MOV EBP,ESP
así que si hacemos el xor de desencriptación de estos tres valores con los de la función encritpada nos escontramos con que los tres primeros bytes del dword mágico serían 0xD105BA?? y ahora podríamos hacer un brutalizador aún más rápido, con sólo 256 posibilidades. De esta forma me lo solucionaron en otro foro.
Y es que sí, el procedimiento empieza con "Push EBP y Mov EBP, ESP". ¿Por qué? Porque cuando programé el código quería que fuese solucionable sin fuerza bruta y el compilador MASM cuando llamo a un procedimiento al que le envío parámetros comienza con esas instrucciones para controlar la pila.
Así que le envío un parámetro del que realmente podría prescindir pero necesario para poder solucionarlo sin fuerza bruta, ya que, además de empezar con esas instrucciones, acabará con
Código:
0040131E  |. C9             LEAVE
0040131F  \. C2 0400        RETN 4
y aquí si que conozco 4 bytes seguidos para poder encontrar la clave mágica sin tener que crear nada.
Bueno, tendríamos que fijarnos que hay un RETN 4, porque precisamente sólo le envié un parámetro dword al procedimiento. Si vemos el regreso del procedimiento que calcula el CRC32 vemos que acaba con un RETN 8 porque se le envían 2 parámetros (inicio de memoria y longitud).
0xC9C20400 xor 091301BA = 0xC0D105BA
que está desordenado porque tenemos 79 bytes a cifrar/descifrar, así que 79 mod 4 = 3. Corremos los tres bytes y obtenemos el dword bueno.

@.:UND3R:. si no es esto lo que querías que te explicase por favor vuelve a preguntarme.

Saludos.
En línea

.:UND3R:.
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.118


Ingeniería inversa / MASM


Ver Perfil WWW
Re: [Reto] Dioniso's Crackme
« Respuesta #8 en: 1 Diciembre 2011, 00:06 am »

Era tal cual lo que necesitaba saber, muchísimas gracias en cuanto a CRC32 desconocía pasar de manera manual un CRC32 y ahora me doy cuenta lo cuanto se aprende con crackmes aprendí de manera manual el trabajo de un CRC32 y como poder solucionarlo  ;-)

Muchísimas gracias, sinceramente estaba complicado para mi, Saludos y gracias por tomarte el tiempo de responderme
En línea


Solicitudes de crack, keygen, serial solo a través de mensajes privados (PM)
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
RETO: Crackme muy sencillo :) A por el! « 1 2 »
Ingeniería Inversa
Rojodos 10 6,941 Último mensaje 6 Agosto 2004, 00:50 am
por bano
Reto: Crackme en Vfp.
Ingeniería Inversa
krc_4u 0 2,364 Último mensaje 12 Abril 2005, 02:19 am
por krc_4u
[Reto] Crackme V2 ASM « 1 2 »
Ingeniería Inversa
cibergolen 14 9,510 Último mensaje 27 Noviembre 2011, 12:39 pm
por cibergolen
[Reto] Crackme V3 ASM
Ingeniería Inversa
cibergolen 2 4,014 Último mensaje 10 Diciembre 2011, 16:14 pm
por Flamer
Reto (¿crackme?) para CheatEngine o similares.
Ingeniería Inversa
Mad Antrax 3 4,166 Último mensaje 6 Octubre 2013, 21:45 pm
por ivancea96
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines