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
0040108F |. E8 0A010000 call <jmp.&user32.GetDlgItemTextA> ; \GetDlgItemTextA
00401094 |. 83F8 08 cmp eax, 8
00401097 |. 0F85 A4000000 jnz 00401141
ahi dice que compara con 8 valores sean letras o numeros
004010B6 |. 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
004010B6 |. 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
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
00403174=00403174 (ASCII "crackmes")
el push dice crackmes
bueno pero lo importante es que sigue el codigo
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
0040116E 83C2 03 add edx, 3
lo cambio a
0040116E 83EA 03 sub edx, 3
y ejecutamos
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
0040314C=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
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)
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)
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)
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
00403180=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
0040118F |. 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
ds:[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
ds:[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
004031A8 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
ds:[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
ds:[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
ds:[004031A8]=79 ('y')
al=71 ('q')
para el segundo
ds:[004031A9]=6C ('l')
al=64 ('d')
para la tercera letra
ds:[004031AA]=74 ('t')
al=7C ('|')
para la cuarta
ds:[004031AB]=76 ('v')
al=7E ('~')
para la quinta
ds:[004031AC]=7B ('{')
al=73 ('s')
para la sexta
ds:[004031AD]=6C ('l')
al=64 ('d')
para la septima
ds:[004031AE]=6C ('l')
al=64 ('d')
para la octava
ds:[004031AF]=7F
al=77 ('w')
para la novena
ds:[004031B0]=6C ('l')
al=64 ('d')
y despues saldra esto
ds:[004031B1]=00
al=00
ahora bien juntamos todo
para cuando llegue a
004010C5 |. 0BC0 or eax, eax
eax valdra eax=00000009
y seria solucionado
ahora bien miramos el resultado
00403158=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
004010BA |. 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
a->]
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
con esto dice
---------------------------
Bien
---------------------------
Lo lograste, espero que este crackme haya sido de tu agrado
---------------------------
Aceptar
---------------------------
ahora bien
letra nombre->letra serial
j->d
k->c
l->b
m->a
p->n
q->m
0(48)->.(46)
1(49)->-(45)
2 50 ->< 60)
3 51 ->;(59)
4(52)->0 (48) ???
5(53)->/ (47) ??
a ->]
` ->^
^ ->`
?->?
>->@
como bien tengo poco tiempo
00401097 |. 83F8 06 cmp eax, 6
comparacion con 6 de nombre
comparacion con 6 de serial
004010B0 |. 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
0040117B /$ 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
0040117F |> /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
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
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
h->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
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