吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3633|回复: 7
收起左侧

[求助] openstd.samr.gov.cn(原gb688)PDF文件载入流程 探讨

[复制链接]
soarcool 发表于 2021-3-29 10:26
本帖最后由 soarcool 于 2021-3-29 10:29 编辑

0. 免责声明
没啥卵用, 但依然要说明一下, 本文未包含版权内容, 且未对所诉网站之程序进行破坏, 文章内容均为学习交流之用
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 中的固定参数进行解密, 之后在浏览器中初始化
[Asm] 纯文本查看 复制代码
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
[color=var(--color-text-link)]3.2拿到密钥和初始向量后, 开始请求加密文件
[Asm] 纯文本查看 复制代码
GET http://c.gb688.cn/bzgk/gb/viewGb?type=online&hcno=CC68F6BFD3E104560914271598AFE8C8 HTTP/1.1
Host: c.gb688.cn
Connection: keep-alive
User-Agent: Mozilla/5.0 ********************************
Accept: */*
Referer: http://c.gb688.cn/bzgk/gb/showGb?type=online&hcno=CC68F6BFD3E104560914271598AFE8C8
Accept-Encoding: gzip, deflate
Accept-Language: ********************************
Cookie: JSESSIONID=********************************
服务器返回
[Asm] 纯文本查看 复制代码
HTTP/1.1 200 OK
Server: nginx/1.17.9
Date: ***, ** *** **** **:**:** GMT
Content-Type: Content-Type: application/octet-stream
Content-Length: 2967097
Connection: keep-alive
Accept-Ranges: bytes
Content-Range: bytes 0-2967096/2967097
此过程中没有发生文件传输, 而是从返回头中获得了文件大小, 即 Content-Range: bytes 0-2967096/2967097
紧接着正式开始请求文件
[Asm] 纯文本查看 复制代码
GET http://c.gb688.cn/bzgk/gb/viewGb?type=online&hcno=CC68F6BFD3E104560914271598AFE8C8 HTTP/1.1
Host: c.gb688.cn
Connection: keep-alive
User-Agent: Mozilla/5.0 ********************************
Accept: */*
Referer: http://c.gb688.cn/bzgk/gb/showGb?type=online&hcno=CC68F6BFD3E104560914271598AFE8C8
Accept-Encoding: identity
Accept-Language: ********************************
Cookie: JSESSIONID=********************************
Range: bytes=0-327679
其中 Range: bytes=0-327679 即为请求的文件块
服务器返回
[Asm] 纯文本查看 复制代码
HTTP/1.1 206 Partial Content
Server: nginx/1.17.9
Date: ***, ** *** **** **:**:** GMT
Content-Type: Content-Type: application/octet-stream
Content-Length: 436928
Connection: keep-alive
Accept-Ranges: bytes
Content-Range: bytes 0-327679/2967097

oYXL8/L6bpf0dcXYt862fxd+BOqPP2UYS1W/wxsGmxT7sSsU+cJkj33GTDmJxCq37p5tqIFmaYQVWNL88XredoArMcIpzsuaSTeL1Nj/t9CQCiQA8yFQmZOIQTp3vyXo
[more]
得到数据后进行解密, 载入到 pdf.js 中
用户下拉时再继续请求, 直到最后一块
[Asm] 纯文本查看 复制代码
GET http://c.gb688.cn/bzgk/gb/viewGb?type=online&hcno=CC68F6BFD3E104560914271598AFE8C8 HTTP/1.1
Host: c.gb688.cn
Connection: keep-alive
User-Agent: Mozilla/5.0 ********************************
Accept: */*
Referer: http://c.gb688.cn/bzgk/gb/showGb?type=online&hcno=CC68F6BFD3E104560914271598AFE8C8
Accept-Encoding: identity
Accept-Language: ********************************
Cookie: JSESSIONID=********************************
Range: bytes=2949120-2967096
[Asm] 纯文本查看 复制代码
HTTP/1.1 206 Partial Content
Server: nginx/1.17.9
Date: ***, ** *** **** **:**:** GMT
Content-Type: Content-Type: application/octet-stream
Content-Length: 23980
Connection: keep-alive
Accept-Ranges: bytes
Content-Range: bytes 2949120-2967096/2967097

7x/AI3CelgQLKM3uZOKMbuApo9I1NYbaEpZ9diKXfGuljC3S2p/t80GdRHLu6ybPSwED9bx4nkJXtEijAM9ben6g4CdO1UC85aTGxpWKpoh4umqfibsh3jTYkSnAoZtd
[more]
至此, 文件载入结束
原文地址:https://gist.github.com/lzghzr/858067598cf590af4c1b7d8faa211d21
哪位大神可以写个教程 到底怎样才可以下载标准   非专业人员  感觉以上大神已经写的很明确了   就是不会弄

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

o_o.cjyy 发表于 2021-3-29 10:40
支持一下,可惜20年的时候还不知道手机端可以直接下PDF
王雪峰 发表于 2021-3-29 11:32
现在下载不了,以前油猴脚本可以,现在我用的浏览器右键打印也可以下载
 楼主| soarcool 发表于 2021-3-29 11:34
王雪峰 发表于 2021-3-29 11:32
现在下载不了,以前油猴脚本可以,现在我用的浏览器右键打印也可以下载

这个就是之前那个油猴脚本的作者写的

我右键打印打的有的页根本没有内容
laonanhai945 发表于 2021-3-29 12:04
王雪峰 发表于 2021-3-29 11:32
现在下载不了,以前油猴脚本可以,现在我用的浏览器右键打印也可以下载

右键打印可以下载么?请问怎么操作呢?
 楼主| soarcool 发表于 2021-3-29 12:58
laonanhai945 发表于 2021-3-29 12:04
右键打印可以下载么?请问怎么操作呢?

右键 打印  选择  另存为pdf
Duyan-David 发表于 2021-4-6 10:33
soarcool 发表于 2021-3-29 12:58
右键 打印  选择  另存为pdf

最多只能打印10页是什么原因啊
sailorjb 发表于 2021-5-14 17:15
用打印功能,清晰度很差,是什么原因,请大神解答
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

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

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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