b30wulf 发表于 2018-8-19 19:45:54

WinRAR的,注册机

WinRAR的,注册机
1.什么是WinRAR?
WinRAR是Windows的试用文件归档实用程序,由win.rar GmbH的Eugene Roshal开发。

它可以以RAR或ZIP文件格式创建和查看存档,并解压缩多种存档文件格式。

WinRAR不是免费软件。如果要使用它,您应该向RARLAB付款,然后您将获得名为“rarreg.key”的许可证文件。

此存储库将告诉您如何生成WinRAR许可证文件“rarreg.key”。

2.如何生成“rarreg.key”?
WinRAR使用签名算法,它是中国SM2数字签名算法的变体,用于处理用户的姓名和他/她获得的许可证类型。将结果保存到“rarreg.key”并添加一些标题信息,然后生成许可证文件。

下面将讨论WinRAR使用的签名算法的详细信息以及WinRAR如何处理用户名和他/她的许可类型。

2.1。签名算法
WinRAR使用ECC(椭圆曲线密码术)进行签名。它使用的椭圆曲线在复合有限域FiniteField上,其中基本有限域的本原多项式为:


并且扩展有限域的本原多项式是:


椭圆曲线方程是:


设G是签名期间使用的基点。确切的值是:

auto G = ecCurve.GetPoint({// X,表示多项式
0x38CC,0x052F,0x2510,0x45AA,//通过GF((2 ^ 15)^ 17),第一项
0x1B89,0x4468,0x4882,0x0D67,//位于前面。
0x4FEB,0x55​​CE,0x0025,0x4CB7,
0x0CC2,0x59DC,0x289E,0x65E3,
0x56FD
},{// Y,表示多项式
0x31A7,0x65F2,0x18C4,0x3412,//通过GF((2 ^ 15)^ 17),第一项
0x7388,0x54C1,0x539B,0x4A02,//位于前面。
0x4D07,0x12D6,0x7911,0x3B5E,
0x4F0E,0x216F,0x2BF2,0x1974,
0x20DA
});
P是签名期间将使用的顺序。确切的值是:

const uint64_t P = {// P = 0x1026dd85081b82314691ced9bbec30547840e4bf72d8b5e0d258442bbcd31
    0x5e0d258442bbcd31,
    0x0547840e4bf72d8b,
    0x2314691ced9bbec3,
    0x0001026dd85081b8
};
2.1.1生成PrivateKey PrivateKey,随机数K和Hash e
要生成PrivateKey PrivateKey,随机数K和散列e,我们需要两个字节数组。我们称它们为in_data和in_private。它们的长度分别为in_data_length和in_private_length。

PrivateKey由in_private生成。
e由in_data生成。
K由in_data和in_private生成。

为了更好地理解,我在这里给出一个案例:

byte in_private = {'P','h','a','n','t','o','m'};
byte in_data = {'L','a','b','y','r','i','n','t','h'};
其中in_private_length为7,in_data_length为9。

2.1.1.1 PrivateKey的生成。
计算in_private的SHA-1摘要。

在我给出的情况下,它应该是:

byte in_private_sha1 [] = {//标准sha-1值为:{
    0xc0,0x16,0x3f,0x02,// 0x02,0x3f,0x16,0xc0,
    0x78,0x4b,0xac,0x8c,// 0x8c,0xac,0x4b,0x78,
    0xaf,0x97,0x0d,0xe6,// 0xe6,0x0d,0x97,0xaf,
    0xd9,0x46,0xa4,0x91,// 0x91,0xa4,0x46,0xd9,
    0xdc,0xb3,0xbf,0x06 // 0x06,0xbf,0xb3,0xdc
}; //}
注意:与标准SHA-1计算相比,WinRAR反转了每个32位块。

如果in_private为null,则使用默认值:

byte in_private_sha1 [] = {
    0x81,0xb7,0x3e,0xeb,
    0x29,0x53,0x26,0x50,
    0xa3,0xf4,0x5e,0xdc,
    0xd5,0xb9,0x47,0x68,
    0x4c,0x3b,0xe4,0xcd
};
它可能是RARLAB中使用的一些秘密数据的SHA-1摘要

要获取PrivateKey的每个部分,请执行15轮SHA-1计算:

1.让我的uint32_t从1到15变化。

2.在每一轮中,我们计算一个24字节长字节数组的SHA-1摘要,它是i(little-endian)和src_data_sha1的组合。然后取前两个字节并将它们附加到PrivateKey的末尾。

之后,PrivateKey应该是一个30字节长,其值是:



在我给出的情况下,PrivateKey是:

byte PrivateKey = {// PrivateKey = 0xb7e256217a67f14e3fb4246e889ea18b69b246616e04525e96d515831f2a
    0x2a,0x1f,0x83,0x15,//这是一个240位长的整数。
    0xd5,0x96,0x5e,0x52,
    0x04,0x6e,0x61,0x46,
    0xb2,0x69,0x8b,0xa1,
    0x9e,0x88,0x6e,0x24,
    0xb4,0x3f,0x4e,0xf1,
    0x67,0x7a,0x21,0x56,
    0xe2,0xb7
};
在我的代码中,我使用uint64_t 数组来存储它。

2.1.1.2 K和e的生成。
在生成PrivateKey期间,存在一个临时的24字节长字节数组。在所有15轮之后,临时字节数组应该是uint32_t(15)(little endian)和src_data_sha1的组合。

在我给出的情况下,它应该是:

byte in_private_sha1_temp [] = {
    0x0f,0x00,0x00,0x00,
    0xc0,0x16,0x3f,0x02,
    0x78,0x4b,0xac,0x8c,
    0xaf,0x97,0x0d,0xe6,
    0xd9,0x46,0xa4,0x91,
    0xdc,0xb3,0xbf,0x06
}



hanqingv21 发表于 2018-8-19 20:50:40

这个需要,收藏了

kxzxzt 发表于 2018-8-19 21:11:50

这个需要,收藏了

jgs 发表于 2018-8-19 21:20:41

分析好详细,楼主费心了

xingbing 发表于 2018-8-19 22:49:13

分析的很清楚,楼主很厉害。

bpzm1987 发表于 2018-8-19 23:38:06

这个软件还是很强大的。

shixin 发表于 2018-8-20 06:34:19

好强大呀,可以破解winrar压缩文件的密码吗?

b30wulf 发表于 2018-8-20 07:38:26

shixin 发表于 2018-8-20 06:34
好强大呀,可以破解winrar压缩文件的密码吗?

那是不可能的

cfq001 发表于 2018-8-20 08:07:01

谢谢分享,下载收藏。

crackagent 发表于 2018-8-20 08:09:41

太牛了,谢谢楼主!
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: WinRAR的,注册机