欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python和JS反爬之解決反爬參數(shù)?signKey

 更新時(shí)間:2022年05月17日 17:23:58   作者:??夢(mèng)想橡皮擦????  
這篇文章主要介紹了Python和JS反爬之解決反爬參數(shù)?signKey,Python?反爬中有一大類,叫做字體反爬,核心的理論就是通過(guò)字體文件或者?CSS?偏移,接下來(lái)文章的詳細(xì)介紹,需要的小伙伴可以參考一下

實(shí)戰(zhàn)場(chǎng)景

Python 反爬中有一大類,叫做字體反爬,核心的理論就是通過(guò)字體文件或者 CSS 偏移,實(shí)現(xiàn)加密邏輯

本次要采集的站點(diǎn)是:54yr55y855S15b2x(Base64 加密) 站點(diǎn)地址為:https%3A%2F%2Fmaoyan.com%2Ffilms%2F522013(URL 編碼)

上述地址打開(kāi)之后,用開(kāi)發(fā)者工具選中某文字之后,會(huì)發(fā)現(xiàn) Elements 中,無(wú)法從源碼讀取到數(shù)據(jù),

如下圖所示:

類似的所有場(chǎng)景都屬于字體編碼系列,簡(jiǎn)單理解就是:

服務(wù)器源碼,無(wú)法直接讀取文字。

也可以用請(qǐng)求頁(yè)面預(yù)覽選項(xiàng)卡,判斷是否為字體加密,當(dāng)出現(xiàn)如下結(jié)論時(shí),可以判斷,其中數(shù)字信息,顯示為方框。

系統(tǒng)分析

本以為直接進(jìn)入字體加密解密邏輯,本案例就可以解決,但是當(dāng)打開(kāi)請(qǐng)求頭之后,發(fā)現(xiàn)出現(xiàn)了一個(gè)請(qǐng)求參數(shù) signKey,而且還加密了,那解決字體反爬前,先解決這個(gè)加密問(wèn)題吧。

打開(kāi)控制臺(tái),直接檢索 signKey 參數(shù),發(fā)現(xiàn)只有一個(gè)文件所有涉及。

打開(kāi) common.js 文件之后,進(jìn)行格式化,繼續(xù)檢索關(guān)鍵字。

直接將斷點(diǎn)打在 688 行附近,然后刷新頁(yè)面,等待斷點(diǎn)請(qǐng)求。

當(dāng)發(fā)現(xiàn)關(guān)鍵字 _0x371d 時(shí),就知道,這里需要一點(diǎn)點(diǎn)扣 JS 代碼了,又是一個(gè)細(xì)致活。

待提取的 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()
}

每次頁(yè)面刷新的時(shí)候,都可以捕獲一下相關(guān)參數(shù)與值。

例如,這里可以直接得到 d = "GET",寫(xiě)入到我們的 JS 文件即可。

第一步加密之后,得到各個(gè)參數(shù)值,其中 u 與 f 比較重要。 通過(guò)每次斷點(diǎn),可以依次將代碼逐步還原。 下述是一些比較重要的步驟,如果路徑不清楚,可以點(diǎn)擊下面卡片,直接詢問(wèn)橡皮擦。

獲取 f 值

獲取 _0x5827 函數(shù)內(nèi)容

下述內(nèi)容 r 是一個(gè)數(shù)組,可以通過(guò)索引獲取其中的字符串

a(_0x371d("0x158"));
("default");

隨著代碼的深入,發(fā)現(xiàn)了最核心 signKey 參數(shù)的加密位置,截圖如下:

這就是一個(gè)大工程了,沒(méi)有 1 個(gè)小時(shí),無(wú)法翻譯完畢。

我們先將核心的函數(shù)扣出來(lái),然后一點(diǎn)點(diǎn)進(jìn)行替換,核心未翻譯代碼如下所示:

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),
 這里面好多代碼
}()

翻譯的時(shí)候,關(guān)注幾個(gè)重點(diǎn)參數(shù)即可。 ** _0x371d **

var _0x371d = function (x, d) {
  return (x -= 0), _0x5827[x];
};

** _0x5827 **

