<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
Python 反爬中有一大類,叫做字型反爬,核心的理論就是通過字型檔案或者 CSS 偏移,實現加密邏輯
本次要採集的站點是:54yr55y855S15b2x
(Base64 加密) 站點地址為:https%3A%2F%2Fmaoyan.com%2Ffilms%2F522013(URL 編碼)
上述地址開啟之後,用開發者工具選中某文字之後,會發現 Elements 中,無法從原始碼讀取到資料,
如下圖所示:
類似的所有場景都屬於字型編碼系列,簡單理解就是:
伺服器原始碼,無法直接讀取文字。
也可以用請求頁面預覽索引標籤,判斷是否為字型加密,當出現如下結論時,可以判斷,其中數位資訊,顯示為方框。
本以為直接進入字型加密解密邏輯,本案例就可以解決,但是當開啟請求頭之後,發現出現了一個請求引數 signKey
,而且還加密了,那解決字型反爬前,先解決這個加密問題吧。
開啟控制檯,直接檢索 signKey
引數,發現只有一個檔案所有涉及。
開啟 common.js
檔案之後,進行格式化,繼續檢索關鍵字。
直接將斷點打在 688 行附近,然後重新整理頁面,等待斷點請求。
當發現關鍵字 _0x371d
時,就知道,這裡需要一點點扣 JS 程式碼了,又是一個細緻活。
待提取的 JS 程式碼如下所示:
u = function(x) { var d = x[a(_0x371d("0x14c"))] , e = x[a(_0x371d("0x14d"))] , _ = x[a(_0x371d("0x14e"))] , t = void 0 === _ ? 1 : _ , n = Math[a("0x82")](10 * Math[a(_0x371d("0x14f"))]()) , i = (new Date)[a(_0x371d("0x150"))]() , o = typeof window !== a("0x4") && window[_0x371d("0x151")] , s = o[a(_0x371d("0x152"))] , u = a(_0x371d("0x153")) + d.toUpperCase() + a("0x87") + i + a(_0x371d("0x154")) + s + _0x371d("0x155") + n + a("0x89") + e + a(_0x371d("0x156")) + t , f = a(_0x371d("0x157")); return { timeStamp: i, index: n, signKey: (0, r[a(_0x371d("0x158"))])(u + f), channelId: e, sVersion: t, webdriver: c() }
每次頁面重新整理的時候,都可以捕獲一下相關引數與值。
例如,這裡可以直接得到 d = "GET"
,寫入到我們的 JS 檔案即可。
第一步加密之後,得到各個引數值,其中 u
與 f
比較重要。 通過每次斷點,可以依次將程式碼逐步還原。 下述是一些比較重要的步驟,如果路徑不清楚,可以點選下面卡片,直接詢問橡皮擦。
獲取 f 值
獲取 _0x5827 函數內容
下述內容 r 是一個陣列,可以通過索引獲取其中的字串
a(_0x371d("0x158")); ("default");
隨著程式碼的深入,發現了最核心 signKey 引數的加密位置,截圖如下:
這就是一個大工程了,沒有 1 個小時,無法翻譯完畢。
我們先將核心的函數扣出來,然後一點點進行替換,核心未翻譯程式碼如下所示:
function() { var d = e(7) 這裡面好多程式碼 , v = u , M = f; s = m(s, c, u, f, i[l + 0], 7, -680876936), f = m(f, s, c, u, i[l + 1], 12, -389564586), u = m(u, f, s, c, i[l + 2], 17, 606105819), c = m(c, u, f, s, i[l + 3], 22, -1044525330), 這裡面好多程式碼 }()
翻譯的時候,關注幾個重點引數即可。 ** _0x371d **
var _0x371d = function (x, d) { return (x -= 0), _0x5827[x]; };
** _0x5827 **
var _0x5827 = ["parseJSON", "parseXML", "ajaxSettings", "ajaxSetup", "statusCode", "canceled", "success", "dataType", …………;
複製到編輯器中,直接好傢伙,超過 7W 字了。
加密變數 a
var a = function (x, d) { return (x -= 0), r[x]; };
加密變數 r
加密引數 d
瞭解上述幾個值的取值方式,解決 signKey 就變得非常簡單了。
除此之外,最簡單的辦法是直接將 common.js
檔案搭建在本地,然後用 Python 去呼叫,直接就可以獲取到對應的資料。
JS 程式碼在 Python 中執行,使用如下 Demo 即可實現:
import execjs # 執行 JS 檔案 js = "js 指令碼內容" ctx = execjs.compile(js) x = { 'method': 'GET', 'channelId': 40011, 'sVersion': 1, 'type': 'object' } # 傳入引數 n = ctx.call('翻譯之後的加密函數名', x)
到此這篇關於Python和JS反爬之解決反爬引數 signKey的文章就介紹到這了,更多相關反爬引數 signKey內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45