关于GB688文件下载的脚本讨论
之前一直用这个油候插件下载GB688的相关标准今年网站进行了改版失效了
开发者发现进行加密后没再继续开发
放出了教程
太专业了我实在看不懂发出来大家一起研究研究吧
1. 前言2021年前, gb688手机版使用的明文pdf, 可直接下载, 不需要额外处理
2021年开始, 新站openstd, 开始全面启用 pdf.js, 至此, 手机版也使用与pc同样加密技术2. 文件预览openstd文件以两种方式开放给用户, 一种为直接下载, 另一种为在线预览
直接下载的文件有DRM保护, 需使用网站提供的工具打开
在线预览的文件使用 pdf.js, 浏览器解密后在线呈现给用户
因为浏览器管理较为困难, 且容易改造, 对于要求不高的用户, 可以使用打印功能将文件打印为纸质文件或PDF文件
亦可使用无头浏览器 (headless), 对网站文件进行批量获取3. 文件载入既然可以使用 pdf.js 进行预览, 说明必定有PDF文件进行载入
通过浏览器工具可知, 载入的文件并非明文, 而是加密后的Base64字符串, 并且使用了懒加载 (lazyload), 分段进行载入
下面通过 GB 39732-2020 (汽车事件数据记录系统) 为例, 来分析其载入过程
3.1点击 "在线预览" 按钮后, 浏览器跳转至 预览页面
在此页面中包含变量 var HCNO="e+fr0OSr1Px3S3phy72jth0Hq3HBZZ+ZDXKIbZQEWVeWUhQ7hYT4ELgJTdrFvtx9lSgoZL0ew6+0DcVriDfUeMIK59fQUGvHqO8h3Ps31m4=", 记录了加密PDF文件所使用的密钥 (key) 和初始向量 (iv)
其自身为密文, 通过网站编译的 pdf-work.wasm 中的固定参数进行解密, 之后在浏览器中初始化
Module.onRuntimeInitialized = function () { var ptr = allocateUTF8(HCNO); var retPtr = Module._init(ptr); HCNO = UTF8ToString(retPtr); DEFAULT_URL += HCNO; console.log(DEFAULT_URL); if (document.readyState === "interactive" || document.readyState === "complete") { webViewerLoad(); } else { document.addEventListener("DOMContentLoaded", webViewerLoad, true); }}解密后得到 ****************:################:CC68F6BFD3E104560914271598AFE8C8, 其中
**************** 为密钥
################ 为初始向量
CC68F6BFD3E104560914271598AFE8C8 为hcno
3.2拿到密钥和初始向量后, 开始请求加密文件GET http://c.gb688.cn/bzgk/gb/viewGb?type=online&hcno=CC68F6BFD3E104560914271598AFE8C8 HTTP/1.1Host: c.gb688.cnConnection: keep-aliveUser-Agent: Mozilla/5.0 ********************************Accept: */*Referer: http://c.gb688.cn/bzgk/gb/showGb?type=online&hcno=CC68F6BFD3E104560914271598AFE8C8Accept-Encoding: gzip, deflateAccept-Language: ********************************Cookie: JSESSIONID=********************************服务器返回HTTP/1.1 200 OKServer: nginx/1.17.9Date: ***, ** *** **** **:**:** GMTContent-Type: Content-Type: application/octet-streamContent-Length: 2967097Connection: keep-aliveAccept-Ranges: bytesContent-Range: bytes 0-2967096/2967097此过程中没有发生文件传输, 而是从返回头中获得了文件大小, 即 Content-Range: bytes 0-2967096/2967097
紧接着正式开始请求文件GET http://c.gb688.cn/bzgk/gb/viewGb?type=online&hcno=CC68F6BFD3E104560914271598AFE8C8 HTTP/1.1Host: c.gb688.cnConnection: keep-aliveUser-Agent: Mozilla/5.0 ********************************Accept: */*Referer: http://c.gb688.cn/bzgk/gb/showGb?type=online&hcno=CC68F6BFD3E104560914271598AFE8C8Accept-Encoding: identityAccept-Language: ********************************Cookie: JSESSIONID=********************************Range: bytes=0-327679其中 Range: bytes=0-327679 即为请求的文件块
服务器返回HTTP/1.1 206 Partial ContentServer: nginx/1.17.9Date: ***, ** *** **** **:**:** GMTContent-Type: Content-Type: application/octet-streamContent-Length: 436928Connection: keep-aliveAccept-Ranges: bytesContent-Range: bytes 0-327679/2967097oYXL8/L6bpf0dcXYt862fxd+BOqPP2UYS1W/wxsGmxT7sSsU+cJkj33GTDmJxCq37p5tqIFmaYQVWNL88XredoArMcIpzsuaSTeL1Nj/t9CQCiQA8yFQmZOIQTp3vyXo得到数据后进行解密, 载入到 pdf.js 中
用户下拉时再继续请求, 直到最后一块GET http://c.gb688.cn/bzgk/gb/viewGb?type=online&hcno=CC68F6BFD3E104560914271598AFE8C8 HTTP/1.1Host: c.gb688.cnConnection: keep-aliveUser-Agent: Mozilla/5.0 ********************************Accept: */*Referer: http://c.gb688.cn/bzgk/gb/showGb?type=online&hcno=CC68F6BFD3E104560914271598AFE8C8Accept-Encoding: identityAccept-Language: ********************************Cookie: JSESSIONID=********************************Range: bytes=2949120-2967096HTTP/1.1 206 Partial ContentServer: nginx/1.17.9Date: ***, ** *** **** **:**:** GMTContent-Type: Content-Type: application/octet-streamContent-Length: 23980Connection: keep-aliveAccept-Ranges: bytesContent-Range: bytes 2949120-2967096/29670977x/AI3CelgQLKM3uZOKMbuApo9I1NYbaEpZ9diKXfGuljC3S2p/t80GdRHLu6ybPSwED9bx4nkJXtEijAM9ben6g4CdO1UC85aTGxpWKpoh4umqfibsh3jTYkSnAoZtd至此, 文件载入结束
原文地址:
https://github.com/lzghzr/TampermonkeyJS/issues/27
https://gist.github.com/lzghzr/858067598cf590af4c1b7d8faa211d21 F12打开控制台,输入PDFViewerApplication.save()即可下载 shipstandard 发表于 2021-2-24 10:49
大侠,现在的浏览器,没看到下载按钮啊,只有在线预览,如何下载,也没碰到之前下载加密那些,求指导
以前是通过油候的脚本实现下载,现在网站升级了我这也不是发到坛子里让大神看看 希望大神能够变成工具呢。原来之前688还能通过工具下载啊。!!~ xuxinliang 发表于 2021-2-23 13:40
希望大神能够变成工具呢。原来之前688还能通过工具下载啊。!!~
可以下载 而且是完美版只不过现在接口加密了找了好几个程序员朋友都不懂js 大侠,现在的浏览器,没看到下载按钮啊,只有在线预览,如何下载,也没碰到之前下载加密那些,求指导 我是完全看不懂呀,坐等大神出手 tjs82761 发表于 2021-2-26 19:58
我是完全看不懂呀,坐等大神出手
大神貌似不太关注咱们这个{:1_909:} 大神怕惹事https://github.com/lzghzr/TampermonkeyJS/issues/27 zzmaixz 发表于 2021-3-7 11:10
大神怕惹事https://github.com/lzghzr/TampermonkeyJS/issues/27
个人使用绝不公开传播:'(weeqw 感觉大神已经写的比较清楚了 但是小白不懂,求助求助
页:
[1]
2