超醒文件加密方式说明

来源:百度文库 编辑:神马文学网 时间:2024/07/05 20:31:03

【转帖】超星文件加密方式说明

2007-12-22 15:26

超星文件加密方式说明

作者:Che Ming
版本:v1.4
时间:2006/09/24
历史:

==== 1.4 ====
[+] PDG v1 Support
[-] 错别字 :)

==== 1.3 ====
[+] Fix 1xH Bugs

==== 1.2 ====
[+] 6xH More Detail

==== 1.1 ====
[+] 28H Support
[+] 6xH Support

==== 1.0 ====
2006/07 First Release.

[欢迎转载,转载时请保留作者及版本信息]

说明:此文提及的超星文件为 48 48 开头的文件(即PDG v1, v2 格式),其他诸如 FF D8 开头的标准 JPG,以及 PDF, TXT 等格式不在此问题讨论范围。

PDG V2
------

文件 0x0F 处字节代表此类超星文件的格式,其中:

00H 最原始的格式,
正文数据分为:
ColorDepth = 1   代表单色 CCITT G3 2D 压缩图片格式 [OriginalType=00]
        = 18h 代表24位色真彩图像,正文数据通常是 JPG (对应加密后的格式为04H) [OriginalType=4A]

AT&TFORM       代表 djvu 原始数据格式 (对应加密后的格式为05H) [OriginalType=44]
%PDF%         代表 PDF 原始数据格式 (数据采用 Zlib 算法压缩)[OriginalType=46]

01H 最早的加密雏形,简单的对数据区进行 Block Size = 8 的分组加密,加密方法就是 8 个字节一组与 '3.141592' 进行 XOR 操作。

02H 开始采用强度稍高的加密算法,对 PDG Header 中的 KeyData 字段进行 MD5 运算,得到 KEY 之后,调用 TEA 算法对数据区进行分组加密。
03H 加密方式同上,在 MD5 基础上,将 HASH 与 'SUPERSTAR4PDG2.0' 的头8个字符进行 XOR 操作作为 KEY。
04H JPG经过加密形成,解密后可以生成 00H 格式或者 JPG 格式。加密方式同 02H,将 HASH 与 'SSREADER4PDG3.71' 的头8个字符进行 XOR 操作作为 KEY。
05H djVu 原始格式加密而成,解密后可以生成 00H 格式。加密方式同 02H,将 HASH 与 'e#fgF%3*' 进行 XOR 操作作为 KEY。

10H 00H基础上简单将 PDG Header 中的 Width, Height 字段加密。

11H 00H基础上将数据部分字节加密。Group1
12H 00H基础上将数据部分字节加密。Group1
13H 00H基础上将数据部分字节加密。Group1
14H 00H基础上将数据部分字节加密。Group1
15H 00H基础上将数据部分字节加密。Group2
16H 00H基础上将数据部分字节加密。Group2
17H 00H基础上将数据部分字节加密。Group2
18H 00H基础上将数据部分字节加密。Group2
19H 00H基础上将数据部分字节加密。Group3
1AH 00H基础上将数据部分字节加密。Group3
1BH 00H基础上将数据部分字节加密。Group3
1CH 00H基础上将数据部分字节加密。Group3
以上11H-1CH的加密算法为私有加密算法,分为三组,分别是 Group1,2,3,每一组的加密位置及加密字节数不同。

1EH 没见过实物(未进行过实际验证),但在代码中存在解密算法,加密算法为 DEAL。

28H 为超星用户自行通过 SSREADER 的新建-〉扫描功能制作的格式。通过 TEA 算法对 10H-2FH 进行加密得到 32 字节的 Key (由于超星采用的 DEAL 算法都只使用 128bit 的 Key,所以只有头 16 个字节生效),之后采用 DEAL 算法对数据区进行隔行加密。

6xH 系列为正版有卡用户下载加密而成。此系列加密强度最强,复杂度超乎想象,竟然综合采用了 TEA, Blowfish, RSA, DEAL, IDEA,
DES 等加密算法,计算 KEY 的时候,使用了 MD5, SHA1 等算法。估计超星会用的加密算法全部齐上阵,加密算法应用大全啊。

此系列共有 64 65 66 67 68 五种格式,特点是 Header 和数据区同时加密:
Header 加密方法:
1. 64 65 使用 TEA 算法并结合 username 生成 Key,利用 DEAL 算法加密,加密长度为 60h。
2. 66 67 68 使用 TEA 算法但不结合 username 生成 Key,利用 DEAL 算法加密,加密长度为 10h。

数据区加密方法:
1. 65 使用 SHA1 算法对未解密前的 Header 进行计算,同时与 username 进行操作得到 Key。
2. 64 66 67 68 使用 MD5 算法对未解密前的 Header 进行计算得到 Key。
得到 Key 之后,对于 65 格式,采用 IDEA 加密算法进行加密,其它格式仍采用 DEAL 算法进行加密。

6xH 系列的解密必须有 HDDID 参与,它是由服务器根据用户的 HDDKey 计算并返回的,相关信息保存在注册表 ssreaderdata 中。
该数据采用 Blowfish 加密,解密之后 regcode 字段仍然是加密的,其中就包含 HDDID 等重要信息,解密这部分数据,需要使用
RSA 公钥解密算法。

AAH 镜像站点采用的加密格式,加密算法为 DEAL。此格式如果用正版 SSREADER 下载,会被完全破坏,并将格式变为 FFH。
ABH 镜像站点采用的加密格式,加密算法为 DEAL。此格式如果用正版 SSREADER 下载,会被完全破坏,并将格式变为 FFH。
ACH 镜像站点采用的加密格式,加密算法为 DEAL。此格式如果用正版 SSREADER 下载,会被完全破坏,并将格式变为 FFH。
上述 AxH 系列的 Key 的计算方法不同,其中 AAH 最简单,ABH 的 Key 计算过程需要 PDG Header 中的 Width,Height 参与;ACH 的 Key 虽然不需要 Width,Height 参与,但是最终会修改 Width 和 Height 两个字段。加密方式采用隔行加密。

除了上述加密格式之外,PDG 文件还支持一种基于密码保护的加密方式,即所谓的 ServerID,不过
目前很少见到。加解算法同样是 DEAL,只不过计算 Key 的方法略有区别,同时 PDG Header 的
Width 字段被修改。此方法理论上可以应用在各种格式之上,任何格式在解密之前,必须先去除
ServerID 保护,再用相应的算法进行解密。

注意,上述提到的 TEA、SHA1、Blowfish、DEAL 等加密算法都被超星私自非法(肯定未经原作者授权)篡改过,不能简单用标准算法套用。

PDG V1
------

此类文件的文件名为下列格式: 100.001, 100.002, ...

此类文件为早期 PDG 格式,等同于 V2 的 00H,加密方法只有一种:根据 0x07 位置的值,在数据区 0xB8 位置之后插入1个或者2个字节。



上述分析基于对 PDG2.DLL 的代码研究,如有不对之处,欢迎斧正。

                                Che Ming

Source:http://www.readfree.net/bbs/read.php?tid=247450&fpage=0&toread=&page=1