Título: CrackMe05 by x4uth Publicado por: x4uth en 3 Marzo 2008, 01:18 am Objetivos:
- Encontrar una clave valida - Escribir un tutorial Compilador: MS VC++ 2005 Descarga: CrackMe05.rar (http://personal.telefonica.terra.es/web/carlos-ea/ie/CrackMe05.rar) Solucionado por susanalic el 24/08/08 (tutorial (http://personales.ya.com/susanalic/Crackme5.pdf)) Título: Re: CrackMe05 by x4uth Publicado por: karmany en 5 Marzo 2008, 22:42 pm Muchas gracias x4uth por tu siempre colaboración.
Ya he añadido tu crackme en "Crackmes y tutoriales" y he guardado el Crackme05. A ver si alguien se anima. Un saludo Título: Re: CrackMe05 by x4uth Publicado por: R6ID en 6 Marzo 2008, 13:23 pm Muy buen crackme y muy dificil:
*Proteccion(por lo menos lo que yo he visto): Usa el UPolyX v0.5 y antidebugger bastante potente ya que he probado muchos plugins para oculta el olly y me sigue detectando. Despues de probar haber que hacia he conseguido quitar el UPolyX o por lo menos eso dice el PEID. Aunque no me atrevo a asegurarlo... No se saltarme el antidebugger y sin eso no avanzo haber si alguien lo consigue y me ayuda un poco. Título: Re: CrackMe05 by x4uth Publicado por: x4uth en 6 Marzo 2008, 14:28 pm no esta empaquetado con nada, el Peid no reconoce los compiladores nuevos x eso te pone eso ... el antidebug que tiene es bastante sencillo, eso si .. como tu bien dices los plugins no sirven para nada pues es una proteccion poco habitual
Título: Re: CrackMe05 by x4uth Publicado por: solidcls en 6 Marzo 2008, 14:42 pm Les doy una pista para hacerlo correr en Olly, en esta direccion:
00401122 FF15 A4324300 CALL DWORD PTR DS:[<&KERNEL32.VirtualAll>; kernel32.VirtualAlloc 00401128 8BC8 MOV ECX,EAX 0040112A 894D E8 MOV DWORD PTR SS:[EBP-18],ECX 0040112D C601 C3 MOV BYTE PTR DS:[ECX],0C3 ; <-- Cambiar el 0C3 por 90 00401130 C641 01 EB MOV BYTE PTR DS:[ECX+1],0EB hay qeu cambiar el MOV BYTE PTR DS:[ECX],0C3 por: MOV BYTE PTR DS:[ECX],90 de esta forma evitamos pasar por el ret que nos tira afuera luego damos RUN y en lugar de parar en el RET parara en el NOP, luego SHIFT+F9 y sale corriendo sin problemas ;) ese truco lo uso mi amigo YODA en NTKrnl PROTECTOR suerte. solid. Título: Re: CrackMe05 by x4uth Publicado por: R6ID en 6 Marzo 2008, 15:12 pm Ok gracias tios la verdad es que siempre se aprenden cosas nuevas yo creia que me podia fiar del PEID para el tema de saber como estan empakados. De todas formas gracias a los 2 por vuestra ayuda. ;D ;D
Una cosa tambien podria cambiar ese ret por un nop ya que el resultado sera el mismo no??? Título: Re: CrackMe05 by x4uth Publicado por: pERICOTE en 17 Marzo 2008, 02:58 am Por ser vispera de semana santa, les dare una pista para que se salten la proteccion antidebug de una buena vez y no estar lidiando con excepciones ni lastimando los dedos de tanto shif+f9 para acceder a la dichosa ventanita. ;D ;D ;D
00401199 |. FF55 E8 CALL DWORD PTR SS:[EBP-18] ; cambiar a jmp 004011bd 004011D8 . 807A 09 68 CMP BYTE PTR DS:[EDX+9],68 nopear 004011DC . 75 07 JNZ SHORT CrackMe0.004011E5 ; nopear Guardan los cambios y listo, reabren el nuevo archivo y ya tienen el exe limpio de esas cosillas que dan dolor de cabeza a veces. ;D ;D ;D saludos. Título: Re: CrackMe05 by x4uth Publicado por: pERICOTE en 17 Marzo 2008, 03:06 am Ok gracias tios la verdad es que siempre se aprenden cosas nuevas yo creia que me podia fiar del PEID para el tema de saber como estan empakados. De todas formas gracias a los 2 por vuestra ayuda. ;D ;D Una cosa tambien podria cambiar ese ret por un nop ya que el resultado sera el mismo no??? Reconozco que el PEID es muy bueno, pero sin las nuevas signaturas sirve de muy poco. Usen el Exeinfope en primer lugar y el RDG packer detector. Por otro lado, en el crackme de marras si puedes cambiar directamente el ret por un nop, sin embargo no puedes parchear asi el exe porque el ret esta en una zona blanca de memoria. Título: Re: CrackMe05 by x4uth Publicado por: pERICOTE en 12 Abril 2008, 02:51 am Nadinga, nadinga... vamos gente.
;D ;D ;D Título: Re: CrackMe05 by x4uth Publicado por: x4uth en 12 Abril 2008, 02:54 am Nadinga, nadinga... vamos gente. ;D ;D ;D eso , por lo menos postear en que os quedaisteis, seguramente alguien os podra ayudar Título: Re: CrackMe05 by x4uth Publicado por: KJD en 9 Junio 2008, 22:03 pm Nadinga, nadinga... vamos gente. ;D ;D ;D pues yo llege hasta la parte donde empieza a jugar con el serial intruducido, pero despues me mareo con el asm >:( Título: Re: CrackMe05 by x4uth Publicado por: x4uth en 10 Junio 2008, 01:19 am pues el serial es largo (para que no puedan con fuerza bruta) pero todo lo hace una misma funcion que tiene muy pocas lineas de codigo, solo tienes que entenderla...
Título: Re: CrackMe05 by x4uth Publicado por: x4uth en 19 Agosto 2008, 14:45 pm mas de 5 meses y nada :huh:, supongo q os habeis quedado en el algoritmo, bueno os dare una pequeña pista: hecharle un ojo al icono del CrackMe os puede dar una idea de que es lo que hacen esas pocas lineas :D.
Título: Re: CrackMe05 by x4uth Publicado por: apuromafo CLS en 19 Agosto 2008, 22:09 pm ni idea del crackme de como terminarlo
pero comenzemos la tarea que han hecho metodo para mover las letras y guardarlas para uso despues 004017C0 > /8A08 mov cl, byte ptr [eax] 004017C2 . |83C0 01 add eax, 1 004017C5 . |84C9 test cl, cl 004017C7 .^\75 F7 jnz short 004017C0 Citar 004017C9 . 2BC2 sub eax, edx 004017CB . 8BF0 mov esi, eax 004017CD . 33D2 xor edx, edx 004017CF . 8995 78FFFFFF mov dword ptr [ebp-88], edx 004017D5 . 85F6 test esi, esi Citar 004017D7 . 7E 3A jle short 00401813 004017D9 . 8DA424 000000>lea esp, dword ptr [esp] 004017E0 > 8A4415 84 mov al, byte ptr [ebp+edx-7C] 004017E4 . 8A4C15 85 mov cl, byte ptr [ebp+edx-7B] 004017E8 . 32C8 xor cl, al 004017EA . 0F94C1 sete cl 004017ED . 0AD9 or bl, cl 004017EF . 2C 01 sub al, 1 004017F1 . 884415 84 mov byte ptr [ebp+edx-7C], al 004017F5 . 3C 4F cmp al, 4F 004017F7 . 0F9FC1 setg cl 004017FA . 3C 40 cmp al, 40 004017FC . 0F9CC0 setl al 004017FF . 0AC8 or cl, al 00401801 . 0AD9 or bl, cl 00401803 . 83C2 01 add edx, 1 00401806 . 3BD6 cmp edx, esi 00401808 .^ 7C D6 jl short 004017E0 0040180A . 8995 78FFFFFF mov dword ptr [ebp-88], edx 00401810 . 885D 83 mov byte ptr [ebp-7D], bl Citar 00401813 > C745 FC 00000>mov dword ptr [ebp-4], 0 0040181A . A1 80544400 mov eax, dword ptr [445480] 0040181F . 85C0 test eax, eax 00401821 . 74 16 je short 00401839 00401823 . 8038 CC cmp byte ptr [eax], 0CC ; zona de comprobacion de BP cc->exepcion del bp 00401826 . 75 11 jnz short 00401839 00401828 . B9 09000000 mov ecx, 9 0040182D . BE B0874300 mov esi, 004387B0 00401832 . 8D7D B8 lea edi, dword ptr [ebp-48] 00401835 . F3:A5 rep movs dword ptr es:[edi], dword p> 00401837 . 66:A5 movs word ptr es:[edi], word ptr [esi> 00401839 > C745 FC FFFFF>mov dword ptr [ebp-4], -1 00401840 . EB 14 jmp short 00401856 pero si quieren mas pistas que decian pues 00401875 > /80740D B8 49 xor byte ptr [ebp+ecx-48], 49 el autor dice que el x4 es una pista ahora bien editar mas de la cuenta o pasarse en algo es sacar fuera de pila EventType : BEX P1 : CrackMe05_.exe P2 : 0.0.0.0 P3 : 47cb408e P4 : CrackMe05_.exe P5 : 0.0.0.0 P6 : 47cb408e P7 : 000018bc P8 : c0000409 P9 : 00000000 volviendo a lo que estabamos hay unas direcciones apuntadas 0040181A . A1 80544400 mov eax, dword ptr [445480] ds:[00445480]=7E3E61DC eax=00000001 sigamos con el tema References in USER32:.text to 7E3E61DC..7E3E61DC, item 0 Address=7E3D0612 Disassembly=call MessageBoxTimeoutA apunta a el call message ahora bien creo que en la zona hacia el chico bueno pasa por aqui y apunta tb a el mismo mensaje 00401617 |. 64:A1 0000000>mov eax, dword ptr fs:[0] fs:[00000000]=[7FFDF000]=0012F820 eax=7E3E61DC (USER32.MessageBoxTimeoutA) ahora siguiendo eso vemos en comparacion con algo extrañisimo si el bl es correcto (obviamente cambiando el flag ) 0012F744 0012F714 ASCII "CÜêz^*D" 0012F748 0012F77C Pointer to next SEH record 0012F74C 00430A6A SE handler 0012F750 FFFFFFFF 0012F754 0012F7B1 ASCII "012345678/012345678//012345678/012" y sale un mensaje diferente con un !!! en la parte superior y corresponde al recurso numero 129 de Dialog { DEFPUSHBUTTON "Aceptar", 1, 33, 36, 50, 14 CTEXT "Invalid Key", 1002, 3, 12, 112, 21 } por lo tanto debe existir alguna segunda forma extraño o no pues es lo que hay ahora bien por lo tanto a deducir por el trabajo realiza un xoreo como desencripcion de la rutina y de paso terminar con esto pues sigamos el algoritmo o como se llame el sistema que creo x4uth pues es un poco complejo de entender pero resalto algo en especial Citar 004017D9 . 8DA424 000000>lea esp, dword ptr [esp] 004017E0 > 8A4415 84 mov al, byte ptr [ebp+edx-7C] 004017E4 . 8A4C15 85 mov cl, byte ptr [ebp+edx-7B] 004017E8 . 32C8 xor cl, al 004017EA . 0F94C1 sete cl 004017ED . 0AD9 or bl, cl 004017EF . 2C 01 sub al, 1 004017F1 . 884415 84 mov byte ptr [ebp+edx-7C], al 004017F5 . 3C 4F cmp al, 4F 004017F7 . 0F9FC1 setg cl 004017FA . 3C 40 cmp al, 40 004017FC . 0F9CC0 setl al 004017FF . 0AC8 or cl, al 00401801 . 0AD9 or bl, cl 00401803 . 83C2 01 add edx, 1 00401806 . 3BD6 cmp edx, esi 00401808 .^ 7C D6 jl short 004017E0 0040180A . 8995 78FFFFFF mov dword ptr [ebp-88], edx 00401810 . 885D 83 mov byte ptr [ebp-7D], bl ahora bien que pasa con las zonas normales que he marcado se nota el uso de variables de valores para xorear ahora bien si tienes un serial 123456 pues es convertido en 234567 y en algunos espacios puede ser convertido a otra cosa ej // o / otra cosa que decia solid era evitar el ret que esta en una sección fuera y fue reservado por 00A40000 C3 retn 00A40001 EB 10 jmp short 00A40013 00A40003 48 dec eax 00A40004 4F dec edi 00A40005 4C dec esp 00A40006 41 inc ecx 00A40007 0000 add byte ptr [eax], al 00A40009 68 0300A400 push 0A40003 ; ASCII "HOLA" 00A4000E 0000 add byte ptr [eax], al tambien hay cosas raras como 00401856 > \83C2 F6 add edx, -0A ->deberia valer 23 para ser valido 00401859 . 83FA 19 cmp edx, 19 0040185C . 77 15 ja short 00401873 0040185E . 84DB test bl, bl luego de ver que al colocar los 23 que son, pues hay otra comparacion que es el bl que viene del lugar donde hay que entender ahora bien como resumen 1)hay un mensaje cifrado 2) existe un serial valido 3) hay una comprobacion de 23 de largo 4) hay trucos de estilo VM o maquina virtual 5) hay 2 lugares de comprobacion de bp, una por excepcion y otra por control Seh o similar 6) el invalid mensaje esta en 00438799 27 3F 28 25 20 2D 69 02 2C 30 49 49 00 00 00 0C '?(% -i,0II.... 004387A9 3B 3B 26 3B 49 49 00 0D 2C 2B 3C 2E 69 10 26 3C ;;&;II..,+<.i&< 004387B9 3B 3A 2C 25 2F 49 49 00 00 00 00 00 ;:,%/II..... y bajando encontramos algo quizas relacionado con el serial Citar 00438989 22 37 36 2F 22 37 2A 2C 2D 30 6F 63 2D 2C 34 63 "76/"7*,-0oc-,4c 00438999 34 31 2A 37 26 63 22 63 37 36 37 2C 31 2A 22 2F 41*7&c"c767,1*"/ 004389A9 63 79 07 43 43 00 00 38 AF 43 00 40 19 40 00 E0 cyCC..8¯C.@@.à 004389B9 19 40 00 @. el trozo completo seria asi Citar 004386F9 ....°@.7...............( 00438739 ....@.......é..é..8...@@.........................«C@.‡C.u 00438779 ser32.dll..MessageBoxTimeoutA...'?(% -i,0II....;;&;II..,+<.i&< 004387B9 ;:,%/II........®C.e?@. @.@.8@@.ÿh@.$A.—j@.•K@.•K@.˜K@.0@.æ 004387F9 K@. K@.àK@.Éj@.¦K@.Ÿm@.—j@.—j@.—j@.þh@.r@.Tr@. @.&‡@.°@.œj@.w 00438839 i@.—j@.ª@.‡ª@.Øs@.àm@.Ì@.k@.=k@.Mk@.]k@.~k@.Ÿk@.Àk@.ák@.l@.# 00438879 l@.Dl@.il@.Šl@.šl@.ªl@.Ël@.ìl@.m@.=m@.Um@.rm@.rm@.“m@.F«@.~–@. 004388B9 —@.Wi@.@..@.ð@.?@.Æ@.)j@.s¡@.i@.þh@.ûª@.´B@.•K@.n@.n@.¾ 004388F9 >@.Ë>@.à@.ÈG@."H@.²G@.¡E@.@@..?@.1?@.J?@.þh@.À@.msg.,‰C.Ì...ÿ 00438939 ÿ......ì9C.....................8...@...................... 00438979 ...«C@.L‰C..,-$1"76/"7*,-0oc-,4c41*7&c"c767,1*"/cyCC..8¯C.@@.à 004389B9 @.@.8@@.ÿh@.$A.—j@.•K@.•K@.˜K@.€@.æK@. K@.àK@.Éj@.¦ claramente se ve la indexacion a la api y parte del trozo me explico si fuera por cambiar el serial o pass es posible 00438779 pues desde aqui se forma la palabra Invalid 00438789 00 .->I 00438799 27 3F 28 25 20 2D 69 02 2C 30 49 49 00 00 00 0C '?(% -i,0II.... 004387A9 3B 3B 26 3B 49 49 00 0D 2C 2B 3C 2E 69 10 26 3C ;;&;II..,+<.i&< 004387B9 3B 3A 2C 25 2F 49 49 00 00 00 00 00 00 00 00 10 ;:,%/II........ si cambiamos simplemente a 00438789 69 .->I 00438799 69 00438798 6969 3F 2825202>imul ebp, dword ptr [ecx+3F], 2D20252> pues simplemente cambiamos el Invalid a valid y creeriamos por lo menos que esta un poco mas sencillo de lograr que un serial.. apareciendo el mensaje --------------------------- Error --------------------------- valid Key --------------------------- Aceptar --------------------------- jeje saludos es solo para que no se piense que no es posible alterar el mensaje sin serial (quizas eso dira x4uth) saludos a todos Apuromafo esto es solo un anexo para evitar que digan, pero si me pierdo, si no hay datos , que no hay trozo donde debo buscar, pues creo que estoy bajo la pista, pero no bajo la huella del serial completo como bien dije es largo y no tengo tiempo mas que el que ven asi que saludos, y nos vemos oootro dia resumen el objetivo que plantea es dificil a nivel newbie-medio si fuera de crackearlo y hacer simular algo registrado pues solo basta editar el recurso y jugar con 00438789 69 .->I 00438799 69 saludos Apuromafo Título: Re: CrackMe05 by x4uth Publicado por: x4uth en 20 Agosto 2008, 01:12 am Pero ahi solo has obtenido el mensaje de chico malo cambiado.... Cuando quieres crackear algo parcheando, se trata de buscar el salto final donde decide si el serial es bueno o malo y cambiarlo, no de cambiar el texto del mensaje malo que es solo texto... si lo que querias es un mensaje felicitandote es mas facil poner en el Entry Point
push 00h push "Felicidades" push "El serial es correcto" push 00h call MessageBoxA y ahi ya tienes el mensaje incluso antes de ejecutar el crackme xD, de todos modos el objetivo aqui no es parchear, es encontrar el serial, es dificil si, esa es la idea, para eso es un reto, mientras mas dificil mas cosas aprendes, mas te superas, mejor te sientes cuando lo terminas,... el tipico crackme de poner un bp en strcmp esta bien si es la primera ves q abres el Olly pero despues uno va buscando cosas de otro nivel. Y bueno ahi por lo q he visto aun no llegaste a la parte donde comprueba el serial :/ . De todos modos lo importante es hecharle ganas y eso veo q lo tienes, sigue asi :D Saludos Título: Re: CrackMe05 by x4uth Publicado por: apuromafo CLS en 20 Agosto 2008, 03:19 am jeje bueno solo coloque lo relevante, pues hasta el momento pensabas que nadie miraba tu crackme ni nada
asi que bueno, espero alguien con todas las pistas y con tiempo pues que salga todo :) saludos Apuromafo Título: Re: CrackMe05 by x4uth Publicado por: ........... en 21 Agosto 2008, 04:36 am Buenas a tod@s!!
Llevaba un tiempo leyendo el foro, y me he decidido a registrarme. Aunque no participo mucho, realmente tengo de momento poco que aportar en este mundillo, me suelo mover por webs guiris, pero me alegra que también haya sitios de habla hispana como este. Bueno, a lo que iba. Ayer me dispuse a resolver este crackme. En principio usando el plug-in Phantom parece que el antidebugger se soluciona. No me costó llegar a las siguientes conclusiones: - El serial debe tener un número de caracteres entre 10 y 35. - Sólo son válidas las letras de la A a la P, y no pueden haber dos iguales consecutivas. Pero el problema viene con la última condición que debe cumplir, que se encuentra en la subrutina que va desde 401610 hasta 40170F. Ahí, en principio, para que el serial sea válido, debe saltar al PUSH 1 de la línea 4016EA. Lo malo es que es imposible que haya un serial que no produzca el salto en el JNZ de la línea 401690, que va al PUSH 0 de la línea 4016EE. No veo forma de que EBX pase del valor inicial al final mediante esos saltos de 1h ó 1Ah, con la cantidad de restricciones en el salto que hay: (http://img225.imageshack.us/img225/9823/snap26hv0.th.gif) (http://img225.imageshack.us/my.php?image=snap26hv0.gif) Veo que en esa subrutina no puedo poner en las primeras líneas un BP por software, aunque sí por hardware, y tampoco veo que eso cambie nada. Así que, bueno, o hay algún truco oculto que no logro encontrar o no sé; se agredece alguna pista. La del x4 no acabo de ver qué es. Pues nada, saludos Título: Re: CrackMe05 by x4uth Publicado por: x4uth en 21 Agosto 2008, 14:30 pm El icono (con un poco de imaginacion) tiene pintado un laberinto, esa era la pista, todo es un especie de laberinto en el cual tienes que mover dos punteros hacia un punto, y bueno con la imagen esa que has puesto veo que ya lo tienes dibujado en el dump, te falta llebarlos al lugar. La cosa es que debes mover los 2 punteros a la ves (cada caracter mueve los 2) y puedes estar seguro que hay al menos un serial valido.
Buen trabajo :) pd. pintarlo a mano y en el dump quiza no sea la mejor manera, es muy facil equivocarse, y ad+ es poco probable que te quede alineado Título: Re: CrackMe05 by x4uth Publicado por: ........... en 21 Agosto 2008, 18:21 pm Para el otro puntero, EDI, sí consigo que llegue, pero para este no vi manera. (Cada letra del serial como comentas nueve ambos.) Los bytes que he tachado son los del tipo x4, x5, x6, x7, xC, xD, xE y xF, que hacen que el resultado del OR con 4 no sea 0 y se produzca el salto en el JNZ.
Muchsa gracias x4uth, volveré a echarle un vistazo ahora a ver si encuentro donde está mi error. Título: Re: CrackMe05 by x4uth Publicado por: apuromafo CLS en 22 Agosto 2008, 20:31 pm cuando tenga mas tiempo osea mañana, si no esta resuelto pues le echare otra mano, no me resultaba por usar numeros de serie continua quizas o mas bien porque puse apuromafo
y la letra o y u no son de la A a la P animo susanalic pues creo que eres capaz de resolverlo antes que yo tome otros 3 minutos para crackear algo jeje, pd: yo al dia crackeo 3 minutos y despues sigo estudiando , solo eso gasto al dia para comentar 1 crackme o programa lo demas es charlas o apoyo, saludos Apuromafo Título: Re: CrackMe05 by x4uth Publicado por: ........... en 22 Agosto 2008, 22:45 pm Lo dejo por imposible. He conseguido 3 rutas, pero de más de 35 caracteres, una de ellas de 36.
Aquí dejo el manual inconcluso. [edit] No se me ocurre alguna forma que me de un serial correcto de forma sencilla sin buscarlo a mano. Título: Re: CrackMe05 by x4uth Publicado por: apuromafo CLS en 23 Agosto 2008, 05:19 am bueno lo proximo seria un bruteforce
00401672 |> /81FB 232A4400 /cmp ebx, 00442A23 00401678 |. |75 08 |jnz short 00401682 0040167A |. |81FF 232A4400 |cmp edi, 00442A23 ahora bien se que es dificil cumplir el salto pero es claro lo que se debe lograr debemos o debes lograr que el valor de EDX y EDI sean 442A23 ahora bien que influye en todo esto pues el saber que los valores tomados siguen un cierto orden 004016A9 |> \83EB 01 |sub ebx, 1 ; Case 0 of switch 0040169D 004016AC |. EB 0D |jmp short 004016BB 004016AE |> 83EB 1A |sub ebx, 1A ; Case 1 of switch 0040169D 004016B1 |. EB 08 |jmp short 004016BB 004016B3 |> 83C3 01 |add ebx, 1 ; Case 3 of switch 0040169D 004016B6 |. EB 03 |jmp short 004016BB 004016B8 |> 83C3 1A |add ebx, 1A ; Case 2 of switch 0040169D 004016BB |> C1EE 02 |shr esi, 2 ; Default case of switch 0040169D 004016BE |. 83FE 03 |cmp esi, 3 ; Switch (cases 0..3) 004016C1 |. 77 22 |ja short 004016E5 004016C3 |. FF24B5 241740>|jmp dword ptr [esi*4+401724] 004016CA |> 83EF 01 |sub edi, 1 ; Case 0 of switch 004016BE 004016CD |. 83C5 01 |add ebp, 1 004016D0 |.^ EB A0 |jmp short 00401672 004016D2 |> 83EF 1A |sub edi, 1A ; Case 1 of switch 004016BE 004016D5 |. 83C5 01 |add ebp, 1 004016D8 |.^ EB 98 |jmp short 00401672 004016DA |> 83C7 01 |add edi, 1 ; Case 3 of switch 004016BE 004016DD |. 83C5 01 |add ebp, 1 004016E0 |.^ EB 90 |jmp short 00401672 004016E2 |> 83C7 1A |add edi, 1A ; Case 2 of switch 004016BE ahora bien hacer pasar las letras es un poco complejo , pero para que tengas una idea de pasar 10 letras a un estilo poco comun mira un poco intenta este serial como base ADFJCOBNMC luego le vas incrementando y viendo los valores llegara la deduccion que esto es un calculo matematico que suma y resta, y es esa suma y resta la que falta resolver ahora vemos los cases y vemos nuestro serial (el orden de los cases) 00301112202310130320 ceros=7 unos =5 dos=4 tres=4 solo deberian ser pares al parecer o algo asi claramente este es impar hay otros que son como y en comparacion a ADFJCOBNMC se puede agregar mas letras para las pruebas pero igual debe ser de preferencia par, para la verificacion aparte que sean con esas letras ahi condiciona que sean en forma mEDIA EXTRAÑA me explico 1 4 6 12 1+1=2 mas el resultado obtenido 4 +resultado anterior=6 6+resultado anterior (4)= 12 Y PASA A ser mas o menos valido el valor ahora bien letras como en forma par pueden ir enlazandose de a poco para jugar a las matematicas AD MC FK CO BN ahora en esa misma tematica, esos valores o numeros de suma o resta deben ser exactos para que de el resultado eso que dicen los case no es al azar y debe tener su logica pues cuando es invalido pues los valores no son tomados todos ejemplo 004016D5 |. 83C5 01 |add ebp, 1 ->la letra es tomada por lo ideal creo que deberia pasar lo menos por los add, en especial por los add 1A eso es lo que creo saludos me voy a dormir..espero sirva esto poco para que puedas continuar con algun analisis pues solo una combinacion grande de 0(resta) 2(suna)= valor que queremos pues sera la solucion para terminar pd:si no hubiera tenido la condiciones quizas hubiese sido mas facil ahora bien como otro dato 004016DA 83C7 01 add edi, 1 este valor da una zona normalmente descuadrada osea es indice que los pares aun no estan bien calculados o bien aun no existe el patron normal creo que tiene que ver con alguna matematica o formula muy bien pensada pero como es tan corto el tiempo que tomo en verlo, pues solo intente unos pocos dedoforce.. asi que si se logra programar un bruteforce con pares de letras en vez de letras, en un momento quizas seria posible llegar a la solucion no se me ocurre aun el bruteforce pero deberia ser de a par.. acabo de bajarme el pdf y claramente sale tu solucion pero para 36 letras intenta saludos Apuromafo ahora bien el calculo deberia ser de a par, pero nimporta demosle segun el calculo ?4429D1+52 ->valor final para EBX 52= 82 en decimal para EDI ?00442A5F-3C->valor final para EDI -3C =-60 osea deben ser minimo 10 menos 10 osea -10 -10 -10 -10 -10 -10 o sea -a-a-a-a-a-a para EDI recuerda que el 0a=10 por lo tanto sacar un 82 minimo debe ser 10+10+10+10+10+10+10+10+1+1 y lo otro puede ser neutro ahora bien seria +a+a+a+a+a+a+a+a+a+a1+1 ->minimo de serial para EBX=10 y lo otro seria un neutro con esto podria ser un serial de 20 letras como minimo saludos e intenta con los pares validos para ver que valor indexan, o suma o resta ahora bien como se que es dificil en el comentario tambien esta para recordar que hace amm importante que la posicion por el OR no es igual para las mismas letras pero son tomadas en pares..insisto de a par se puede hacer una tabla en cada posicion (10 posiciones diferentes ) osea 10 tablas y se tendrian todos los casos validos en caso de como serial correcto quizas con 1 tabla y basta, pero uno siempre piensa en keygen- pero como tu dominas mas el tema si suma o baja edx o ebx es solo esa parte de que no querias calcular-- aun como para seguir avanzando quizas con estos datos ya lo resuelve alguien que este interesado como para hacer una tabla mas decente, pero de por hecho yo creo que ya con 20 de serial debe ser posible de resolver se que tu lo haces matematicamente y con sumas y todo quizas esos 20 puede haber una suma y resta a la misma vez, haciendolo mas pequeño el serial realmente , porque realmente pasa por el 1ero y despues por el segundo por lo tanto el minimo seria 10 LETRAS..lo MAS PROBABLE ahora bien mirando el tema para que sea mas facil pues como comentario Citar 0040169D |. 83FA 03 |cmp edx, 3 ; definicion de los proximos casos; Switch (cases 0..3) 004016A0 |. 77 19 |ja short 004016BB 004016A2 |. FF2495 141740>|jmp dword ptr [edx*4+401714] 004016A9 |> 83EB 01 |sub ebx, 1 ; case 0 desde 40169D ->acaba de RESTAR 1 en EBX; Case 0 of switch 0040169D 004016AC |. EB 0D |jmp short 004016BB 004016AE |> 83EB 1A |sub ebx, 1A ; case 1 de 40169d ->acaba de restar 10 en EBX; Case 1 of switch 0040169D 004016B1 |. EB 08 |jmp short 004016BB 004016B3 |> 83C3 01 |add ebx, 1 ; caso 3 de 40169d->acaba de Sumar 1 en EBX; Case 3 of switch 0040169D 004016B6 |. EB 03 |jmp short 004016BB 004016B8 |> 83C3 1A |add ebx, 1A ; caso 2 de 40169d ->acaba de sumar 10 en EBX; Case 2 of switch 0040169D 004016BB |> C1EE 02 |shr esi, 2 ; shr esi con 2 ; Default case of switch 0040169D 004016BE |. 83FE 03 |cmp esi, 3 ; definicion de los proximos casos; Switch (cases 0..3) 004016C1 |. 77 22 |ja short 004016E5 004016C3 |. FF24B5 241740>|jmp dword ptr [esi*4+401724] 004016CA |> 83EF 01 |sub edi, 1 ; RESTA 1 en EDI; Case 0 of switch 004016BE 004016CD |. 83C5 01 |add ebp, 1 004016D0 |.^ EB A0 |jmp short 00401672 004016D2 |> 83EF 1A |sub edi, 1A ; RESTA 10 en EDI; Case 1 of switch 004016BE 004016D5 |. 83C5 01 |add ebp, 1 004016D8 |.^ EB 98 |jmp short 00401672 004016DA |> 83C7 01 |add edi, 1 ; SUMA 1 en EDI; Case 3 of switch 004016BE 004016DD |. 83C5 01 |add ebp, 1 004016E0 |.^ EB 90 |jmp short 00401672 004016E2 |> 83C7 1A |add edi, 1A ; SUMA 10 a EDI; Case 2 of switch 004016BE 004016E5 |> 83C5 01 |add ebp, 1 ; EBP CONTADOR; Default case of switch 004016BE 004016E8 |.^ EB 88 \jmp short 00401672 y eso de los valores de 00 30 00 30 20 como guiandose en los cases, y los pares son para el segundo puntero y el primero osea uno para guiarse con EBX y otro para EDI asi que mucho animo y comienza buscando pares de letras con 16 minimo y quizas en 1 dia ya lo tengas listo solo basta darse un tiempo y terminar de a par saber cuando suma en el primero y cuanto resta en el segundo para cada par de letras y evitar ir letra a letra..aunque se que es mas facil aveces esas tablas son bien factibles de enseñar a trabajar.. saludos Apuromafo pero teniendo una tabla par si suma o resta de forma que sepa si suma o resta, pues ahi creo realmente que se puede dar una coalision con un serial correcto en menos tiempo antes de jugar con todo , pues baste tener tiempo libre buenisimo analisis de los registros, supongo que ya estas dominando temas de maquinas virtuales, si no te animo a que las veas pues es similar a esos calculos de posibilidades.. bueno saludos y espero este mini dato a=10 puede que te sirva a llegar al valor un poco mas rapido Saludos Apuromafo no creo que sea por el graan serial sino por la ruta real que lo determina esto 00401689 |. 8A0F |mov cl, byte ptr [edi] 0040168B |. 0A0B |or cl, byte ptr [ebx] 0040168D |. F6C1 04 |test cl, 4 pues es parte de la condicion anterior de los xor 4 y todo eso.. esta es la linea que limita aun mas las rutas y aun sigo viendo si 8 veces las letras EDX “C”,“G”, “K” ó “O”; 2 veces el caso 3 EDX será 3 con las letras “D”, “H”, “L”, ó “P”. 6veces el caso 1 ESI=1 con las letras “E”, “F”, “G”, ó “H”; tendriamos el subconjunto de letras CDEFGHKLOP teniendo un bruteforce de el subconjunto de estas letras, quizas sea posible dar cercano al momento algun serial valido respetando las condiciones aunque insisto el analisis que hiciste fue de 1 byte y para resolverlo minimo debe ser de a par porque tendras el serial valido quizas ahora bien nopeando el lugar dificil solo daria una aproximacion para el serial pero estaria descuadrado, por lo tanto debe ser en PAREs de letras segun tu tutorial la primera parte para los EDX edx=0 de 004016BB resta 1 en EBX letras “A”, “E”, “I”, ó “M”; edx=1 de 004016BB resta 1A letras “B”, “F”, “J” ó “N”; EDX=2 de 004016BB suma 1A letras “C”,“G”, “K” ó “O”; EDX=3 de 004016BB suma 1 EDX será 3 con las letras “D”, “H”, “L”, ó “P” y la SEGUNDA PARTE DE LOS ESI ESI=0 de 004016BE RESTA 1 en EDI; letras “A”, “B”, “C”, ó“D”; ESI=1 RESTA 10 en EDI letras “E”, “F”, “G”, ó “H” ESI=2 SUMA 1 en EDI letras “I”, “J”, “K”, ó “L”; y ESI=3 SUMA 10 a EDI letras “M”, “N”, “O”, ó “P”. igual podrias postear tu serial de 36 :) pd: te aseguro que te ira bien, porque si con estas cosas son una buena forma de entender adonde apunta la pila :) bueno dejo eso a mano por si alguien no lee el link solo falta matematicas exactas de poder calcular el serial y que cumpla con la condicion de 00401689 |. 8A0F |mov cl, byte ptr [edi] 0040168B |. 0A0B |or cl, byte ptr [ebx] 0040168D |. F6C1 04 |test cl, 4 pues no basta con tener el valor correcto supuesto, si no pasara por la ruta por eso los valores de a 2 son una buena forma de practicar con los valores o pares de valores y poder seguir la ruta sin problemas de estar peleando o volver al valor anterior saludos Apuromafo ,voy a dormir, creo que gaste mucho tiempo pensando en posibles bf sin llegar a nada en concreto pero si como dato 004016EC |. /EB 02 jmp short 004016F0 004016EE 6A 00 push 0 eso podria ir a injertarse para verificar cuanto falta en EBX y en EDI ]004016EE -me acabo de levantar para hacer mis cosas y para avanzar un poco un mini analisis para la palabra ADFJCOBNMC para EBX par AD resta 1 suma 1 par FJ resta 1A resta 1A par CO suma 2A suma 2A par BN resta 1A resta 1A par MC resta 1 suma 1A ----------------- creo que se entiende la idea de que estoy haciendo pff luego de lograr una tabla claramente llego a lo que paso susanalic.. no sirve anotar de a pares lo que importa es la ruta pero igual llego al mismo pensamiento que es dificil hacer una ruta pequeña se que hiciste eso pero para esas letras sean validas en la ruta igual demanda algo mas saltos posibles son: +1, +1A, -1 ó -1A (+1, -1, +26 ó -26). +1+1A+1A+1A -> quizas hubiese alguna variante.. Título: Re: CrackMe05 by x4uth Publicado por: ........... en 23 Agosto 2008, 05:37 am He mirado ya todas las posibles rutas varias veces y no encuentro ninguna de menos de 36. Hay tan pocas rutas válidas (restringidas a bytes válidos y además sólo con saltos de 1 ó 1A) que veo difícil que me haya dejado alguna fuera, y tampoco me compensa seguir buscando, ni ganas de programar una búsqueda automática. Una vez entendido el crackme y el algoritmo es suficiente.
Eso sí, me gustaría ver ese serial válido :D _______ El a del tutorial es una errata, por copia y pega del bloc de notas. En vez de a es 1A. Date cuenta que los saltos posibles son: +1, +1A, -1 ó -1A (+1, -1, +26 ó -26). Ah, y muchas gracias apuromafo. No, aún no sé nada de máquinas virtuales, ni muchas otras cosas, unpacks y demás. Eso será lo próximo. Título: Re: CrackMe05 by x4uth Publicado por: ........... en 23 Agosto 2008, 06:45 am AMAMAMBABNBAMAMACOCAMAMCOCAEAEMAOC
Al final he tenido que escribir un programilla. :rolleyes: __________ Lo que hice fue lo siguiente: - desde el punto inicial marcar todos los puntos a los que se puede llegar. - a partir de estos segundos puntos, conseguir todos los terceros, - y así sucesivamente hasta que alguno obtenga el punto final - Finalmente se traza la ruta inversa. Hay pocas rutas, pero al ser tan largo el serial, se tarda mucho tiempo asíéndolo a mano. El programilla que he hecho ya calcula todas las rutas posibles (todas las combinaciones válidas y sin que pasen dos veces por el mismo punto). _____- Que alguien me explique por qué el foro cambia automaticametente la palabra haciendolo (con acento) por asíéndolo, xD :laugh: Título: Re: CrackMe05 by x4uth Publicado por: ........... en 24 Agosto 2008, 14:57 pm Actualizado, saludos
http://personales.ya.com/susanalic/Crackme5.pdf Muchas gracias apuromafo por la ayuda e interés, y a x4uth por el crackme. Título: Re: CrackMe05 by x4uth Publicado por: apuromafo CLS en 24 Agosto 2008, 22:10 pm susanalic
agarra un traductor para ingles e intenta traducirlo a ingles y postearlo en http://crackmes.de/users/x4uth/serialme5/ asi tendrias uno resuelto por ti aprovecha de registrarte..en crackmes.de lo guarde tb para que no se pierda el logro ha quedado espectacular, felicidades solo te digo como experiencia que el tutorial debe ser en ingles para postearse y creeme que puede ser util para recordarse (siempre haz un backup para antes de enviarlo, pues las respuestas tardan un poco) espero lo hagas :) y si puedes dejarlo en bilingue osea ingles y español a la vez creeme que puede ser util para quien te siga el rastro en algun año..o de referencia saludos Apuromafo creo que con todo lo visto, has hecho algo espectacular, saludos sigue asi Título: Re: CrackMe05 by x4uth Publicado por: ........... en 25 Agosto 2008, 06:24 am Bueno, tengo que sacar un poco de ganas y tiempo antes de traducirlo. Gracias por todo.
Título: Re: CrackMe05 by x4uth Publicado por: x4uth en 28 Agosto 2008, 22:52 pm muy buen tutorial susanalic, muy bien explicado, felicidades
si alguno tiene opiniones sugerencias criticas etc puede postearla aqui o enviarmelas por privado y las tendre en cuenta para mi proximo crackme pd: y bueno para ayudar a entender un poco de q iva el asunto os pongo la idea original aunque para encontar el serial esto no es necesario saberlo. como habia dicho antes, toda la zona "constante" es un laberinto, concretamente este (http://img373.imageshack.us/img373/1931/labma2.gif) , ahi estan denotados los punteros inciales y el final con un *. sumar o restar valores corresponde a los movimeintos, (-1A bajar , +1A subir , -1 izq, +1 Der) habia mas de una forma forma de llegar a la solucion (otra forma es AMAMAMBABNABAEAMCOCAMAMCOCMAMAMACG) Título: Re: CrackMe05 by x4uth Publicado por: ........... en 29 Agosto 2008, 21:20 pm La verdad que estoy en condiciones de dar pocos consejos, :laugh: si acaso lo que comentaba en el post, no poner llamadas a direcciones directas, mejor usar del tipo:
mov eax 400000 add eax, 42456 call eax Y nada, muy ingeniosa la idea del laberinto, felicidades y gracias Título: Re: CrackMe05 by x4uth Publicado por: tena en 29 Agosto 2008, 23:07 pm Felicitaciones por el tutorial, muy bueno...
y tambien por el crackme, muy ingenioso Gran trabajo!!! saludos tena Título: Re: CrackMe05 by x4uth Publicado por: x4uth en 30 Agosto 2008, 01:00 am La verdad que estoy en condiciones de dar pocos consejos, :laugh: si acaso lo que comentaba en el post, no poner llamadas a direcciones directas, mejor usar del tipo: mov eax 400000 add eax, 42456 call eax Y nada, muy ingeniosa la idea del laberinto, felicidades y gracias ese es un truco bastante usado en los packers pero es complicado. Si se hace para todas las apis haria falta necesariamente un subprograma (tipico packer) que se ejecutara antes q el mio y que creara una sección nueva con esa estructura y redireccionara la IAT hacia alli. (esto es practicamente hacer un packer y requiere muuuuuucho trabajo). Si se hace a mano solo para las apis que quieres ocultar estas dejando pistas pues en cuanto descubra como funciona una (q no es dificil) puede sacar todas las demas de la misma manera y ya sabe hasta cuales son importantes. Ambos casos requieren obtener las direcciones de las apis dinamicamente (llamando a GetProcAddress o similar) y ahi ya tiene su punto debil pues pones un bp en GetProcAddress y puedes ver todas las apis ocultas una por una. De todos modos vere que puedo hacer. (si alguno sabe una manera mas facil de hacerlo q lo diga xD) |