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