CoffeeCat's IT Blog

大家来CrackMe

今天我写了一个比较简单的CrackMe程序,程序用VC编写,并参照了看雪论坛riijj的源代码。大家有兴趣可以尝试破解一下。

程序大小152KB,没有加壳,在提交注册码以后会有相应的提示,因此,希望大家不要使用暴力破解。

此CrackMe的注册码还是比较容易找到的,算法并不复杂,不过,要写出注册机很难,高手可以尝试一下,如果需要此CrackMe的源代码,可以联系我或回复此文。



下载地址:
Release版
http://www.cnitblog.com/Files/CoffeeCat/crackme/crackme_Release.rar
Debug版
http://www.cnitblog.com/Files/CoffeeCat/crackme/crackme.rar

posted on 2007-10-18 18:18 CoffeeCat 阅读(2503) 评论(15)  编辑 收藏 引用

评论

# re: 大家来CrackMe 2007-12-06 11:18 wormz

大哥,可以发个release版不,有很多调试的垃圾代码啊~~  回复  更多评论   

# re: 大家来CrackMe 2007-12-06 12:44 CoffeeCat

@wormz
呵呵,我不太明白你的意思~我没有刻意加入垃圾代码来增加破解的难度~  回复  更多评论   

# re: 大家来CrackMe 2007-12-06 14:35 wormz

我明白您的意思,
我一朋友给我个crackme破解,
是从您这里下载的,我就顺便来看了下,
您用vc编译的时候是debug版本的吧,
因此有很多系统调试代码,
例如调用api后的_chkesp用来检查栈的函数,
最好是把调试里的/GZ开关关闭,或者用release版编译
虽然并不是很麻烦,只是看起来别扭,呵呵
大概抽空看了下,里面是把注册码进行一系统的乘除法,
最后的得到的一个散列值要等于0x86ffb5b8这个值,
应该是这样吧  回复  更多评论   

# re: 大家来CrackMe 2007-12-06 20:52 CoffeeCat

@wormz
恩,这下我好像明白你的意思了,我上传的exe文件是直接从debug文件夹中复制过来的~这个和release版本的有区别?呵呵,我以前不知道唉~
另外,请教你一下如何在vc++6.0中编译成release版本?
谢谢  回复  更多评论   

# re: 大家来CrackMe 2007-12-07 09:08 wormz

你可以在vc6的客户区右击,选中Build项就可以了,
编译的时候选择win32 release就可以了
release是作为正式发布的版本,代码优化了很多,
而且你可以对比一下,release会比debug的小非常多的,
执行效率也高很多  回复  更多评论   

# re: 大家来CrackMe 2007-12-07 09:46 CoffeeCat

@wormz
恩,果然啊,debug版本有157KB,而release版只有28KB。
谢谢你喔!
我已将release版上传  回复  更多评论   

# re: 大家来CrackMe 2009-10-22 17:41 lxr

这算法是可逆的吗?我怎么看都不像~~  回复  更多评论   

# re: 大家来CrackMe 2009-10-22 17:53 CoffeeCat

@lxr
这个算法可能是不可逆的,目前还没找到作出keygen的,基本上大家都是暴力破解的。如果是不可逆的算法,那么keygen从理论上就是做不了的啦...  回复  更多评论   

# re: 大家来CrackMe 2009-10-29 16:52 fqzhao

不可逆?白搞了一下午,头都大了...  回复  更多评论   

# re: 大家来CrackMe 2009-10-30 11:12 CoffeeCat

@fqzhao
额,这位兄弟,我不能肯定算法不可逆,只是可能不可逆,因为到目前为止没人做出keygen来。我可以提供算法给您。
如果所有软件都用不可逆算法来验证注册码的话,那么是不是理论上所有软件的破解只能通过暴力破解了呢?算号器或者keygen是做不出来的?  回复  更多评论   

# re: 大家来CrackMe 2011-04-24 17:33 xpoy

keygen的思路:
(v2 & 0xFF23301) + 0xBA2E8BA3i64 * v2 / (signed __int64)0x800000000ui64 + ~(_DWORD)v2 * (_DWORD)v2 == 0x86FFB5B8

算号器就是解方程工具。0xFF23301的二进制
1111111100100011001100000001
每个为1的位都可以置0或1,这样0xFF23301二进制的一个可能性设为z
z + 0xBA2E8BA3i64 * v2 / (signed __int64)0x800000000ui64 + ~(_DWORD)v2 * (_DWORD)v2 == 0x86FFB5B8
得到的结果就是一个可以通过的y
把所有的可能都试一次,算出来的值里面没有小数位的,就是所有可用key的y值。

把算出来的y转化成10进制分成一个个位,然后给每个位+0x30,按10进制的顺序填进去就是可以得到一个key了。因为转化10进制的方式是不处理小数点后的,因此也是一个限制。key也必须是数字了。

key注册流程:

BOOL registerKeyCalc (char * Str)
{
double temp1= 0;
double temp2= 0;
int lenStr;

for (int i= 0; lenStr>=0; --lenStr, ++i)
{
// int j= i;
// temp1= ;
temp1= (double)(Str[lenStr]- 0x30)* pow ( 10, (double)i);
temp2= temp2+ temp1;
}

temp1= temp2;
temp2= temp1* temp1+ (0xBA2E8BA3* temp1/ 0x8)>> 32;
temp2= temp2+ temp1& 0xFF23301;


if (0x86FFB5B8==temp2)
{
return TRUE;
}
return FALSE;
}

另外一般的菜鸟cracker,像我这样数学很差劲的,碰到有注册流程的,就会修改了原程序,让它自己循环修改字符串并调用这个注册key直到返回了TRUE,之后添了个SetDlgItemText把注册码露出来的流程来做一个自keygen的东西。

不过有一个很大的问题,没验证上面的注册流程:P
分析完后也没有做keygen,有喜欢的就继续  回复  更多评论   

# re: 大家来CrackMe 2011-04-24 17:34 xpoy

对了,忘了谢谢一个叫 小黑的朋友帮我算方程式 :P  回复  更多评论   

# re: 大家来CrackMe 2012-12-07 15:19 wuzhiwen

请问修改了JNZ改成JZ希望成功,算不算破解成功?没有分析算法  回复  更多评论   

# re: 大家来CrackMe[未登录] 2012-12-07 22:24 CoffeeCat

@wuzhiwen
算暴力破解成功~
  回复  更多评论   

# re: 大家来CrackMe 2013-01-30 00:23 allenny

程序员的英文怎么都这么差阿  回复  更多评论   

只有注册用户登录后才能发表评论。
<2009年10月>
27282930123
45678910
11121314151617
18192021222324
25262728293031
1234567

导航

统计

公告

常用链接

留言簿(203)

随笔档案

收藏夹

搜索

最新评论

阅读排行榜

评论排行榜