记一次有限制的网页pdf破解

查看 163|回复 14
作者:Yancy-Lan   
作者:涛之雨

其他分会场(内容完全一样,随手多发一处。。。)
cnblogs : https://www.cnblogs.com/taozhiyu/p/14493476.html

记一次有限制的网页pdf破解
起因


1.png (100.88 KB, 下载次数: 0)
下载附件
2021-3-7 01:55 上传

(文件附在文末)
初步分析
首先用chrome浏览器打开,查看效果


2.png (17.31 KB, 下载次数: 0)
下载附件
2021-3-7 14:52 上传

点击确定,F12打开控制台(我怎么打不开)
那就ctrl+shift+I打开控制台(打开了)
那肯定是js搞的鬼,随手翻一下js就看到


3.png (61.11 KB, 下载次数: 0)
下载附件
2021-3-7 01:55 上传

(有什么用。。。可以有不下于5种方法绕过)

列举一下一瞬间想到的(欢迎补充)
[ol]
  • 最简单的就是本地js啊!直接打开编辑。。。
  • 上述的ctrl+shift+I
  • 菜单$\to$更多工具$\to$开发者工具
  • ctrl+shift+C(这是快速打开UI布局分析工具,就是这个小按钮)


    4.png (13.43 KB, 下载次数: 0)
    下载附件
    2021-3-7 01:56 上传
  • fd自动转发(针对服务器返回的数据,保存到本地然后转发)
  • 先打开控制台,再打开网页(斜眼笑)
    [/ol]

    大胆猜测一下,一个HTML30多M,说明数据都在本地,这个弹窗应该是服务器验证之类的
    所以内容所占最多的部分就是PDF文件的主体。
    使用010 Editor打开网页(因为我电脑问题。。。sublime打开直接就卡死了。。。汗-_-||),
    向下随便翻翻,就找到一大堆的内容(如下图所示)


    5.png (178.02 KB, 下载次数: 0)
    下载附件
    2021-3-7 14:52 上传

    大致可以猜测为base64。
    当然有没有加密啥的都不知道,只知道最后一步应该是base64。
    然后向下看,有好几个script标签。


    6.png (62.15 KB, 下载次数: 0)
    下载附件
    2021-3-7 01:56 上传

    不得不说,这个作者还是挺有心的,下面三个eval的加密,上面一个号称耶稣也还原不了的加密。
    唔,先不解密吧,(肯定这块就有猫腻了)
    刷新一下页面,在弹窗的时候按下暂停键,(注:在source标签里)


    7.png (38.61 KB, 下载次数: 0)
    下载附件
    2021-3-7 14:52 上传

    点确定后就断下来了


    8.png (136.19 KB, 下载次数: 0)
    下载附件
    2021-3-7 01:56 上传

    稍作格式化,有alert出现


    9.png (16.18 KB, 下载次数: 0)
    下载附件
    2021-3-7 14:52 上传

    向上翻一下,找到else所在判断的另一个分支。。。这灵魂判断。。。


    10.png (80.83 KB, 下载次数: 0)
    下载附件
    2021-3-7 01:56 上传

    不管38妇女节(虽然还没到)
    复制粘贴直接运行。(有点慢。。。)


    11.png (130.18 KB, 下载次数: 0)
    下载附件
    2021-3-7 14:51 上传

    这不就运行出来了么:


    11_plus.png (211.5 KB, 下载次数: 0)
    下载附件
    2021-3-7 14:51 上传

    好了这就是主要的代码了,拿出来解密再重命名一下就是:
    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
    明显的的看到了,协议是application/pdf,编码是base64。
    尝试下载
    base64解码后直接保存16进制不就好了,随手写了python解密保存

    温馨提示,文件有点大,我是直接用010 Editor把前后都删掉,然后添加前后部分的

    import base64
    PDFData = "JVBERi0xLjYKJb/3***********这里是完整的base64,30多m,直接base64后放出来估计要被h大打死(暴筋)**********8mCjMyMzIxMjkwCiUlRU9GCg=="
    with open('temp.pdf', 'wb') as f:
      f.write(base64.b64decode(PDFData))
    先喝杯咖啡。。。等待时间有点长


    12.png (13.67 KB, 下载次数: 0)
    下载附件
    2021-3-7 01:56 上传

    打开。


    13.png (13.15 KB, 下载次数: 0)
    下载附件
    2021-3-7 01:56 上传

    还有密码。。。我大意了,没有密码!
    找出密码
    原网页中可以打开,肯定是有保存了密码的,向下翻一下


    14.png (69.25 KB, 下载次数: 0)
    下载附件
    2021-3-7 01:56 上传

    解密JS法
    又是一段“最强”加密的js,很少,直接看都能看出来


    15.png (136.3 KB, 下载次数: 0)
    下载附件
    2021-3-7 01:56 上传

    密码是_0x4c77('0x2', 'V%DS')的结果,直接运行即可出结果


    16.png (3.38 KB, 下载次数: 0)
    下载附件
    2021-3-7 01:56 上传

    劫持事件法
    上面有个输入密码以打开此 PDF 文件。下面有个确定,在确定按钮下断点。


    17.png (88.98 KB, 下载次数: 0)
    下载附件
    2021-3-7 01:56 上传

    点击下方的格式化按钮


    18.png (3.59 KB, 下载次数: 0)
    下载附件
    2021-3-7 01:56 上传

    在监听提醒的位置下断点(如果找不到在哪里了就切换到元素界面,再点一次)


    19.png (67.01 KB, 下载次数: 0)
    下载附件
    2021-3-7 01:56 上传

    刷新页面即可断下,鼠标放到value即可看到密码。


    20.png (64.04 KB, 下载次数: 0)
    下载附件
    2021-3-7 01:57 上传

    下载PLUS
    至此解密完ch。。。啥?没有安装python?


    21.png (32.99 KB, 下载次数: 0)
    下载附件
    2021-3-7 01:57 上传

    既然他利用application/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);//执行下载操作
    复制粘贴到console里,(如果PDFData变量名变了记得重命名)
    回车,弹出下载框!


    22.png (54.69 KB, 下载次数: 0)
    下载附件
    2021-3-7 01:57 上传

    (搞不懂为啥比python解码还快。。。)
    至此结束。
    如果不想要密码,可以到咱们吾爱随便搜索一下,找个去除密码的软件即可。
    附录

    内含:
    [ol]
  • HTML原文件
  • 本文PDF(不包含附录链接)
  • 下载后的PDF
    [/ol]

    下载链接:https://taozhiyu.lanzouj.com/ind9nmmm3mb
    密码:3xoq
    压缩包解压密码:52pojie.cn

    下载次数, 下载附件

  • liu6tot   


    the_black 发表于 2021-5-18 17:02
    大佬您好,我查看了你的“记一次有限制的网页pdf破解”文章,无奈自己是小白,不会技术,希望您能研究研究 ...

    F12打开控制台,输入PDFViewerApplication.save()即可下载
    liu6tot   


    金城侠客 发表于 2021-8-6 20:44
    大侠,您好,还是无法下载啊,请问是这么回事,谢谢

    具体情况具体分析。。。你这直接报个错谁知道什么情况
    winddyj   

    会爬虫是真的强!我现在在学习中,,,期待你有更多的实践交流分享!辛苦了
    想你的月   


    我是不会改名的 发表于 2021-3-7 09:28
    有服务器咋办呢,https://ws28.cn/f/4vkmubbrnag
    以前有阅读器,后面出版社把服务器关了,有账号也登不 ...

    那没办法了,实在不行就爆破吧。一般来说密码都是大小写数字和特殊字符
    (或是没有特殊字符,密码特别长)
    爆破尝试一下?
    像抑郁云阅读本地缓存就是文件名加盐MD5
    经济学人的客户端也是差不多
    客户端可以发一下?说不定算法是本地的呢(心存侥幸)
    xzhlife   

    好久没发帖了,
    自古楼主坐沙发
    PS:该网页用的是开源的PDFjs(http://mozilla.github.io/pdf.js/)
    PrincessSnow   

    代码中PDF=“*****”过长,会造成像pycharm等IDE 卡死, 这代码有点不能忍。
    [Python] 纯文本查看 复制代码import base64
    with open("input.txt", "r") as f:
        PDFData = f.read().encode("ascii")
    with open('temp.pdf', 'wb') as f:
      f.write(base64.b64decode(PDFData))
    quhus   

    js代码配个quicker的"剪库"动作脚本,还要什么自行车?谢谢斑竹的好思路,一大波书库向我走来
    .


    image.png (470.34 KB, 下载次数: 0)
    下载附件
    2021-9-11 00:26 上传

    tyy2020   

    思路清晰,分析到位,过程写的尤为生动,赞一个
    whc2001   

    虽然啥也不懂,但还是认真的看完了!
    您需要登录后才可以回帖 登录 | 立即注册

    返回顶部