文章

记录一次网页PDF破解

我们要上汇编语言和接口技术这门专业课,但是因为疫情在家上网课,我们没有课本,老师给我们发了他购买的电子版的(有次数限制,发给我们的时候已经没了)我们只能看到一个没有文字的网页PDF,在网上找了好大一圈都没有这本书的PDF,没办法只能从破解文件下手

先用edge浏览器打开看看,如图

image-20220907135648408

点击确定,F12打开控制台,打不开应该是被禁用了

image-20220907135203166

通过ctrl+shift+I发现可以打开控制台,那就肯定是JS限制的,通过VS Code打开查看文件后能看到(设置(注释)这么明显,看来是个好程序员!!)

image-20220907140122907

一个文件大概50+M,数据应该都在本地

image-20220907140543249

继续在VS Code中往下翻可以看到一段内容,如下

image-20220907140755377

大致能猜测为base64

在格式化之后的代码中可以看到失败的alert提示过期,上面就应该是成功的判断

image-20220907142748170

复制粘贴去控制台运行(哎,成了)

image-20220907143036992

这就运行出来了

image-20220907143254964

这就是上面的主要代码了

var DEFAULT_URL = '';
var pdfUrl = document.location.search.substring(1);
if (null == pdfUrl || '' == pdfUrl) {
    var BASE64_MARKER = ";base64,";
    var preFileId = '';
    var pdfAsDataUri = "data:application/pdf;base64," + PDFData;
    var pdfAsArray = convertDataURIToBinary(pdfAsDataUri);
    DEFAULT_URL = pdfAsArray;
    function convertDataURIToBinary(data) {
        var point = data.indexOf(BASE64_MARKER) + BASE64_MARKER.length;
        var b64 = data.substring(point).replace(/[\n\r]/g, '');
        var raw = window.atob(b64);
        var rawlength = raw.length;
        var U8array = new Uint8Array(new ArrayBuffer(rawlength));
        for (i = 0; i < rawlength; i++) {
            U8array[i] = raw.charCodeAt(i) & 255;
        }
        return U8array;
    }
}

原文档是用applocation/pdf协议生成的pdf,同意我也可以用blob协议下载PDF代码如下:

var bstr = atob(PDFData)//atob()方法将base64数据解码
var leng = bstr.length//获取文件长度
var u8arr = new Uint8Array(leng)//新建Uint8数组存放字节
while(leng--){
    u8arr[leng] =  bstr.charCodeAt(leng)//转Unicode编码
}
const blob = new Blob([u8arr], {type:'application/pdf'});//新建blob协议
const fileName = `jiemipdf.pdf`;//文件名
const link = document.createElement('a');//新建a链接标签
link.href = window.URL.createObjectURL(blob);//添加下载地址
link.download = fileName;//文件名
link.click();//模拟点击事件
window.URL.revokeObjectURL(link.href);//执行下载操作

下载完后发现设有密码

image-20220907161416697

最后通过 破解PDF密码软件 破解密码即可

image-20220907161212331

设置好输出路径后,将PDF文件拖入等待十几秒即可完成

License:  CC BY 4.0