能力值:
(RANK:650 )
|
-
-
2 楼
这不是肯德基
|
能力值:
( LV9,RANK:180 )
|
-
-
3 楼
随便输入一组注册码 得到一HASH值(需符合规则,低2byte需介于0-0A00) <= HASH_1 (18 Byte)
所以 此时硬编码对照到的16Byte已固定.
HASH_1(高16byte) 也固定住
因为用户名的HASH只用2个byte而己.
此用户名HASH由0给他跑到FFFF. 所以应该只要跑 65536 种吧.
|
能力值:
( LV9,RANK:180 )
|
-
-
4 楼
若他可根据用户名称而给你注册码的话, 则
1. 注册码 -> 18byte的HASH 应该不是外面公开的那些 (那些公开的都无法预测)
亦即他无法预测该用第几组硬编码. (低2byte无法预测)
2. 高16byte无法预测
所以最上面那个圈圈出来的东西他更是无法预测, 不可能光靠 2720 项硬编表
所以最上面那个圈圈很有可能不是用OpenSource的HASH
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
如此有一种正确的方法,只有从正确的密钥入手跟踪。
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
如果不同的密匙+红圈解码后得到的是相同的关键程序段(解除时间限制激活等功能),那就是说解码只与密匙的正确与否有关,与密匙的内容无关,这样肯定可以用改跳来解码。欢迎指点。
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
感谢朋友们参与。
回复3、4楼:
这种保护手段的“门锁”,实际就是指向红圈的那个16字节密钥。
软件作者可以这样构造根据用户名生成注册码的程序:
1. 选定“门锁”,一个16字节的密钥,设它为 M。
2. 随机选 2720 个不同的 16 字节数,保存于一数组 R 中。
3. 用 R[i](i=0, ..., 2719)作密钥,对 M 进行两次解密,结果存于一数组中,设它为 H。这个数组就是放在软件中的硬编码表。
4. 有人来注册,先用他的用户名 hash 出一个2字节数,设为 N。
5. 随机取一小于 2720 的数,设其为 SL。以 N 为密钥,对 R[SL] 进行解码,得到的结果设为 SH。
6. 将 SH 作高16字节,SL 作低2字节,构造出18位的注册码散列值 S。
7. 将 S 进行反 hash,得到注册码,发给用户。本软件所用的 hash 函数不过是把0-9,A-F这几个字符转换成别的值而已。如果不对注册码进行变换,直接把 S 给客户就行。
破解者不知道 M,即使知道上面的步骤也找不到能产生 M 的用户名 N 和注册号 S。
回复6楼:
要正确解码那371字节,估计密钥是唯一的。即使有一错误密钥,能使解密的数据通过红圈左面的验证也没用,因为它只是验证那371字节中的前几个字节,后面解得不对,程序很可能会崩溃。
|
能力值:
( LV9,RANK:180 )
|
-
-
8 楼
即然这样, 那效果其实跟"需要向厂商要一组密码来解Code"是一样的道理.
在破解者的眼中其实是一样的. 有M可解, 没M不能解.
同样是有了一组正确的user'pwd, 那就破完了.
只是他弄得比较花俏而己.
|
|
|