Crackme 05 consola obfuscado

Iniciado por _Enko, 23 Octubre 2011, 12:29 PM

0 Miembros y 1 Visitante están viendo este tema.

_Enko

Para aquellos que les guste nopear saltos  :rolleyes:

A ver quien encuentra el salto correcto!!!


Objetivo: Hacer un parche para ver mensaje de "buen chico" o bien, encontrar clave valida. (no vale invertir cadenas de los mensajes)
Detalle:
*)El crackme no esta empaquetada
*)El crackme esta sumamente obfuscado
*)La validacion es sumamente sencilla
*)Esta en modo consola, al arrancar ingresen el serial, boton enter y rezar ^^

Dificultad: Ni idea, depende en lo que se tarde en resolver, ya me lo comentaran.

Vale tanto parche como encontrar el serial valido.



http://www.mediafire.com/?x0m3r29wv99xx5j
http://www.megaupload.com/?d=WPS6NGIN

Tinkipinki

#1
Saludos _Enko :

No se si me acerco pero creo que:

Mensaje de serial valido en: 401014
Mensaje de serial no valido en: 401024

..pero no se mas, ni como poder ver bien el codigo de estas direcciones (ofuscado).

Este va a ser un crackme super interesante, agradecer a ti y a todos los que programais crackme's vuestras aportacines.

Saludos

_Enko

#2
El codigo de la aplicacion es si, son 50 intrucciones que estan obfuscadas  y se cuadruplican aproximadamente.
Es un crackme de tipo analizar bien lo que se ve y descartar lo inutil.

pd:
401XXX es  sección data '.data', ahi no estan los mensajes del serial valido e invalid, sino las cadenas de esos mensajes.
De hecho, si inviertes las cadenas obtienes el resultado de 'serial valido', pero no es el objetivo xD

pista: todo el codigo se encuentra a partir de del entry point en 40200.... no hay codigo antes.


ThunderCls

Por parte de la ofuscacion ha estado bueno, bastante "basura" en medio del camino para despistar y dificultar el traceo. Por parte del serial, como bien dices...es tan sencillo como:

serial + 1 = 45AC34BE
      serial = 45AC34BE - 1
      serial = 45AC34BD


Saludos

PD: Si con ese nivel de ofuscacion se le agrega un algoritmo de registro mas trabajado, el crackme seria mucho mas duro.  ;)
-[ "...I can only show you the door. You're the one that has to walk through it." – Morpheus (The Matrix) ]-
http://reversec0de.wordpress.com
https://github.com/ThunderCls/

_Enko

#4
Cita de: [ Thunder | CLS ] en 24 Octubre 2011, 22:10 PM
Por parte de la ofuscacion ha estado bueno, bastante "basura" en medio del camino para despistar y dificultar el traceo. Por parte del serial, como bien dices...es tan sencillo como:

serial + 1 = 45AC34BE
     serial = 45AC34BE - 1
     serial = 45AC34BD


Saludos

PD: Si con ese nivel de ofuscacion se le agrega un algoritmo de registro mas trabajado, el crackme seria mucho mas duro.  ;)
Lo hice asi de facil para que la peña intentara resolverlo, pero por lo visto no hubo muchos voluntarios.

Si quires resolver un keygen interesante, intenta con
http://foro.elhacker.net/ingenieria_inversa/keygenme4_console-t342421.0.html

te aseguro que el algoritmo es super novedoso y el codigo bien prolijo ^^

.:UND3R:.

No había intentado este crackme de _Enko

el código está muy bien ofuscado para tracear, puede complicarnos y despistarnos un poco, traceando llego a la siguiente comparación:


00402536   ?  813D 47104000>CMP DWORD PTR DS:[401047],45AC34BE

en donde si miro en el dump el contenido de 401047 notaré que está el serial introducido incrementado en 1 es decir si mi serial es 989898 aparecerá 989899, por lo que la comprobación correcta, debería ser

CMP 989898,45AC34BE-1

