記一次有限制的網頁pdf破解


作者:濤之雨

鏈接:

記一次有限制的網頁pdf破解
https://www.52pojie.cn/thread-1385134-1-1.html
(出處: 吾愛破解論壇)

記一次有限制的網頁pdf破解

起因

(文件附在文末)

初步分析

首先用chrome瀏覽器打開,查看效果

點擊確定,F12打開控制台(我怎么打不開)

那就ctrl+shift+I打開控制台(打開了)

那肯定是js搞的鬼,隨手翻一下js就看到

(有什么用。。。可以有不下於5種方法繞過)

列舉一下一瞬間想到的(歡迎補充)

  1. 最簡單的就是本地js啊!直接打開編輯。。。
  2. 上述的ctrl+shift+I
  3. 菜單$\to$更多工具$\to$開發者工具
  4. ctrl+shift+C(這是快速打開UI布局分析工具,就是這個小按鈕)
  1. fd自動轉發(針對服務器返回的數據,保存到本地然后轉發)
  2. 先打開控制台,再打開網頁(斜眼笑)

大膽猜測一下,一個HTML30多M,說明數據都在本地,這個彈窗應該是服務器驗證之類的

所以內容所占最多的部分就是PDF文件的主體。

使用010 Editor打開網頁(因為我電腦問題。。。sublime打開直接就卡死了。。。汗-_-||),

向下隨便翻翻,就找到一大堆的內容(如下圖所示)

大致可以猜測為base64。

當然有沒有加密啥的都不知道,只知道最后一步應該是base64。

然后向下看,有好幾個script標簽。

不得不說,這個作者還是挺有心的,下面三個eval的加密,上面一個號稱耶穌也還原不了的加密。

唔,先不解密吧,(肯定這塊就有貓膩了)

刷新一下頁面,在彈窗的時候按下暫停鍵,(注:在source標簽里)

點確定后就斷下來了

稍作格式化,有alert出現

向上翻一下,找到else所在判斷的另一個分支。。。這靈魂判斷。。。

不管38婦女節(雖然還沒到)

復制粘貼直接運行。(有點慢。。。)

這不就運行出來了么:

好了這就是主要的代碼了,拿出來解密再重命名一下就是:

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;
    }
}

明顯的的看到了,協議是application/pdf,編碼是base64

嘗試下載

base64解碼后直接保存16進制不就好了,隨手寫了python解密保存

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

import base64
PDFData = "JVBERi0xLjQN***********這里是完整的base64,30多m,直接base64后放出來估計要被h大打死(暴筋)**********MTUNCiUlRU9GDQo="
with open('temp.pdf', 'wb') as f:
  f.write(base64.b64decode(PDFData))

先喝杯咖啡。。。等待時間有點長

打開。

還有密碼。。。我大意了,沒有密碼!

找出密碼

原網頁中可以打開,肯定是有保存了密碼的,向下翻一下

解密JS法

又是一段“最強”加密的js,很少,直接看都能看出來

密碼是_0x4c77('0x2', 'V%DS')的結果,直接運行即可出結果

劫持事件法

上面有個輸入密碼以打開此 PDF 文件。下面有個確定,在確定按鈕下斷點。

點擊下方的格式化按鈕

在監聽提醒的位置下斷點(如果找不到在哪里了就切換到元素界面,再點一次)

刷新頁面即可斷下,鼠標放到value即可看到密碼。

下載PLUS

至此解密完ch。。。啥?沒有安裝python?

既然他利用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變量名變了記得重命名)

回車,彈出下載框!

(搞不懂為啥比python解碼還快。。。)

至此結束。

如果不想要密碼,可以到咱們吾愛隨便搜索一下,找個去除密碼的軟件即可。

附錄

內含:

  1. HTML原文件
  2. 本文PDF(不包含附錄鏈接)
  3. 下載后的PDF

下載:https://taozhiyu.lanzous.com/ind9nmmm3mb
密碼:3xoq
解壓密碼:52pojie.cn


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM