首页
社区
课程
招聘
[原创][crackme]发个挑战帖--算法揭密!
发表于: 2004-12-1 09:06 10691

[原创][crackme]发个挑战帖--算法揭密!

2004-12-1 09:06
10691

原帖在 http://bbs.pediy.com/showthread.php?s=&threadid=2129

crackme的算法
1、所用算法为RSA+DES+MD5,采用注册文件注册
2、注册文件内容如下
typedef struct KEY_Tag
{
    char UserName[128];//注册用户名
    char Sign[512];//RSA加密后的密文
    char DesKey[16];//解密DES密钥的密钥
} KEY;
3、程序中没有最终显示的祝贺信息明文,只有DES加密后的密文CT。
   程序中存在Crackme.RSA.D,和Crackme.RSA.N
4、流程
a)打开注册文件,如果不成功,显示未注册
b)读取注册文件,如果不成功,显示未注册
c)对其中的用户名取MD5值,H1=MD5(key.UserName)
d)用RSA解密注册文件中的密文,H2=RSA.Dec(Key.Sign),RSA所用的D、N为crackme中已经存在Crackme.RSA.D,和Crackme.RSA.N
e)比较H1?=H2,如不相等,显示未注册
f)用DES对加密后的密钥解密,K1=DES.Dec(Crackem.DesKey),所用密钥为H2
g)用DES解密CT,PT=DES.Dec(CT),所用密钥为K1
h)显示PT

keygen的算法
1、所用算法为RSA+DES+MD5,生成注册文件
2、注册文件内容同上
3、程序中存有Crackme.RSA.E,和Crackme.RSA.N
   存有DES加密密钥K1,此密钥事先加密了PT得到CT,存于crackme中
4、流程
a)输入用户名Key.UserName
b)对用户名取MD5值,H1=MD5(Key.UserName)
c)对H1用RSA加密,Key.Sign=RSA.Enc(H1),所用密钥为Crackme.RSA.E,和Crackme.RSA.N
d)用DES对K1加密,Key.DesKey=DES.Enc(K1)所用密钥为H1
e)写入注册文件

可能是这样,时间太长了,有些忘了。


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 7
支持
分享
最新回复 (13)
雪    币: 2319
活跃值: (565)
能力值: (RANK:300 )
在线值:
发帖
回帖
粉丝
2
这个 crackme 没有 keyfile,是不能解开的,对吗  ?  :D

情形就好象注册的部份放在一个 dll 里,这个 dll 只会由公司寄给注册用户一样
2004-12-1 10:12
0
雪    币: 231
活跃值: (115)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
理论上应该是这样。:D
所以设计时主要考虑是,在拿到合法注册文件后要防止做出注册机。也不知道效果如何。
2004-12-1 16:30
0
雪    币: 231
活跃值: (115)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
其实这个crackme还是有点缺陷的。
e)比较H1?=H2,如不相等,显示未注册
这个步骤是明的,因此暗示了Sign就是RSA加密后的MD5值,而且就是MD5(用户名),所以虽然分解N不现实,却可能可以采用替换密钥的方法来解决。当然,这需要一点猜测。

所以,我发了“发个挑战帖之续!”:D
2004-12-1 16:43
0
雪    币: 2319
活跃值: (565)
能力值: (RANK:300 )
在线值:
发帖
回帖
粉丝
5
我有一个想法

就是把注册程序的 dll ,只用简单的 XOR + 位重排列 ,或是 DES,以用户注册资料进行加密

这跟你的概念一样,在注册时寄给用户

这种也是Symmetric key 的加密,没有密轮不可解开,只可以穷举

这样跟你的复杂加方式相比,是不是安全性一样 ?  
;)
2004-12-1 18:21
0
雪    币: 231
活跃值: (115)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
你的意思是,给用户的软件里根本没有DLL,然后注册后你给他一个加密过的DLL,然后他去解密?
2004-12-2 10:14
0
雪    币: 2319
活跃值: (565)
能力值: (RANK:300 )
在线值:
发帖
回帖
粉丝
7
最初由 风云剑 发布
你的意思是,给用户的软件里根本没有DLL,然后注册后你给他一个加密过的DLL,然后他去解密?


对,他使用自己的注册资料解密我寄给他的 dll
2004-12-2 11:16
0
雪    币: 231
活跃值: (115)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
但是对DES这些对称密码来说,他能解密不就等于他也知道了加密密钥了?然后他再把解密后的DLL拿出来单独用别的用户资料加密?
2004-12-2 14:21
0
雪    币: 231
活跃值: (115)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
这个帖子都成了专帖啦!? :(
2004-12-2 16:08
0
雪    币: 2319
活跃值: (565)
能力值: (RANK:300 )
在线值:
发帖
回帖
粉丝
10
对 :D

话说回来,我觉得如果破解者要发布破解的话,即使我们用甚么加密法也好,只要破解者付钱拿到一份注册?,便可以把注册文件和修改了的程序四处发布,依然没有办法保护软件
2004-12-2 18:16
0
雪    币: 231
活跃值: (115)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
但是可以读取计算机某些硬件特征码来防止注册文件的散布。
2004-12-2 19:05
0
雪    币: 231
活跃值: (115)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
提一下,和解密帖放在一起。:)
2004-12-16 09:09
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
暴力+ 已知一个key文件的解密法:
1.  建立文件key.file, 写入128字节UserName, 512字节0, 16字节DesKey (从一个好的key file抄来).
2.  修改程序,运行a,b,c部分, d修改为直接赋值H2 = myH1.
2004-12-16 10:48
0
雪    币: 231
活跃值: (115)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
不一定行,你可以试试看。我给你一个正确的注册文件。
附件:crackme1key.rar
2004-12-16 15:18
0
游客
登录 | 注册 方可回帖
返回
//