| 
注册时间2015-5-20
阅读权限10
最后登录1970-1-1UID90634 周游历练 
 
 TA的每日心情|  | 开心 2020-3-18 10:20
 | 
|---|
 签到天数: 10 天 [LV.3]偶尔看看II | 
 
| 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 [4] = {// 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 [7] = {'P','h','a','n','t','o','m'};
 byte in_data [9] = {'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 [30] = {// 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 [4]数组来存储它。
 
 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
 }
 
 
  winrar-keygen-src.zip
(26.48 KB, 下载次数: 470) 
 
 | 
 评分
查看全部评分
 |