Tres crackmes sencillos hechos en RadAsm espero poder mejorar aver si me dan algunos consejos :
Crackme 1 :
http://rapidshare.com/files/137362955/Crackme__1.rar
Crackme 2 :
http://rapidshare.com/files/137363059/Crackme__2.rar
Crackme 3 :
http://rapidshare.com/files/137363126/Crackme__3.rar
Cualquier duda , critica y/o sugerencia me dicen
Salu2
Solucion al crackme 1 y 2 y mi solucion para mi nombre 3
solucion 1
"dwfdlrjt"
solucion 2
"qd|~sddwd"
solucion 3
nombre
serial
apuromafo
]ny|oa]xo
CRACKME 1pues colocamos un valor cualquiera para ver si rompe en el dialogo, pero no aparece nada
revisamos y hay unalinea llamada cmp eax, 8
Citar0040108F |. E8 0A010000 call <jmp.&user32.GetDlgItemTextA> ; \GetDlgItemTextA
00401094 |. 83F8 08 cmp eax, 8
Citar00401097 |. 0F85 A4000000 jnz 00401141
ahi dice que compara con 8 valores sean letras o numeros
Citar004010B6 |. 68 9C314000 push 0040319C ; /String2 =
004010BB |. 68 4C314000 push 0040314C ; |String1 =
004010C0 |. E8 C7000000 call <jmp.&kernel32.lstrcmpiA> ; \lstrcmpiA
coloco como pass 11111111 y aparece la comparacion entre
Citar004010B6 |. 68 9C314000 push 0040319C ; /String2 = "fudfnphv"
004010BB |. 68 4C314000 push 0040314C ; |String1 = "33333333"
por lo tanto lo sube en 3 numeros o letras
ahora bien donde ocurrio todo esto
Citar
0040109F |. 68 74314000 push 00403174 ; |Buffer = Crackme_.00403174
004010A4 |. 68 EE030000 push 3EE ; |ControlID = 3EE (1006.)
004010A9 |. FF75 08 push dword ptr [ebp+8] ; |hWnd
004010AC |. E8 ED000000 call <jmp.&user32.GetDlgItemTextA> ; \GetDlgItemTextA
004010B1 |. E8 94000000 call 0040114A
pues hay un call
Citar00403174=00403174 (ASCII "crackmes")
el push dice crackmes
bueno pero lo importante es que sigue el codigo
Citar
0040114A /$ 33D2 xor edx, edx
0040114C |. 33C9 xor ecx, ecx
0040114E |> 8B91 24314000 /mov edx, dword ptr [ecx+403124]
00401154 |. 83F2 02 |xor edx, 2
00401157 |. 8991 4C314000 |mov dword ptr [ecx+40314C], edx
0040115D |. 41 |inc ecx
0040115E |. 3BC8 |cmp ecx, eax
00401160 |. 74 02 |je short 00401164
00401162 |.^ EB EA \jmp short 0040114E
ese es el primer loop
y en el segundo encuentro el causante de crear el 111 en 333
asi que lo aprovecharemos para encontrar el serial
Citar0040116E 83C2 03 add edx, 3
lo cambio a
Citar0040116E 83EA 03 sub edx, 3
y ejecutamos
Citar
00401164 |> 33D2 xor edx, edx
00401166 |. 33C9 xor ecx, ecx
00401168 |> 8B91 74314000 /mov edx, dword ptr [ecx+403174]
0040116E 83EA 03 sub edx, 3
00401171 |. 8991 9C314000 |mov dword ptr [ecx+40319C], edx
00401177 |. 41 |inc ecx
00401178 |. 3BC8 |cmp ecx, eax
0040117A |. 74 02 |je short 0040117E
0040117C |.^ EB EA \jmp short 00401168
0040117E \> C3 retn
y como sabemos que el correcto era
0040319C=0040319C (ASCII "fudfnphv")
pues colocamos en practica si quieren primero 33333333 y aparecera 11111111 asi que lo usamos ahora para saber el correcto
y aparece lo siguiente
Citar0040314C=0040314C (ASCII "dwfdlrjt")
copio el valor y restauro el algoritmo a como estaba, o mejor dicho cierro el olly e ingreso el valor "dwfdlrjt"
---------------------------
Bien
---------------------------
Lo lograste, espero que este crackme haya sido de tu agrado
---------------------------
Aceptar
---------------------------
sep fue de mi agrado
---------------------------
Información
---------------------------
<> Crackme #1 by Bocvk <>
Encuentra el serial
bocvk@hotmail.com
Dedicado a CracksLatinos
Perú - 2008
---------------------------
Aceptar
---------------------------
CRACKME 2ahora el 2do
pues comenzamos con lo mismo
Citar
00401094 |. 83F8 09 cmp eax, 9
00401097 |. 0F85 A4000000 jnz 00401141
0040109D |. 6A 0A push 0A ; /Count = A (10.)
0040109F |. 68 80314000 push 00403180 ; |Buffer = Crackme_.00403180
004010A4 |. 68 EE030000 push 3EE ; |ControlID = 3EE (1006.)
004010A9 |. FF75 08 push dword ptr [ebp+8] ; |hWnd
004010AC |. E8 13010000 call <jmp.&user32.GetDlgItemTextA> ; \GetDlgItemTextA
004010B1 |. E8 94000000 call 0040114A
004010B6 68 A8314000 push 004031A8
004010BB |. 68 58314000 push 00403158
004010C0 |. E8 BB000000 call 00401180
004010C5 |. 0BC0 or eax, eax
004010C7 |. 74 16 je short 004010DF
004010C9 |. 6A 40 push 40 ; /Style = MB_OK|MB_ICONASTERISK|MB_APPLMODAL
004010CB |. 68 FE304000 push 004030FE ; |Title = "Bien"
004010D0 |. 68 00304000 push 00403000 ; |Text = "Lo lograste, espero que este crackme haya sido de tu agrado"
004010D5 |. FF75 08 push dword ptr [ebp+8] ; |hOwner
004010D8 |. E8 F3000000 call <jmp.&user32.MessageBoxA> ; \MessageBoxA
tenemos ahora 9 letras a comparar
y como tengo experiencia en el tema , cuando son numeros pequeños como la solucion de arriba se puede, pero aca ya lo considero un poco mas grande, asi que bueno vamos a el
analizemos de otra forma
si antes la palabra crackmes lo convertia a un valor y ese valor era comparado con el xor y proximamente con el add pues debemos entender algo
todo xor puede ser reversible
por lo tanto tenemos que a xor b= c
c xor b = a
y a xor c= b
pues en ese sentido mas o menos seria lo de ahora
ahora bien son 3 algoritmos a entender o 3 trozos de codigo a entender
1)
Citar
0040114E |> /8B91 30314000 /mov edx, dword ptr [ecx+403130]
00401154 |. |83F2 08 |xor edx, 8
00401157 |. |8991 58314000 |mov dword ptr [ecx+403158], edx
0040115D |. |41 |inc ecx
0040115E |. |3BC8 |cmp ecx, eax
00401160 |. |74 02 |je short 00401164
00401162 |.^\EB EA \jmp short 0040114E
2)
Citar
00401168 |> /8B91 80314000 /mov edx, dword ptr [ecx+403180]
0040116E |83C2 07 add edx, 7
00401171 |. |8991 A8314000 |mov dword ptr [ecx+4031A8], edx
00401177 |. |41 |inc ecx
00401178 |. |3BC8 |cmp ecx, eax
0040117A |. |74 02 |je short 0040117E
0040117C |.^\EB EA \jmp short 00401168
3)
Citar
00401180 /$ 55 push ebp
00401181 |. 8BEC mov ebp, esp
00401183 |. 56 push esi
00401184 |. 8B4D 08 mov ecx, dword ptr [ebp+8]
00401187 |. 8B55 0C mov edx, dword ptr [ebp+C]
0040118A |. 33F6 xor esi, esi
0040118C |> 8A040E /mov al, byte ptr [esi+ecx]
0040118F |. 3A0416 |cmp al, byte ptr [esi+edx]
00401192 |. 75 10 |jnz short 004011A4
00401194 |. 83C6 01 |add esi, 1
00401197 |. 84C0 |test al, al
00401199 |.^ 75 F1 \jnz short 0040118C
ahora bien un sitio estrategico para entender el final de todo esto es en 40118f
pues ahi comparara valor por valor
ahora bien comenzemos con un valor que no corresponde
ejemplo 1111111111
son 9 unos
cuando lleguemos en una ejecucion con un bp en
004010B1 |. E8 94000000 call 0040114A
pues se vera un valor
Citar00403180=00403180 (ASCII "remoteexe")
a partir de este valor sera convertido y verificado nuestro serial, pero obviamente no sera tan facil, o sera medianamente facil si se tiene paciencia
vamos
a convertirlo en otro ejemplo 1111
el resultado proximo seria un 888888888
pero eso es para referencia
osea solo ese valor se formaria
pero para las letras pues recomiendo este segundo metodo para resolverlo y veran que se entetendran
detenidos en el
Citar0040118F |. 3A0416 |cmp al, byte ptr [esi+edx]
ds:[004031A8]=79 ('y')
al=39 ('9')
aparece la famosa comparacion
aparece una y y yo tengo un 9, ese 9 proviene del 1er uno
asi que a modo de juego si cambio la y por el 1 que teniamos tendremos el valor real
es facil verlo, pero explicarlo no lo es tanto, pues solo lo comento para que salga mas facil resolverlo
sigamos
ahora cambio mi clave 111111111 a y11111111
y veo en mi lugar estrategico
Citards:[004031A8]=79 ('y')
al=71 ('q')
una q, bien, si ahora a esa q , la coloco en el lugar, puede que de y, pues seria el xor inverso
y xor desconocido= valor de ahora
y entre el mismo xor, pues es divertido ver esto
sigamos, no quiero que se enreden, vean que aparece una q
ahora cambiamos la palabra a
q11111111
y nuestro lugar ahora dice
Citards:[004031A8]=79 ('y')
al=79 ('y')
impresionante o no es una forma de resolver los famosos estilos de xor tuvimos el valor valido :)
ahora sigamos
si juntara todo pues seria algo asi
Citar004031A8 79 6C 74 76 7B 6C 6C 7F 6C yltv{lll
esos signos son raros, asi que debo ir lento
solo debo hacer es mirar el nuevo valor, copiarlo
y ver el valor nuevo que debo ingresar
pues me aprovecho que ya se donde esta el valor bueno y pego todos esos valores y me muestra lo siguiente
Citards:[004031A8]=79 ('y')
al=71 ('q')
ahora el truco esta en anotar el valor de al y falsear el nuevo valor
anoto el q y edito ese q para que sea 79
(modify register)
dejandolo asi
Citards:[004031A8]=79 ('y')
al=79 ('y')
ahora bien como ya tenemos un notepad amigo, pues pegamos los valores y los dejamos a mano
primera letra
Citards:[004031A8]=79 ('y')
al=71 ('q')
para el segundo
Citards:[004031A9]=6C ('l')
al=64 ('d')
para la tercera letra
Citards:[004031AA]=74 ('t')
al=7C ('|')
para la cuarta
Citards:[004031AB]=76 ('v')
al=7E ('~')
para la quinta
Citards:[004031AC]=7B ('{')
al=73 ('s')
para la sexta
Citards:[004031AD]=6C ('l')
al=64 ('d')
para la septima
Citards:[004031AE]=6C ('l')
al=64 ('d')
para la octava
Citards:[004031AF]=7F
al=77 ('w')
para la novena
Citards:[004031B0]=6C ('l')
al=64 ('d')
y despues saldra esto
Citards:[004031B1]=00
al=00
ahora bien juntamos todo
para cuando llegue a
Citar004010C5 |. 0BC0 or eax, eax
eax valdra eax=00000009
y seria solucionado
ahora bien miramos el resultado
Citar00403158=00403158 (ASCII "qd|~sddwd")
interesante :)
---------------------------
Bien
---------------------------
Lo lograste, espero que este crackme haya sido de tu agrado
---------------------------
Aceptar
---------------------------
ahora bien demosle a pegar ese serial "qd|~sddwd"
y esta resuelto :) y sin tener que modificar a un comando que puede que desconozcan
saludos
---------------------------
Información
---------------------------
<> Crackme #2 by Bocvk <>
Encuentra el serial
bocvk@hotmail.com
Dedicado a CracksLatinos
Perú - 2008
---------------------------
Aceptar
---------------------------
TERCER CRACKMEpues plantea nuestro amigo un reto novedoso
hacer que 2 loops sean iguales desde matematicas diferentes
encontre 1 entre un mini analisis
suma
xoreo
resta
y la segunda
suma
xoreo
resta
ahora bien los valores son diferentes
el truco es el siguiente
encontrar la logica de 1 letra es suficiente para encontrar las posibles letras
para nombre con la letra j (sobre 6 veces la misma)
jjjjjj
pues el serial es la letra d
dddddd
y la comparacion sera asi
Citar004010BA |. 68 2C324000 push 0040322C ; /String2 = "iiiiii"
004010BF |. 68 F0314000 push 004031F0 ; |String1 = "iiiiii"
004010C4 |. E8 FF000000 call <jmp.&kernel32.lstrcmpiA> ; \lstrcmpiA
la letra i de comparacion igual
ahora bien existe una igual para cada letra, siempre y cuando se este dispuesto a encontrar para su letra, minimo requiere un buen tiempo que no tengo
pero si se puede hacer algo impresionante
es juntar un codigo ascii de 255 y lograr recopilar cada letra, por el tiempo solo busque para mi nombre
pero colocare para mi nombre apuromafo
Citara->]
p->n
u->y
r-| (alt 124)
o->o
m->a
a->] (alt+93)
f->x
o->o
apuromafo->"dspqvhdmv"
//
a->]
p->n
u->y
r-| (alt 124)
o->o
m->a
a->]
f->x
o->o
apuromafo
]ny|oa]xo
con esto dice
---------------------------
Bien
---------------------------
Lo lograste, espero que este crackme haya sido de tu agrado
---------------------------
Aceptar
---------------------------
ahora bien
letra nombre->letra serial
Citarj->d
k->c
l->b
m->a
p->n
q->m
Citar0(48)->.(46)
1(49)->-(45)
2 50 ->< 60)
3 51 ->;(59)
4(52)->0 (48) ???
5(53)->/ (47) ??
a ->]
` ->^
^ ->`
?->?
>->@
como bien tengo poco tiempo
Citar00401097 |. 83F8 06 cmp eax, 6
comparacion con 6 de nombre
comparacion con 6 de serial
Citar004010B0 |. 83F8 06 cmp eax, 6
004010B3 |. 72 47 jb short 004010FC
004010B5 |. E8 C1000000 call 0040117B
004010BA |. 68 2C324000 push 0040322C ; /String2 = ""
004010BF |. 68 F0314000 push 004031F0 ; |String1 = ""
004010C4 |. E8 FF000000 call <jmp.&kernel32.lstrcmpiA> ; \lstrcmpiA
las rutinas
Citar0040117B /$ 33C9 xor ecx, ecx
0040117D |. 33D2 xor edx, edx
0040117F |> 8B91 78314000 /mov edx, dword ptr [ecx+403178]
00401185 |. 83C2 02 |add edx, 2 ; 1
00401188 |. 83F2 06 |xor edx, 6
0040118B |. 83EA 01 |sub edx, 1
0040118E |. 8991 F0314000 |mov dword ptr [ecx+4031F0], edx
00401194 |. 41 |inc ecx
00401195 |. 3BC8 |cmp ecx, eax
00401197 |. 74 02 |je short 0040119B
00401199 |.^ EB E4 \jmp short 0040117F
0040119B |> 33C9 xor ecx, ecx
0040119D |. 33DB xor ebx, ebx
0040119F |> 8B99 B4314000 /mov ebx, dword ptr [ecx+4031B4]
004011A5 |. 83C3 03 |add ebx, 3
004011A8 |. 83F3 09 |xor ebx, 9
004011AB |. 83EB 05 |sub ebx, 5
004011AE |. 8999 2C324000 |mov dword ptr [ecx+40322C], ebx
004011B4 |. 41 |inc ecx
004011B5 |. 3BC8 |cmp ecx, eax
004011B7 |. 74 02 |je short 004011BB
004011B9 |.^ EB E4 \jmp short 0040119F
004011BB \> C3 retn
donde se ve que el primero valor
Citar0040117F |> /8B91 78314000 /mov edx, dword ptr [ecx+403178]
00401185 |. |83C2 02 |add edx, 2 ; xxx
00401188 |. |83F2 06 |xor edx, 6
0040118B |. |83EA 01 |sub edx, 1
0040118E |. |8991 F0314000 |mov dword ptr [ecx+4031F0], edx
00401194 |. |41 |inc ecx
00401195 |. |3BC8 |cmp ecx, eax
00401197 |. |74 02 |je short 0040119B
00401199 |.^\EB E4 \jmp short 0040117F
y el segundo valor
Citar0040119F |> /8B99 B4314000 /mov ebx, dword ptr [ecx+4031B4]
004011A5 |. |83C3 03 |add ebx, 3
004011A8 |. |83F3 09 |xor ebx, 9
004011AB |. |83EB 05 |sub ebx, 5
004011AE |. |8999 2C324000 |mov dword ptr [ecx+40322C], ebx
004011B4 |. |41 |inc ecx
004011B5 |. |3BC8 |cmp ecx, eax
004011B7 |. |74 02 |je short 004011BB
004011B9 |.^\EB E4 \jmp short 0040119F
pasa que e add, xor y sub debe ser igual entre las 2 de modo que
las dos sean identicas
como conozco mas o menos el alfabeto, dar una colicion con los centros es la primera opcion y vemos que sale de lujo
Citarh->f
i->e
j->d
k->c
l->b
m->a
ahora bien
apuromafo tiene varias letras y consonantes, y justo sobre 6 , asi que le hago el empeño y comparo en
pero como no necesariamente sigue la logicapues
Citar
004010BA |. 68 2C324000 push 0040322C ; /String2 = "^^^^^^12"
004010BF |. 68 F0314000 push 004031F0 ; |String1 = "12_______"
004010C4 |. E8 FF000000 call <jmp.&kernel32.lstrcmpiA> ; \lstrcmpiA
cada vez que coloco un valor similar , pues copio el valor y la dejo en la tabla
esto es conocido como colision, porque por chocar un valor con otro, pues en un momento dado es encontrado
no siempre se vera el valor tan claramente, por algo deben probar para su nombre
la web con codigo ascii que sugiero es la siguiente
http://www.ascii.cl/es/codigos-html.htm
por lo demas, espero les vaya bien en el 3ro
y ojala me de el tiempo de hacer algun keygen mas presentable :)
saludos
se cuidan y si alguien resuelve mucho mejor o necesita alguna explicacion mayor, pues cuando tenga tiempo la complemento :) o aprendo de lo que comenten
por mi parte creo que estaria medianamente resuelto :)
Estuvo bien las soluciones jeje ya me espera k los resolvieran rapido :P ...
Aver si voy aumentando de nivel en los crackmes para k la distraccion sea un poco mas...
Salu2
Impresionante apuromafo, no has dejado ni respirar.
Yo acabo de ver el post ahora.
Gracias Bocvk por tus crackmes
Un saludo
apuromafo gracias por un tutorial claro y diciendo cada cosa lo que es, de todos modos le voy a echar un vistazo que asi vaya practicando y si tengo alguna duda ya veo donde mirar jajajaja, un saludo