难度颇高的CrackMe,分析了半天终于搞定了分析给大佬们试试
这个程序差点搞的我自闭,绕来绕去,被虐的体无完肤的时候,终于日回去了,总共修改了三处,过程下午贴出来,先观摩下大佬的分享过程,让菜鸡学习下。 这个crackme每次会生成随机的账号名和密码,首先要固定一下账号名和密码,不然就只能用内存注册机了。固定账号名和密码只要改一条指令:RDTSC,在如下位置:
00401737/$55 push ebp
00401738|.8BEC mov ebp,esp
0040173A|.51 push ecx
0040173B|.52 push edx
0040173C 33C0 xor eax,eax ;破解位置: 由 rdtsc(0F 31) 改成 xor eax, eax (33C0)后,输入字符全部固定为大写的 M
0040173E|.69C0 FD430300 imul eax,eax,0x343FD ;214013
00401744|.05 C39E2600 add eax,0x269EC3 ;2531011
00401749|.C1E8 10 shr eax,0x10 ;hiword()
0040174C|.25 FF7F0000 and eax,0x7FFF ;15914
00401751|.8B4D 10 mov ecx, ;'z'
00401754|.85C9 test ecx,ecx
00401756|.75 05 jnz short Ye_CM1_5.0040175D
00401758|.B9 FFFFFF7F mov ecx,0x7FFFFFFF
0040175D|>2B4D 08 sub ecx, ;'z'-'a'
00401760|.41 inc ecx ;26
00401761|.33D2 xor edx,edx
00401763|.F7F1 div ecx
00401765|.0355 08 add edx, ;(15914 % 26) + 'a'
00401768|.8BC2 mov eax,edx
0040176A|.5A pop edx
0040176B|.59 pop ecx
0040176C|.8BE5 mov esp,ebp
0040176E|.5D pop ebp
0040176F\.C2 1000 retn 0x10
然后在账号中输入16个大写 M,密码中输入 32 个 M 就可以成功了。
初始化的账号和密码的编码方式説明:
以账号 MMMMMMMMMMMMMMMM 为例説明,将字符 M 取 ASCII 码:0x4D, 异或 0x10,即 0x4D xor 0x10,得到 0x5D,转换成16进制字符串:“5D",这样16个M就是 "5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D",然后再加上9个字符,这9个字符是 MD5("666")中的第3到11字符,为:”E0B27C451“ ,组成 "5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5DE0B27C451",这就是程序初始化好的账号名,密码只是由32个M编码后组成的,后面也是加的"E0B27C451"组成:"5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5DE0B27C451"。但在界面输入的没有编码的原始字符,即账号是16个M组成,密码是32个M组成。 什么鬼,怎么看不到回复评论?
看了画眉的视频才搞定的,但是依然不知道啥原理!还是lz列害。{:1_907:} 列还厉害!!!!!! 列还厉害 一直苦于没有练习的目标啊,谢谢大佬。 嗯嗯嗯,来看看, 小白一个,求楼主发一下教程!谢谢。
字符串搜索,易语言按钮特征码,API都试过了 找不到。 粗略谈下这个程序的分析过程
为什么返回固定key还是不成功了,因为初始窗口过程前还会调用一个call来初始化全局变量并存放对应的真key
所以返回固定key修改完,保存到文件,然后重新运行你会发现成功了
如果是一步步修改的,先修改返回固定key,然后修改=返回的固定key =返回固定的key 然后运行就成功了,
总结,这个程序大概思路是先初始化存放真全局变量key,然后通过线程混淆跟踪,还有就是全局标记是跟执行过程息息相关的,环环相扣,防止别人直接nop或jmp过程,只有这些全局标记的值都是正确的才会跳转到成功,不然就算载入窗口显示的还是失败! 这是比窗口初始化还早的调用,可能是hook也可能是易语言自带的全局变量初始化过程
页:
[1]
2