原来下过带KeyFile的低版本,硬盘坏了没了。自己要用这软件,就看了一下。
新下的版本为8.20.6.2。
根据错误提示,容易找到关键位置。如果想暴破,把判断试用期的函数Patch一下,
使其返回0即可,在438376。
要是想KeyGen,要费点周折。关键函数在42B2D8,里面明显有大数运算,根据一些
特征字符串在网上搜了下,象是OpenSSL。不过下了个回来,发现大体上类似,细
节却不同,比如大数结构就不同,可能用的是另一种SSL实现,也可能我完全认错了,
就不是SSL。
DemoLicense中Signature经Base64解码数据为:
0x04, 0x81, 0x80, 0x50, 0xEB, 0x5B, 0x8C, 0xE1, 0x8C, 0x52,
0xCD, 0xA7, 0x76, 0x78, 0xF0, 0xB0, 0x8D, 0x9D, 0xDE, 0x9F,
0xF8, 0xF9, 0x10, 0x70, 0x67, 0x00, 0x9E, 0x1D, 0x27, 0x51,
0x2E, 0x0A, 0x0D, 0x01, 0xE9, 0x00, 0x25, 0xCC, 0x16, 0x06,
0x01, 0x3C, 0x6F, 0x10, 0x0A, 0xDC, 0xD6, 0x58, 0xD1, 0x43,
0x68, 0xCC, 0x37, 0x36, 0x2A, 0x8D, 0xD9, 0x37, 0x60, 0x32,
0x0C, 0x43, 0x96, 0x32, 0x3B, 0x1B, 0x31, 0xC3, 0xCD, 0x97,
0xD7, 0xD9, 0x04, 0x69, 0x81, 0x3F, 0xD0, 0x4B, 0xD3, 0xE5,
0x27, 0x88, 0x02, 0xFD, 0xBE, 0xC1, 0x8C, 0x98, 0xEE, 0x7E,
0xA5, 0xBD, 0x71, 0xDF, 0x14, 0x16, 0x51, 0x27, 0x13, 0x20,
0x65, 0x17, 0xB0, 0xD6, 0x23, 0x08, 0x6F, 0x59, 0x5D, 0xC0,
0x86, 0x23, 0x2D, 0x93, 0x7D, 0x31, 0x73, 0x27, 0xCB, 0x04,
0xD2, 0xEA, 0xFA, 0x96, 0x9F, 0xDA, 0xA7, 0xCD, 0xE4, 0x3E,
0xC3
这里的代码执行RSA运算,实际就是Rsa_public_encrypt。
.text:0043CE72 push 0 ; ?
.text:0043CE74 push edx ; 出参数,返回结果
.text:0043CE75 push eax ; base64解出的数据,不含前3字节
.text:0043CE76 push ecx ; Key
.text:0043CE77 call sub_4428F0
key为RSA算法使用的结构,从调试堆的标记ABABABAB可以看出只占4个DWORD,
与OpenSSL不同。
00B8E20C BAAD03FF 00B8E238 00B8E280 00000000
00B8E21C ABABABAB ABABABAB FEEEFEEE 00000000
第1个DWORD含义不清楚。后面3个是指向大数的指针。这里只出现了N和E。
看下大数格式。
00B8E238 00000010 00B8E2C8 00000000 ABABABAB
00B8E248 ABABABAB FEEEFEEE 00000000 00000000
似乎用2个DWORD表示,0x10表示数据长度为0x10个ULONG64。00B8E2C8为数据地址。
00B8E2C8 79 B5 8E 93 0B 56 18 BF E9 C3 47 3D 02 D6 CD 75 y祹..V.块肎=.滞u
00B8E2D8 01 8E D0 90 AF 1F BD 9D 5A 7D EF 08 4C 32 70 83 .幮.?.漐}?L2p.
00B8E2E8 E6 7B D9 DC 85 9D 27 97 2F 9A 96 FB F5 B3 98 EA 鎨佘.?./??
00B8E2F8 B8 5D 76 EE 6D FB 79 6C B5 7A C1 83 3B 8A DD 93 .]v頼鹹l祕?;娸.
00B8E308 6E E5 4F A5 19 C8 80 2A 56 B2 52 F4 98 11 FE B3 n錙??*V.R?.
00B8E318 3F 6F 6C 3F AF F5 77 FA D2 BC EA 51 C1 66 4D C4 ?ol?w缄Q羏M
00B8E328 78 46 79 B5 0C 88 39 8A 27 00 E0 76 A3 E7 17 3A xFy?.9?.鄓g.:
00B8E338 46 13 1F F8 FC 5C 05 04 79 CA 31 9F C5 82 4F 78 F..\..y?熍.Ox
这就是RSA的N。这是我已经替换过的值,没Patch过的bestcrypt.exe已顺手删了,
原始的N为7F0D1E7D...,直接在exe内可搜索到,在4A6BCC。
同样得到E=3
于是可拿到DemoLicense的RSA解密数据。
unsigned char DemoLicense[] = {
/*0x00*/ 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
/*0x10*/ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
/*0x20*/ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
/*0x30*/ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
/*0x40*/ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
/*0x50*/ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
/*0x60*/ 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7A, 0xD5, 0x48, 0x52,
/*0x70*/ 0x7E, 0xA1, 0x78, 0x94, 0x41, 0x75, 0x58, 0x4D, 0x0E, 0x09, 0xF9, 0x1B, 0x23, 0x33, 0x68, 0xB2 };
最后的20字节,就是KeyFile中"-----BEGIN SIGNED MESSAGE-----"至Signature之间数据的SHA1校验。
BestCrypt用的是RSA1024,用RSATool自己生成一套Key,替换掉原始的N(E还用3),就可以KeyGen了。
商业版可能是另外一套Key? 从exe的字符串可看到ARMORED MESSAGE,PUBLIC KEY,这里并没用到,
反正已经可以跑了,我只是想用这东西呵呵。估计是因为Demo是全功能版,那堆数据已经设置好了。
如果你想用那个VolumeEncryption,bcfmgr.exe内的N也得换。
KeyFile文件格式,参照了网上的破解,不是我自己追的。原KeyGen作者是CRUDE破解组织。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)