349 字
1 分钟
够快云库文档加密机制分析(逆向记录)

背景#

够快云库里有些文档支持直接下载,但下载后的文件是加密态,打开时要输入密码。
这次分析里我发现页面使用 pdf.js 预览,而且关键校验逻辑在前端可见,因此可以完整复现其加密流程。

分析过程#

1)抓包并查看前端代码#

先打开文档页面: https://yk3.gokuai.com/file/xg3fd32zjywouaovrnz3a44l4uiti4j7

打开控制台后可以看到页面是用 pdf.js 做在线预览。
继续审查元素,在相关脚本中能找到加密逻辑和关键参数。

2)关键加密逻辑#

核心加密函数如下:

function encrypt(password, filehash) {
var key = CryptoJS.enc.Utf8.parse(CryptoJS.MD5(filehash));
var iv = CryptoJS.enc.Utf8.parse(filehash.substring(0, 16));
var encrypt = CryptoJS.AES.encrypt(password, key, {
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});
return encrypt.toString();
}

页面中给出的配置:

var server = {"url":"https://xdf-storage.gokuai.com","path":"/m-doc","query":{"filehash":"815bb9f512f4df0b162fca4ec77bc152f8956f60","ext":"pdf","url":"http://xdf-storage-in.gokuai.com/m-upload/file/download/%E6%85%88%E6%BA%AA%2B%E5%8D%97%E4%B8%89%E5%8E%BF%2B%E6%8B%B1%E5%A2%85%E7%AD%94%E6%A1%88.pdf?net=in&storage_point=XDFLeZwYcIyynN4ny&bucket=gkstorage&object=81%2F815bb9f512f4df0b162fca4ec77bc152f8956f60.dat&mime=application%2Fpdf&expires=1772089577&signature=uhzzkH3M6BedxWT%2FJYUiCuyZzys%3D","sign":"PMAP4IziMd0/asghxaC7fTCYMmY=","storage_point":"XDFLeZwYcIyynN4ny","ac":"mm","enc":1}};
var uri = '/app/gk_pdf';
var filehash = "815bb9f512f4df0b162fca4ec77bc152f8956f60";
var password = '';

关键信息如下:

  • 加密方式:AES-CBC + PKCS7Padding
  • Key:MD5(filehash)
  • IV:filehash 前16位
  • 页面里默认 password = ''(空字符串)

3)本地复现#

把这套逻辑放到本地 Demo 后,可以验证参数与流程确实可复现。

示例结果: b7a76e9b6755e5e564fcd9668757f575a89e0b922a1aeb240c1dea4d7ed7db9fc20da0b9b75ab865d7cc9eeda27a3ff3

在参数不变的前提下,能得到与线上一致的解密结果。


小结#

如果把 密码校验与加解密逻辑全部放在前端,安全边界会很薄。
更稳妥的做法是把关键校验放到服务端,再配合短时令牌、鉴权和访问控制,尽量避免前端暴露核心逻辑。


分享

如果这篇文章对你有帮助,欢迎分享给更多人!

够快云库文档加密机制分析(逆向记录)
https://kongdf.com/posts/learning/security/gokuai-doc-encryption-analysis/
作者
孔大夫
发布于
2026-02-26
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时