吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 6882|回复: 14
收起左侧

[已解决] 关于GB688文件下载的脚本讨论

[复制链接]
maweijian110 发表于 2021-2-23 11:42
之前一直用这个油候插件下载GB688的相关标准
今年网站进行了改版失效了
开发者发现进行加密后没再继续开发
放出了教程
太专业了我实在看不懂发出来大家一起研究研究吧


1. 前言2021年前, gb688手机版使用的明文pdf, 可直接下载, 不需要额外处理
2021年开始, 新站openstd, 开始全面启用 [color=var(--color-text-link)]pdf.js, 至此, 手机版也使用与pc同样加密技术[color=var(--color-text-link)]2. 文件预览openstd文件以两种方式开放给用户, 一种为直接下载, 另一种为在线预览
直接下载的文件有DRM保护, 需使用网站提供的工具打开
在线预览的文件使用 pdf.js, 浏览器解密后在线呈现给用户

因为浏览器管理较为困难, 且容易改造, 对于要求不高的用户, 可以使用打印功能将文件打印为纸质文件或PDF文件
亦可使用无头浏览器 (headless), 对网站文件进行批量获取[color=var(--color-text-link)]3. 文件载入既然可以使用 pdf.js 进行预览, 说明必定有PDF文件进行载入
通过浏览器工具可知, 载入的文件并非明文, 而是加密后的Base64字符串, 并且使用了懒加载 (lazyload), 分段进行载入
下面通过 [color=var(--color-text-link)]GB 39732-2020 (汽车事件数据记录系统) 为例, 来分析其载入过程
[color=var(--color-text-link)]3.1点击 "在线预览" 按钮后, 浏览器跳转至 [color=var(--color-text-link)]预览页面
在此页面中包含变量 var HCNO="e+fr0OSr1Px3S3phy72jth0Hq3HBZZ+ZDXKIbZQEWVeWUhQ7hYT4ELgJTdrFvtx9lSgoZL0ew6+0DcVriDfUeMIK59fQUGvHqO8h3Ps31m4=", 记录了加密PDF文件所使用的密钥 (key) 和初始向量 (iv)
其自身为密文, 通过网站编译的 pdf-work.wasm 中的固定参数进行解密, 之后在浏览器中初始化
[color=var(--color-prettylights-syntax-variable)]Module
.[color=var(--color-prettylights-syntax-entity)]onRuntimeInitialized
[color=var(--color-prettylights-syntax-constant)]=
[color=var(--color-prettylights-syntax-keyword)]function () {        [color=var(--color-prettylights-syntax-keyword)]var ptr [color=var(--color-prettylights-syntax-constant)]= [color=var(--color-prettylights-syntax-entity)]allocateUTF8([color=var(--color-prettylights-syntax-constant)]HCNO);        [color=var(--color-prettylights-syntax-keyword)]var retPtr [color=var(--color-prettylights-syntax-constant)]= [color=var(--color-prettylights-syntax-variable)]Module.[color=var(--color-prettylights-syntax-entity)]_init(ptr);        [color=var(--color-prettylights-syntax-constant)]HCNO [color=var(--color-prettylights-syntax-constant)]= [color=var(--color-prettylights-syntax-variable)]UTF8ToString(retPtr);        [color=var(--color-prettylights-syntax-constant)]DEFAULT_URL [color=var(--color-prettylights-syntax-constant)]+= [color=var(--color-prettylights-syntax-constant)]HCNO;        [color=var(--color-prettylights-syntax-storage-modifier-import)]console.[color=var(--color-prettylights-syntax-entity)]log([color=var(--color-prettylights-syntax-constant)]DEFAULT_URL);                [color=var(--color-prettylights-syntax-keyword)]if ([color=var(--color-prettylights-syntax-storage-modifier-import)]document.[color=var(--color-prettylights-syntax-constant)]readyState [color=var(--color-prettylights-syntax-constant)]=== [color=var(--color-prettylights-syntax-string)]"interactive" [color=var(--color-prettylights-syntax-constant)]|| [color=var(--color-prettylights-syntax-storage-modifier-import)]document.[color=var(--color-prettylights-syntax-constant)]readyState [color=var(--color-prettylights-syntax-constant)]=== [color=var(--color-prettylights-syntax-string)]"complete") {          [color=var(--color-prettylights-syntax-entity)]webViewerLoad();        } [color=var(--color-prettylights-syntax-keyword)]else {          [color=var(--color-prettylights-syntax-storage-modifier-import)]document.[color=var(--color-prettylights-syntax-entity)]addEventListener([color=var(--color-prettylights-syntax-string)]"DOMContentLoaded", webViewerLoad, [color=var(--color-prettylights-syntax-constant)]true);        }}解密后得到 ****************:################:CC68F6BFD3E104560914271598AFE8C8, 其中
**************** 为密钥
################ 为初始向量
CC68F6BFD3E104560914271598AFE8C8 为hcno
[color=var(--color-text-link)]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[more]得到数据后进行解密, 载入到 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[more]至此, 文件载入结束


