xuhw 发表于 2007-3-25 13:48:11

5发CrackMe,大家来练习

5发CrackMe,大家来练习!继续啦!!!

不懂算法 发表于 2007-3-26 21:07:40

这个crackme是楼主写的么?厉害厉害/:good /:good
里面又antidbg,如果检测到od就会用假的算法来做运算,让人晕的是竟然是明码比较
简单说一下算法吧,我以用户名crackme为例,我机器上的序列号是E6E110-B43D89-546354-343637
先计算asc码之和c+r+a+c+k+m+e=0x2D6,然后乘以最后一位的asc码0x2D6*'e'=0x2D6*0x65=0x11E6E,十进制是73326
然后去取第三位(用户名长度除以2,7/2=3)a,取其asc码的十进制是97,然后“73326”+“97”=“7332697”
取第一位和末尾位合并位“77”,转成3位的16进制位0x04D,跟0x11E6E的倒序加一起是“E6E1104D”,取前6位“E6E110”为序列号的第一部分
序列号的第二部分跟一个恒定的字符串有关,是“34B857A39F184C720E98D”
程序对十进制73326做一个运算,把每位数值加起来7+3+3+2+6=21,然后再2+1=3,一直算到位一个一位数,我们这里是3,这个3在后面很多地方用的到
取字符串的第三位(这个就是刚才运算出来的),每取一次字符串的末尾变到开头,即变为“D34B857A39F184C720E98”,再变的话为“8D34B857A39F184C720E9”
一共取6次,其实就是从第三位往前取,到开头的话再从最后取,反正是取够6为,我们这里为“B43D89”,就是序列号的第二部分
然后把第一部分跟第二部分组合起来为“E6E110-B43D89”,再加上第二部分“E6E110-B43D89B43D89”,然后对这个字符串做刚才的操作
取得字符串“E6E98D”,然后取这个字符串每位asc码的反转再组合一起,譬如E的asc码是45,反转后是54,6的asc是36,反转就是63,这样取得字符串“546354938344”,再取这个字符串的前6位位序列号的第三部分
序列号的第四部分跟windows的产品ID有关,注册表里面HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\项下面
ProductId的值,我机器的值为76481-640-0059266-23485,去掉“-”号得到“76481640005926623485”对这个字符做操作得到
“467584”,再对这个字符每位取asc码值,注意这次不反转得到“343637353834”,再去前六位“343637”作为序列号的第四部分
注册成功后会在同一目录下面生成一个Registration.dat的文件,下次启动检查
呵呵,大家看到了吧,算法很简单,而且还是明码比较,所以这个crackme的关键不是在算法,而是那BT的壳
壳大家慢慢脱吧,程序的真正oep是00457740
004571FF   /75 1D         JNZ SHORT CrackMe5.0045721E            是anti的关键跳,一定要跳过去
00457234    E8 9BFBFFFF   CALL CrackMe5.00456DD4这个      是算法call,算出来的序列号是反序的,比较前会再反过来
00457269   /75 2B         JNZ SHORT CrackMe5.00457296            这个是关键跳

xuhw 发表于 2007-3-27 09:39:04

厉害啊/:04 /:08

lgjxj 发表于 2007-3-29 16:50:42

真的是不懂算法的,我想他只是-个比较精通加密算法,对破解中的陷阱比较容易发觉,
对比较难的 CM 比一般会算法的人快一步搞定的一个人而尔

不懂算法 发表于 2007-4-4 23:17:52

给出我脱完壳的程序

aoshxi001 发表于 2007-4-5 14:35:57

我脱的壳,后程序

我脱的壳,后程序,可以运行,但注册码无法查找,是何原因
页: [1]
查看完整版本: 5发CrackMe,大家来练习