首页
社区
课程
招聘
[分享]DiskGenius注册算法简析
发表于: 2013-3-13 20:09 119839

[分享]DiskGenius注册算法简析

2013-3-13 20:09
119839
收藏
免费 7
支持
分享
最新回复 (110)
雪    币: 10971
活跃值: (17392)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
51
楼主的技术太好了,来支持啊
2013-3-18 09:09
0
雪    币: 627
活跃值: (663)
能力值: ( LV9,RANK:270 )
在线值:
发帖
回帖
粉丝
52
同道中人,感谢你的赞美之辞。

我也一直是持这样的观点:尽量不要动原程序,破解与爆破应是实在不得已时才为之。

借此回复再罗嗦几句。

有人要这个的完美破解,我现在没有,也不打算有。有效的注册码和注册机,游戏规则和我的本意都不允许我公开。承蒙大家厚爱,在下感激不尽,不周之处还请各位谅解,不一一回了。

写这篇文章的目的是与那些真正对保护和算法感兴趣的人交流我的方法和思路,也是论坛所提倡的。我也从别人那里学到了我需要的东西,应该感谢他们。对于新手,也可通过学习实践逐步成长起来。在其他不熟悉的领域,我现在同样是新手!

具体到本文目标的分析,我们也可以得到成功的经验和失败的教训。在磁盘处理方面,它是专家;但在软件保护方面就显得稍弱一些。
比如说那个注册标志,一开始程序把它设成一个负数,每过一关就加一,到最后归零,表示注册成功。让追踪的人容易理解,若用一个随机数就不那么好猜了。
另外,它只对要处理的数据进行了简单加密,程序代码则完全没有保护。只用到一项技术:关键代码和初始数据从程序中解压缩到一个固定的内存段。
注册码是通用的,但软件商不能这么干,一定是一个用户对应一个注册码。激活码部分相对容易,跟一下程序对Options.ini里key的处理就清楚了。注册码的算法稍微困难一些,那些VC++的反汇编代码让人头痛。

纠正一下帖中关于加密锁的说法。
它是一个“绿色”软件,解开到任何位置,再配合激活文件Options.ini[+加密锁]就可正常使用。它在注册表读/写的唯一内容是ShowLicense的值,对应Options.ini里的[LicenseInfo]节。注册激活工作应在准备进行数据恢复前完成,一个严肃的数据恢复软件是不允许再向待恢复数据的分区写入的,这在使用时需要注意。
在用户有加密锁的情况下,激活码key(也含校验位)的内容解密后与加密锁读出的内容进行比较。这样带来的好处是方便用户,可以在任何一台机器上使用,只要保证Options.ini+加密锁的组合是正确的。
它提供的加密锁分两种:普通USB加密锁和带U盘功能的加密锁。后一种锁对用户非常方便,只需把它做成U启就好了。

前面说过没有加密锁可以写Driver来模拟,事实上简单一点可以通过Hook几个系统DLL来达到相同的目的。程序没有使用加密锁厂商的DLL,而是静态连接厂商的Lib,稍微跟一下,VID和PID就出来了。

得到的教训是:不能把你的东西都放在程序里。要做到这点也比较难,再丑的媳妇也总是要见对公婆的。
2013-3-18 18:26
0
雪    币: 370
活跃值: (15)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
53
技术高超,人品一流,服了U
论坛沉寂了好久,没想到一来就读到这么精彩的文章,
不,是多次来拜读。
2013-3-18 20:13
0
雪    币: 435
活跃值: (1257)
能力值: ( LV13,RANK:388 )
在线值:
发帖
回帖
粉丝
54
DG真心是个好软件,lz的文章是篇好文章
一直在用免费版,感谢dg,感谢lz
2013-3-19 10:08
0
雪    币: 119
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
55
我是来mark的。。。
2013-3-19 10:21
0
雪    币: 234
活跃值: (1649)
能力值: ( LV9,RANK:410 )
在线值:
发帖
回帖
粉丝
56
深奥,需要仔细研究:(
2013-3-19 10:45
0
雪    币: 9442
活跃值: (3348)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
57
技术上的东西看不懂,但文章逻辑严谨,语句无错漏,认真读下来有所收获。
2013-3-19 11:46
0
雪    币: 27
活跃值: (354)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
58
望楼主能提供注册机。
2013-3-19 19:19
0
雪    币: 27
活跃值: (36)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
59
经典啊,多谢!
2013-3-19 22:39
0
雪    币: 268
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
60
不错!感谢!
2013-3-20 06:26
0
雪    币: 96
活跃值: (60)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
61
很想知道楼主是如何判断http服务器应该返回什么样的数据给client
因为在这个过程中,你是没有正确的注册码,无从知道http服务器会返回一个什么字串回来。
你是从wireshark返回的response里面照猫画虎生成的返回串 ?

PS:这类http跟踪,如果带cookie、session、post提交,用wireshark就别扭,用fiddler2比较好用。
2013-3-20 18:51
0
雪    币: 627
活跃值: (663)
能力值: ( LV9,RANK:270 )
在线值:
发帖
回帖
粉丝
62
我用Wireshark的主要目的是想了解Request/Response Header的内容,好让本地服务器正确模拟。请求方法和数据跟程序就可知道。
会话过程非常简单,服务器返回:“Error: 注册码无效!”。帖子中已猜测几个可能的原因。

整个过程应该是这样的:
1) 程序检查regcode的Hash部分,初步证实regcode“有效”才发送激活请求。
2) 想象一下软件商的情形:销售部门得到客户的name、email和钞票,生成一个regcode,应该还包括加密锁的类型信息(早期版本是没有加密锁的)。数据库会增加一条记录,至少含有regcode、name和email信息。
   在用户激活时,程序检查加密锁是否存在:true - 发送加密锁数据(很可能按算法写入些东西再发送);false - 发送用户机器数据。
   激活服务器检索数据库regcode是否存在:false - 返回“注册码无效”;true - 这时已知道客户硬件信息,计算key后返回结果。
