CrackMe05 by x4uth

Iniciado por x4uth, 3 Marzo 2008, 01:18 AM

0 Miembros y 3 Visitantes están viendo este tema.

KJD

Cita de: pERICOTE en 12 Abril 2008, 02:51 AM
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 >:(
"Solo hay 10 tipos personas que saben leer binario, los que si y los que no"

"Keyboard not Found, press F1 To Continue" WTF???

x4uth

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...

x4uth

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.

apuromafo CLS

#13
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


Citar004017D7   .  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

Citar00438989  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
Citar004386F9                                        ....°@.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





x4uth

#14
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

apuromafo CLS

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

...........

#16
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:



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

x4uth

#17
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

...........

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.

apuromafo CLS

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