原文地址:
https://github.com/lzghzr/TampermonkeyJS/issues/27
https://gist.github.com/lzghzr/858067598cf590af4c1b7d8faa211d21

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

涛之雨 发表于 2021-5-19 07:59
F12打开控制台,输入PDFViewerApplication.save()即可下载

免费评分

参与人数 8吾爱币 +7 热心值 +6 收起 理由
yuriki2009 + 1 + 1 谢谢@Thanks!
cbh + 1 + 1 秀儿,你是神吗!
ilearning + 1 谢谢@Thanks!
rekcahacker + 1 + 1 太牛了! 简洁有效
berwyn + 1 谢谢@Thanks!
⊙⌒⊙ + 1 + 1 我很赞同!
zxszx4 + 1 + 1 我很赞同!
maweijian110 + 1 我很赞同!

查看全部评分

 楼主| maweijian110 发表于 2021-2-24 17:00
shipstandard 发表于 2021-2-24 10:49
大侠,现在的浏览器,没看到下载按钮啊,只有在线预览,如何下载,也没碰到之前下载加密那些,求指导

以前是通过油候的脚本实现下载,现在网站升级了我这也不是发到坛子里让大神看看
xuxinliang 发表于 2021-2-23 13:40
希望大神能够变成工具呢。原来之前688还能通过工具下载啊。!!~
 楼主| maweijian110 发表于 2021-2-23 15:41
xuxinliang 发表于 2021-2-23 13:40
希望大神能够变成工具呢。原来之前688还能通过工具下载啊。!!~

可以下载 而且是完美版  只不过现在接口加密了  找了好几个程序员朋友都不懂js
shipstandard 发表于 2021-2-24 10:49
大侠,现在的浏览器,没看到下载按钮啊,只有在线预览,如何下载,也没碰到之前下载加密那些,求指导
tjs82761 发表于 2021-2-26 19:58
我是完全看不懂呀,坐等大神出手

免费评分

参与人数 1吾爱币 -8 收起 理由
涛之雨 -8 此为违规行为,请遵守论坛版规!

查看全部评分

 楼主| maweijian110 发表于 2021-3-1 09:46
tjs82761 发表于 2021-2-26 19:58
我是完全看不懂呀,坐等大神出手

大神貌似不太关注咱们这个
zzmaixz 发表于 2021-3-7 11:10
大神怕惹事https://github.com/lzghzr/TampermonkeyJS/issues/27
 楼主| maweijian110 发表于 2021-3-8 08:56
zzmaixz 发表于 2021-3-7 11:10
大神怕惹事https://github.com/lzghzr/TampermonkeyJS/issues/27

个人使用绝不公开传播
soarcool 发表于 2021-3-29 10:32
感觉大神已经写的比较清楚了   但是小白不懂,求助求助
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 02:32

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表