3) 程序根据regcode签名,再次验证其有效性。

我们得不到它数据库里的regcode(你总不能偷偷溜进去看吧?能攻破任意站点那就了不起了,法律也不允许)。就算我们算出的regcode碰巧数据库里有(可能性微乎其微),它很可能直接返回数据库里记录的key,这是真实客户的,对我们无用。

这条路堵死了,扔掉Webster吧(用它是假定我们还不知道Options.ini的存在,否则我文章的逻辑就不通了)!回过头来研究key的处理过程,程序启动和激活后都走这个流程。

它不是一个复杂的Web应用,好比一个简单的html页面,你请求它返回就完事儿,不用保留客户端状态,方法为GET,不涉及cookie、session等问题。
2013-3-21 10:37
0
雪    币: 47
活跃值: (31)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
63
牛B的一塌糊涂啊~~~~~~
2013-3-21 20:18
0
雪    币: 205
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
64
其base32编码算法采用的是通用的标准表示字符集吗?怎么看出来的?牛人啊!
2013-3-22 09:33
0
雪    币: 15
活跃值: (48)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
65
Great。
免费版对我来说足够使用了。
不知道适用于最新版本不。
2013-3-22 11:05
0
雪    币: 1948
活跃值: (1474)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
66
很好的破文。。。呵呵  学习了
2013-3-22 12:41
0
雪    币: 141
活跃值: (318)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
67
本章破解用到的知识很多,所以说网络验证和强狗的验证方式不好搞,就是因为要懂的多;广泛涉猎,方可百战不殆!
2013-3-25 14:37
0
雪    币: 38
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
68
楼主这等高人是我等望尘莫及的啊!除了佩服楼主的知识渊博,更加佩服楼主的创新思维....学习了.
2013-3-31 17:35
0
雪    币: 627
活跃值: (663)
能力值: ( LV9,RANK:270 )
在线值:
发帖
回帖
粉丝
69
昨天DiskGenius最新版本V4.3.0发布。

终于,“漏洞”被堵上了。没有加密锁的用户将无法使用DiskGenius 4.3.0.1 Pro。

上传的附件:
2013-4-9 09:09
0
雪    币: 690
活跃值: (1826)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
70
继续把加密锁搞定,
2013-4-9 14:46
0
雪    币: 152
活跃值: (20)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
71
分析的太好了…………新手学习……
2013-4-9 19:54
0
雪    币: 8
活跃值: (29)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
72
楼主技术流~~
2013-4-10 09:23
0
雪    币: 207
活跃值: (30)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
73
[QUOTE=cocomail;1152982]成功注冊, 谢谢分享



[/QUOTE]

分享一个?340364614
2013-4-11 17:00
0
雪    币: 2931
活跃值: (1778)
能力值: ( LV9,RANK:850 )
在线值:
发帖
回帖
粉丝
74
多年不上论坛,看,已经不懂了。
2013-4-21 07:38
0
雪    币: 265
活跃值: (56)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
75
分析很透彻,方法很独到
2013-6-27 14:53
0
游客
登录 | 注册 方可回帖
返回
//