en salto a modificar es:
00402551   ? /74 39         JE SHORT crackme5.0040258C

Si lo invertimos tendremos el serial válido, de todas maneras los créditos son exclusivamente de [ Thunder | CLS ] que lo crackeo mucho antes que yo


Saludos





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

_Enko

Para aquellos que lo han intentado resolver, les dejo el source para que vean lo facil que hubiera sido sin la obfuscacion.
[spoiler]
Código (asm) [Seleccionar]

format PE Console
entry start

include '%fasminc%\win32a.inc'
include '%fasminc%\macro\if.inc'

random_seed = 4234;

macro random {
random_seed = ((random_seed*214013+2531011) shr 16) and 0xffffffff
mov eax, random
}

macro jmp dest {
    push dest
    retn
    db $74
}


macro call dest {
    local ..ret
    push ..ret
    jmp  dest
    ..ret:
}

macro mov dest,src {
    local .._mov,.._over,.._quit
    jmp  .._over
    db $73
    dd $
  .._mov:
    mov dest,src
    jmp .._quit
  .._over:
    jmp .._mov
    cmp ecx, [$]
    db $74
   
  .._quit:
}
macro add dest,src {
    local .._add,.._over,.._quit
    jmp  .._over
    lea eax, [eax* 2 + $]
    db $75
  .._add:
    add dest,src
    jmp .._quit
    cmp eax, $
  .._over:
    jmp .._add
    cmp eax, $
    db $76
  .._quit:
}


macro xor dest,src {
    local .._add,.._over,.._quit
    jmp  .._over
    lea eax, [ebx + ecx * 2 + $]
    db $79
  .._add:
    xor dest,src
    jmp .._quit
  .._over:
    jmp .._add
    lea eax, [ebx + ecx * 2 + $]
    db $7a
  .._quit:
}

macro lea dest,src {
    local .._add,.._over,.._quit
    jmp  .._over
    db $7b
  .._add:
    lea dest,src
    jmp .._quit
  .._over:
    jmp .._add
    db $7c
  .._quit:
}

macro je dest {
local ..over
    jmp ..over
    db $75
    ..over:
    je dest
}

macro push op {
local ..over
    jmp ..over
    cmp eax, [$]
    db $7d
   
    ..over:
    push op
}


section '.data' data readable writeable
szPause  db 'PAUSE',0
szInt db '%i',0
szStr db '%s',0
szHex db '%X',0
szNewStr db '%s',10,13,0
szValid db 'serial valido',10,13,0
szNotValid db 'serial no valido',10,13,0
szInput db 16 dup ?
iSerial dd ?
_printf dd ?
_scanf dd ?
_sscanf dd ?

     
   
   
section '.code' code readable executable
start:
push ebp
mov ebp, esp

mov eax, [printf]
mov [_printf], eax
mov eax, [scanf]
mov [_scanf], eax
mov eax, [sscanf]
mov [_sscanf], eax

xor ebx, ebx
mov esi, 0xFF
push szInput
xor ebx, ebx
push szStr
call [ebx + _scanf]
add esp, 8


push iSerial
push szHex
push szInput
call [_sscanf]
add esp, 12

inc [iSerial]
lea eax, [ebx + szValid + esi * 2]
cmp [iSerial], 0x45AC34BD + 0x1
je end_validation
lea eax, [ebx + szNotValid + esi * 2]
end_validation:
push eax
sub [esp], esi
push szStr
sub [esp + 4], esi
call [ebx + _printf]
add esp, 8

push szPause
call [system]
add esp, 4

pop ebp
retn





section '.idata' import data readable writeable

library kernel32,'kernel32.dll',\
user32,'user32.dll',\
msvcrt,'msvcrt.dll'

include '%fasminc%\api\kernel32.inc'
include '%fasminc%\api\user32.inc'
include '%fasminc%\api\msvcrt.inc'


[/spoiler]
felicitacion under por resolverlo tambien cosa que no es para nada facil el traceo.