前言:本教程僅供學習,不得非法破壞網站。如用於其他暴力等用途,後果自負。如侵權您的網站請留言我,我立刻刪除,感謝。
本次來學習一下簡單的js逆向教程
爲了不直接貼出網站鏈接,下面是已經經過某種常見的、可逆的加密方式進行加密
aHR0cHM6Ly93d3cuY2l3ZWltYW8uY29tL2NoYXB0ZXIvMTAzNTQzODcy
0x01、查看接口返回的數據
看到接口返回的數據有點可疑,看到這種chapter_access_key
字眼,顧名思義就是章節訪問key,先記着有這麼一個字眼先,繼續觀察
這次又來一個字眼:encrypt,而且數據是加密的,聯想上一步,進而得知,可能是:拿chapter_access_key去解密當前的加密數據
0x02、全局搜索encryt_keys
這就搜索到兩處encryt_keys
點進去看看唄
發現兩處的地方還是有點不一樣,但是怎麼區分這個呢?
到這裏,你是否還記得上一步的截圖當中出現過的接口和當前截圖裏面有點一樣呢?
給你再看清楚一下唄:
那麼解決思路就來了:先看這個函數,看看debug出什麼來;不行的話,再看另外那個函數
打上斷點,重新加載,調試發現最終的解密函數入口是:
myDecrypt: function(f) {
var g = new b([]);
return g.decrypt(f)
}
// 再具體一點就是函數:g.decrypt(f)
// 即是下面這個函數:
decrypt: function(g) {
巴拉巴拉
巴拉巴拉
#¥%@!~%……&*()&
#¥%@!~%……&*()&
.
.
.
}
0x03、找到了,那扣它啊!
通過將myDecrypt: function(f)
扣出來之後,進行本地調試,然後就是缺啥補啥
ps: 懵懂的我一開始還不知道缺啥補啥是怎麼解決,直到問了一些大佬才知道就是:如果不知道怎麼解決的話,那就跟着瀏覽器,然後debug,一步一步看,看它調用了哪些變量/常量/函數!
如果還是不知道怎麼看的話,就是將鼠標放在正在變量/函數那裏,它會顯示藍色的調用棧,然後點擊進去看它,即可得到解決思路。
需要導入:CryptoJS
var CryptoJS = require("C:/Users/Administrator/AppData/Roaming/npm/node_modules/crypto-js");
// var CryptoJS = require("crypto-js"); // 運行報錯 Error: Cannot find module 'crypto-js',因此需要指定路徑進行導入這個依賴
// console.log(module.paths); // 上面的報錯信息可以使用這個來查看導入的模塊路徑有哪些
// 然後查看安裝路徑:
// $ npm prefix -g # node安裝路徑
// /Users/xxx/.nvm/versions/node/v10.16.0
// $ npm -g root # 查看依賴安裝路徑
// /Users/xxx/.nvm/versions/node/v10.16.0/lib/node_modules // 然後將這裏的路徑複製到上面導入的路徑處
0x04、踩坑的過程痛苦並快樂着
-[x] 已掉坑:
n = d.base64.decode(n);
^
ReferenceError: d is not defined
調試的時候,看到這個未定義,以爲看到base64就是轉換爲nodejs裏面的base64的對應使用就可以了,發現最後沒報錯但也沒有結果!!!
你知道這是很可怕的事情嗎,一個沒有bug的程序,而且得出的結果不是預期的
鄙人還是太菜了,我哭了,你呢?
然後反覆在瀏覽器進行debug,一個個排除,最終將問題定位到:
n = d.base64.decode(n);
定位到這一行代碼的時候,我進去看看這個decode/encode,發現並不是通過轉換爲nodejs的base64的decode/encode,
這是網址自己封裝的加解密方式啊!!!
跪了跪了 ○| ̄|_
跪完還得繼續幹啊,兄嘚,繼續扣相關的js唄!!!
0x05、扣完這些js之後,舒服啊,解密完畢
看一下解密的最終函數代碼粗略截圖:
運行結果截圖:
小結:
本次收穫到了調試技巧、及大概悉知網站存在偷換的概念/執行方式的可能
點擊我進行了解引用來源
至此本文教程寫完了,希望能夠幫助到各位在爬蟲路上的小夥伴們,覺得不錯點個讚唄
感謝認真讀完這篇教程的您
先別走唄,這裏有可能有你需要的乾貨文章:
爬蟲:js逆向目前遇到的知識點集合;
個人總結-js逆向解析思路;
CSS字體反爬實戰,10分鐘就能學會;
woff字體反爬實戰,10分鐘就能學會;
爬蟲js解密分析:某某雲文學;