吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4|回复: 0
收起左侧

[Web逆向] pdf.js 通用pdf下载教程

[复制链接]
涛之雨 发表于 2026-1-23 23:47
本帖最后由 涛之雨 于 2026-1-23 23:49 编辑

以求助帖为例:

突破限制下载网页内嵌pdf
https://www.52pojie.cn/thread-2088142-1-1.html
(出处: 吾爱破解论坛)

下载链接

f12,定位到pdf渲染层(页面嵌套)

执行PDFViewerApplication.download()即可(基本上通用)

以下是pdf文件链接的下载链接

https://dart.deloitte.com/USDART/ov-resource/057be505-289e-11e9-818d-67c85cbcc7fa#pdfjs.action=download

(下是应该能下,但是太慢啦)

pdf.js应该是通用的,除非服务器做了限制(也有办法绕过然后保存)

找到密码

使用特殊网咯下载后,发现有密码。
先说该网站结论:

  1. 找到id为r0inab的script标签的内容,
    例如:https://dart.deloitte.com/USDART/pdf/7f340bf3-fa5d-11e8-a74f-5142ae71a82d ,(没错我另起炉灶了)

    搜索得到加密后的密钥:2s1e1k2p1d1j2t2p1e1g1d1h172u1g1j2p171k2t1d1d172s1h2p2u171f2u2q1c1g1f2u1j

  2. 计算密钥

function decode(encodedString) {
    let result = '';
    for (let o = 1; o < encodedString.length; o++) {
        if (o % 2 === 1) {
            const charCode = parseInt(encodedString[o-1] + encodedString[o], 36);
            result += String.fromCharCode(charCode);
        }
    }
    return result;
}

const encoded = "2s1e1k2p1d1j2t2p1e1g1d1h172u1g1j2p171k2t1d1d172s1h2p2u171f2u2q1c1g1f2u1j";
console.log(decode(encoded));

得到密码:d28a17ea2415+f47a+8e11+d5af+3fb043f7

  1. 即可解开啦

PS: 如果希望去除密码,最简单的方法就是在线pdf解锁网站,比如https://www.ilovepdf.com/zh-cn/unlock_pdf

还有就是要多换几个软件试试,可能是软件bug,chrome和2345pdf阅读器说密码不对,但是edge、福昕pdf编辑器、上面那个pdf解锁网站则可以正确打开。。。

追码过程(通用)

pdf.js 中搜索 .onPassword

如果手速不够快可能需要刷新,
如果存在密码的话可能会在此处断下,并且报错No password given
如图中所示,此处的e.onPassword则是自动传输密码的必经之路。
如果偷懒,可以在e.onPassword的第一回调参数(也就是上面的s函数)下断点,

即可直接偷鸡。

当然,本例追过去,发现

onPassword = (e, t) => {
    this.isViewerEmbedded && this._unblockDocumentLoadEvent(),
    window.addEventListener('message', function t(i) {
        window.removeEventListener('message', t)
        for (var n = i.data, s = '', o = 1; o < n.length; o++)
            o % 2 && (s += String.fromCharCode(parseInt(n[o - 1] + n[o], 36)))
        e(s)
    }),
    window.parent.postMessage('s', location.href)
}

AI格式化一下

然后追到s的监听换事件

//外层
function onMessage(e) {
e.origin === location.protocol + "//" + location.host && (e.data === String.fromCharCode(115) ? e.source.postMessage(JSON.parse(document.getElementById("r0inab").innerText), location.href) : e.data === String.fromCharCode(103) && e.source.postMessage(JSON.parse(document.getElementById("r0inyk").innerText), location.href));
}

AI格式化一下

最终算法参考本文[找到密码]部分

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

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2026-1-23 23:50

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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