var _0x5827 = ["parseJSON", "parseXML", "ajaxSettings", "ajaxSetup", "statusCode", "canceled", "success", "dataType", …………;

復(fù)制到編輯器中,直接好家伙,超過(guò) 7W 字了。

加密變量 a

var a = function (x, d) {
  return (x -= 0), r[x];
};

加密變量 r

加密參數(shù) d

了解上述幾個(gè)值的取值方式,解決 signKey 就變得非常簡(jiǎn)單了。

除此之外,最簡(jiǎn)單的辦法是直接將 common.js 文件搭建在本地,然后用 Python 去調(diào)用,直接就可以獲取到對(duì)應(yīng)的數(shù)據(jù)。

JS 代碼在 Python 中執(zhí)行,使用如下 Demo 即可實(shí)現(xiàn):

import execjs
# 執(zhí)行 JS 文件
js = "js 腳本內(nèi)容"
ctx = execjs.compile(js)
x = {
    'method': 'GET',
    'channelId': 40011,
    'sVersion': 1,
    'type': 'object'
}
# 傳入?yún)?shù)
n = ctx.call('翻譯之后的加密函數(shù)名', x)

到此這篇關(guān)于Python和JS反爬之解決反爬參數(shù) signKey的文章就介紹到這了,更多相關(guān)反爬參數(shù) signKey內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python實(shí)現(xiàn)flappy bird游戲

    python實(shí)現(xiàn)flappy bird游戲

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)flappy bird游戲,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • Python獲取Linux系統(tǒng)下的本機(jī)IP地址代碼分享

    Python獲取Linux系統(tǒng)下的本機(jī)IP地址代碼分享

    這篇文章主要介紹了Python獲取Linux系統(tǒng)下的本機(jī)IP地址代碼分享,本文直接給出實(shí)現(xiàn)代碼,可以獲取到eth0等網(wǎng)卡的IP地址,需要的朋友可以參考下
    2014-11-11
  • 基于Django URL傳參 FORM表單傳數(shù)據(jù) get post的用法實(shí)例

    基于Django URL傳參 FORM表單傳數(shù)據(jù) get post的用法實(shí)例

    今天小編就為大家分享一篇基于Django URL傳參 FORM表單傳數(shù)據(jù) get post的用法實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-05-05
  • Python中pygame安裝方法圖文詳解

    Python中pygame安裝方法圖文詳解

    這篇文章主要介紹了Python中pygame安裝方法,結(jié)合圖文說(shuō)明,較為詳細(xì)的分析總結(jié)了Python中pygame的下載及安裝調(diào)試詳細(xì)步驟,需要的朋友可以參考下
    2015-11-11
  • 詳解Python中pyautogui庫(kù)的最全使用方法

    詳解Python中pyautogui庫(kù)的最全使用方法

    這篇文章主要介紹了詳解Python中pyautogui庫(kù)的最全使用方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • 使用Python實(shí)現(xiàn)火車票查詢系統(tǒng)(帶界面)

    使用Python實(shí)現(xiàn)火車票查詢系統(tǒng)(帶界面)

    周末、假期來(lái)了,七夕也快到了,又到一年中最一票難求的時(shí)候了!本文將用Python制作一個(gè)簡(jiǎn)單的火車票查詢系統(tǒng),感興趣的可以了解一下
    2022-07-07
  • python實(shí)現(xiàn)列車管理系統(tǒng)

    python實(shí)現(xiàn)列車管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)列車管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-09-09
  • matplotlib繪制鼠標(biāo)的十字光標(biāo)的實(shí)現(xiàn)(自定義方式,官方實(shí)例)

    matplotlib繪制鼠標(biāo)的十字光標(biāo)的實(shí)現(xiàn)(自定義方式,官方實(shí)例)

    這篇文章主要介紹了matplotlib繪制鼠標(biāo)的十字光標(biāo)(自定義方式,官方實(shí)例),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • Python實(shí)現(xiàn)多線程的兩種方式分析

    Python實(shí)現(xiàn)多線程的兩種方式分析

    這篇文章主要介紹了Python實(shí)現(xiàn)多線程的兩種方式,結(jié)合實(shí)例形式分析了通過(guò)自定義函數(shù)傳遞Thread對(duì)象以及繼承Thread類兩種多線程實(shí)現(xiàn)方式相關(guān)操作技巧,需要的朋友可以參考下
    2018-08-08
  • YOLOv5構(gòu)建安全帽檢測(cè)和識(shí)別系統(tǒng)使用詳解

    YOLOv5構(gòu)建安全帽檢測(cè)和識(shí)別系統(tǒng)使用詳解

    這篇文章主要為大家介紹了YOLOv5構(gòu)建安全帽檢測(cè)和識(shí)別系統(tǒng)使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04

最新評(píng)論