<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Python 爬蟲進(jìn)階必備 | 某工業(yè)超市加密 header 參數(shù)分析

          共 1816字,需瀏覽 4分鐘

           ·

          2021-02-22 14:32

          今日網(wǎng)站

          aHR0cHM6Ly93ZWIuemtoMzYwLmNvbS9saXN0L2MtMjYwMTg2Lmh0bWw/c2hvd1R5cGU9cGljJmNscD0x

          這個(gè)網(wǎng)站是在某交流群看到的,隨手保存下來(lái)作為今天的素材

          抓包分析與加密定位

          先看看抓包的結(jié)果,可以看到請(qǐng)求的header中包含兩個(gè)未知的參數(shù),分別是zkhszkhst

          進(jìn)一步檢索參數(shù)zkhstzkhs,可以發(fā)現(xiàn)這兩個(gè)參數(shù)的值沒有做過(guò)混淆

          并且都有對(duì)應(yīng)的搜索結(jié)果

          根據(jù)搜索結(jié)果的提示inde,進(jìn)一步在文件中檢索zkhstzkhs

          可以在文件中找到下面這幾個(gè)關(guān)鍵位置

          加密分析

          在邏輯里比較明顯的是

          e.headers.zkhs?=?o,e.headers.zkhst?=?r

          這行代碼預(yù)示我們要分析的是or這兩個(gè)變量

          這兩個(gè)變量的賦值分別可以在上面的 js 邏輯中找到

          o?=?u()("body=".concat(i,?"¶ms=").concat(o,?"&sign_token=").concat(r),?r)
          r?=?Object(s.f)("zkhst")

          接下來(lái)只要單點(diǎn)調(diào)試即可,先來(lái)看o的生成

          o的邏輯是將所有的參數(shù)拼接,傳入u()中計(jì)算

          這里的參數(shù)是一個(gè)逗號(hào)表達(dá)式,最后得到的傳入?yún)?shù)是r

          r?=?("body=".concat(i,?"¶ms=").concat(o,?"&sign_token=").concat(r)

          這里較為明顯的未知參數(shù)是body以及sign_token

          可以通過(guò)斷點(diǎn)分析得到下面的結(jié)果,這個(gè)結(jié)果就是計(jì)算后的r

          body={"brandId":"","catalogueId":"260186","cityCode":350100,"clp":true,"extraFilter":{"inStock":false,"showIndustryFeatured":false},"from":0,"fz":false,"keyword":"","productFilter":{"brandIds":[""],"properties":{}},"rangeFilter":null,"searchType":{"notNeedCorrect":false},"size":20,"sort":0}¶ms={"traceId":"213681131613962067063"}&sign_token=799c9842f09c490196047064e10dead8

          網(wǎng)站的開發(fā)很貼心了,還在邏輯里加了console.log

          bodyparmas都是查詢參數(shù),body中包含了城市信息之類的內(nèi)容,這個(gè)需要根據(jù)要爬取的內(nèi)容修改

          除此之外還有sign_token未知,這個(gè)就是另一個(gè)要分析的參數(shù)zkhst

          zkhst 獲取

          經(jīng)過(guò)調(diào)試得到下面這個(gè)結(jié)果,在定位的js中有一個(gè)switch控制流

          918行,會(huì)進(jìn)行一次判斷,如果r = Object(s.f)("zkhst")沒有獲取到值,會(huì)進(jìn)入到Object(l.i)();這個(gè)邏輯。如果有值會(huì)break進(jìn)入926行的邏輯。

          所以需要先把Object(s.f)("zkhst")的值變?yōu)?code style="font-size: 14px;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;background-color: rgba(27, 31, 35, 0.05);font-family: "Operator Mono", Consolas, Monaco, Menlo, monospace;word-break: break-all;color: rgb(71, 193, 168);">undefinde,進(jìn)入s.f中,可以看到下面這段邏輯

          ?h?=?function(t)?{
          ????????t?=?document.cookie.match(new?RegExp("(^|?)".concat(t,?"=([^;]*)(;|$)")));
          ????????return?null?!=?t???decodeURIComponent(t[2])?:?null
          ????}

          可以得到zkhst是從cookie中得出的,直接清除cookie中的zkhst就能進(jìn)入生成的邏輯

          所以清除瀏覽器緩存/cookie

          順利進(jìn)入(l.i)(),可以看到下面這串邏輯

          并且在network中也的到印證

          這個(gè)zkhst是由頁(yè)面請(qǐng)求返回得到的。

          至此兩個(gè)加密參數(shù)均已得到,就可以獲取頁(yè)面的數(shù)據(jù)了。

          好了,今天的文章就到這里了,我們下次再會(huì)~

          有知有行

          [ 完 ]

          對(duì)了,看完記得一鍵四連,這個(gè)對(duì)我真的很重要。

          瀏覽 64
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  天天综合干 | 狠狠撸夜夜撸 | 天天噜天天操 | 97 超碰自拍 | 亚洲无吗在线播放 |