惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

aimingoo的专栏
aimingoo的专栏
G
Google Developers Blog
B
Blog RSS Feed
A
About on SuperTechFans
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
V
V2EX
Stack Overflow Blog
Stack Overflow Blog
C
Check Point Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Engineering at Meta
Engineering at Meta
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
博客园 - 司徒正美
D
Docker
F
Fortinet All Blogs
Hugging Face - Blog
Hugging Face - Blog
Last Week in AI
Last Week in AI
H
Help Net Security
WordPress大学
WordPress大学
MyScale Blog
MyScale Blog
博客园 - Franky
人人都是产品经理
人人都是产品经理
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Blog — PlanetScale
Blog — PlanetScale
L
LangChain Blog

kkocdko's blog

Tasker 永久试用修改思路 - kkocdko's blog 极限压缩文档扫描件 - kkocdko's blog Bypass the Blank Chars Detection crknob - Chrome portable patch 我如何将博客首页体积降至 3 KB - kkocdko's blog 如何极限优化压缩文件体积 - kkocdko's blog EmEditor 精简版 - kkocdko's blog Backup Data from VSCode Web 优雅地游玩 Minecraft - kkocdko's blog 让程序以管理员权限运行的 PE 清单 - kkocdko's blog 注销 ZEIT 账号之后遇到的坑 - kkocdko's blog 本博客的协议已更改为 CC0 - kkocdko's blog mobp - 使 MSOffice 后台常驻 在安装 VS 生成工具时规避 .NET 安装错误 各种格式的占位空文件 - kkocdko's blog 优雅地游玩 Flash 游戏 - kkocdko's blog WPS 2016 极限精简版 - kkocdko's blog Convert Const to Let by Terser 规避 Visual Studio 许可证过期的 Bug 方便地使用 iPod - kkocdko's blog 用 UserJS 注入 UserCSS - kkocdko's blog 注册表修改文件关联(默认程序) - kkocdko's blog 周期精准的太阳系模型 - kkocdko's blog 关闭屏幕的 WinAPI - kkocdko's blog 重置 Windows 图标缓存 - kkocdko's blog AIDA64 极限精简单文件版 - kkocdko's blog 几何画板单文件精简版 - kkocdko's blog 世界之窗浏览器单文件版 - kkocdko's blog 在 MBR + Legacy 下用 Bootmgr 引导 Ubuntu 简洁的 Markdown 预览工具 - kkocdko's blog
Dump PDF from HEP Website
2026-04-11 · via kkocdko's blog

Background

As we know many publishers in China has provided ebooks for home studies after the COVID-19 epidemic. But some of them like HEP only allow you to read online, so bad.

Steps

Open a reader page such as this one, toggle developer tools and switch to Network tab, you will found some PDF file requests. Download and open it? Oh no, it's encrypted. These files have BB 51 1F 73 magic code,but a formal PDF file should be 25 50 44 46. Certainly, you could fiddle tenaciously with the code and finally found a way to decrypt.

However, we observed that this page is using pdf.js to render the document, this is the weak point!

Type pdfjsLib.version in console, we got the version 2.2.228. Now download pdf_viewer.js and make some modify. Replace line 7558 return _possibleConstructorReturn ... with:

let ret = "{ expression after `return` }";
window.hook = window.hook || [];
hook.push(ret);
return ret;

Install Header Editor extension, create a rule and redirect page's pdf_viewer.js to own one, or you can use the override function in developer tools.

Reload the page, you could dump decrypted PDF data by hooks[i].pdfDocument.getData(). Here is a code snippet that allows you to dump pages automatically:

for (const [index, box] of canvas_box.childNodes.entries()) {
  // if (index < 210) continue; // skip
  box.scrollIntoView();
  while (!box.querySelector("canvas"))
    await new Promise((r) => setTimeout(r, 50));
  await new Promise((r) => setTimeout(r, 200));
  const entry = hook.find((entry) => entry.container === box);
  const a = document.createElement("a");
  a.href = URL.createObjectURL(new Blob([await entry.pdfDocument.getData()]));
  a.download = `${index}.pdf`.padStart(7, 0);
  a.click();
}

You may need to turn off "Ask where to save each file before downloading" in browser settings.

By the Way

curl -o a.pdf https://wkobwp.sciencereading.cn/api/file/{id}/getDocumentbuffer

Result Demo

https://lanzoui.com/b0108u0lg