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
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
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.
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. ;)
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 ^^
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
Para aquellos que lo han intentado resolver, les dejo el source para que vean lo facil que hubiera sido sin la obfuscacion.
[spoiler]
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.