人教社把教材光盘做了层层加密, 但本着学习课程玩耍&自由的原则, 我尝试解密了这些资源
解密的所有内容, 版权仍归属于各自作者.
此解密代码仅用于学习, 研究用途.
本人不承担因倒卖此脚本和解密后视频, 音频, 制作修改后的光盘镜像带来的后果.
(如果你已经解压了 ISO 并获得了 data/
文件夹, 那么直接跳转到第二步)
如果你有 Winrar, 直接用 Winrar 解压 ISO 即可
这一步仅针对 data/
被隐藏且没有其他办法解压的 ISO, 使用此脚本可以显示被隐藏的 data/
使用方法: iso_decrypt.py [选项]... [输入文件]
解密人教社光盘 ISO
输入 / 输出文件可以是 `-' 以从标准输入读取 / 写入到标准输出
默认行为是解密标准输入到标准输出
-o, --output <输出文件> 写入输出到 <输出文件> (默认为标准输出)
(如果 <输出文件> 存在且 `-r' 没有指定, 则抛出错误)
-f, --dir <目录> 将输出文件放置在 <目录> 下
(不可与 `-r' 同时使用)
-r, --replace 如果没有 `-o', 则替换输入文件 (除非是标准输入)
如果有 `-o', 则强制覆盖指定的输出文件
-h, --help 显示这个帮助
使用方法: file_decrypt.py [选项]... [输入文件]
加密 / 解密人教社光盘的文件
输入 / 输出文件可以是 `-' 以从标准输入读取 / 写入到标准输出
默认行为是解密标准输入到标准输出
-e, --encrypt <算法 ID> 使用 <算法 ID> 加密文件
-d, --decrypt 解密文件 (默认行为)
-o, --output <输出文件> 写入输出到 <输出文件> (默认为标准输出)
(如果 <输出文件> 存在且 `-r' 没有指定, 则抛出错误)
-f, --dir <目录> 将输出文件放置在 <目录> 下
(不可与 `-r' 同时使用)
-r, --replace 如果没有 `-o', 则替换输入文件 (除非是标准输入)
如果有 `-o', 则强制覆盖指定的输出文件
-h, --help 显示这个帮助
目前, 人教社使用了两个加密算法 (具体什么原理我也没看懂, 反正就是照搬过来了), 每个文件用什么都是随机的.
这就导致了解密时容易忘记原本文件的加密算法, 所以我将文件原本的加密算法 ID 写到了 <文件名>.enc_algo
下.
当重新加密时, 如果有这样的文件, 那么加密算法 ID 就会从此文件读取.
P.S. 实际上有三个算法, 但是 Flash 里只写了 1 和 3 两种.
file_decrypt.py
有 EncryptManager
类, 可以在自己的程序中使用.
实例方法:
encrypt(enctype, bytestream)
- 加密
bytestream
, 返回加密的内容 - enctype: 加密算法 ID
- bytestream: 要加密的字节
- 加密
decrypt(bytestream)
- 解密
bytestream
, 返回解密的内容 - bytestream: 要解密的字节
- 解密
示例:
import file_decrypt
def decrypt(filename):
decryptor = file_decrypt.EncryptManager()
with open(filename, "rb") as file:
open(filename + "_dec", "wb").write(decryptor.decrypt(file.read()))
这个项目原本是 Gist 上的一个脚本: https://gist.github.com/xiaoxi-ij478/a36a7a2d99ccb77b3b8c034ad5167947