Título: 3 Crackmes by Bocvk Publicado por: _Bocvk_ en 14 Agosto 2008, 23:32 pm 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 Título: Re: 3 Crackmes by Bocvk Publicado por: apuromafo CLS en 15 Agosto 2008, 01:50 am 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 1 pues colocamos un valor cualquiera para ver si rompe en el dialogo, pero no aparece nada revisamos y hay unalinea llamada cmp eax, 8 Citar 0040108F |. E8 0A010000 call <jmp.&user32.GetDlgItemTextA> ; \GetDlgItemTextA 00401094 |. 83F8 08 cmp eax, 8 Citar 00401097 |. 0F85 A4000000 jnz 00401141 ahi dice que compara con 8 valores sean letras o numeros Citar 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 Citar 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 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 Citar 00403174=00403174 (ASCII "crackmes") el push dice crackmesbueno 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 Citar 0040116E 83C2 03 add edx, 3 lo cambio a Citar 0040116E 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 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 Citar 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 2 ahora 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 ahora bien un sitio estrategico para entender el final de todo esto es en 40118f00401181 |. 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 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 Citar 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 Citar 0040118F |. 3A0416 |cmp al, byte ptr [esi+edx] aparece la famosa comparacionds:[004031A8]=79 ('y') al=39 ('9') 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 Citar 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 Citar ds:[004031A8]=79 ('y') impresionante o no es una forma de resolver los famosos estilos de xor tuvimos el valor valido :)al=79 ('y') ahora sigamos si juntara todo pues seria algo asi Citar 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 Citar 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 Citar 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 Citar ds:[004031A8]=79 ('y') al=71 ('q') para el segundo Citar ds:[004031A9]=6C ('l') al=64 ('d') para la tercera letra Citar ds:[004031AA]=74 ('t') al=7C ('|') para la cuarta Citar ds:[004031AB]=76 ('v') al=7E ('~') para la quinta Citar ds:[004031AC]=7B ('{') al=73 ('s') para la sexta Citar ds:[004031AD]=6C ('l') al=64 ('d') para la septima Citar ds:[004031AE]=6C ('l') para la octavaal=64 ('d') Citar ds:[004031AF]=7F al=77 ('w') para la novena Citar ds:[004031B0]=6C ('l') y despues saldra estoal=64 ('d') Citar ds:[004031B1]=00 ahora bien juntamos todoal=00 para cuando llegue a Citar 004010C5 |. 0BC0 or eax, eax eax valdra eax=00000009 y seria solucionado ahora bien miramos el resultado Citar 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 CRACKME pues 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 Citar 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 Citar 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 Código: apuromafo con esto dice --------------------------- Bien --------------------------- Lo lograste, espero que este crackme haya sido de tu agrado --------------------------- Aceptar --------------------------- ahora bien letra nombre->letra serial Citar j->d k->c l->b m->a p->n q->m Citar 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 Citar 00401097 |. 83F8 06 cmp eax, 6 comparacion con 6 de nombrecomparacion con 6 de serial Citar 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 Citar 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 Citar 0040117F |> /8B91 78314000 /mov edx, dword ptr [ecx+403178] y el segundo valor00401185 |. |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 Citar 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 Citar 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 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 Código: 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 :) Título: Re: 3 Crackmes by Bocvk Publicado por: _Bocvk_ en 15 Agosto 2008, 17:07 pm 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 Título: Re: 3 Crackmes by Bocvk Publicado por: karmany en 16 Agosto 2008, 16:13 pm Impresionante apuromafo, no has dejado ni respirar.
Yo acabo de ver el post ahora. Gracias Bocvk por tus crackmes Un saludo Título: Re: 3 Crackmes by Bocvk Publicado por: apuromafo CLS en 16 Agosto 2008, 21:40 pm jej igual para la 3ra igual falta complementar
no he hecho ningun keygen de ninguno asi que si alguien quiere hacerlo pues no esta mal :) Título: Re: 3 Crackmes by Bocvk Publicado por: Gevaudan en 18 Agosto 2008, 15:30 pm 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
|