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

          破解響應(yīng)加密:Python 與 JS 逆向結(jié)合的最佳實(shí)踐

          共 5292字,需瀏覽 11分鐘

           ·

          2023-07-28 11:51

          大家好,我是安果!

          有些網(wǎng)站為了增強(qiáng)數(shù)據(jù)的安全性,針對(duì)接口的響應(yīng)值做了一層加密,這樣我們沒法直接通過接口調(diào)用獲取有效的數(shù)據(jù)

          面對(duì)這種情況,我們需要分析源碼,找到前端的解密邏輯,使用 Python 改寫一下即可

          本篇文章將通過一個(gè)簡(jiǎn)單的實(shí)例進(jìn)行講解

          目標(biāo)對(duì)象:

          aHR0cHM6Ly93d3cuaGFuZ2hhbmdjaGEuY29tL2luZHVzdHJ5

          具體操作步驟如下:

          1-1  安裝依賴

          # 安裝依賴
          pip3 install pycryptodome

          1-2  分析加密邏輯

          打開目標(biāo)網(wǎng)站,通過關(guān)鍵字搜索數(shù)據(jù)報(bào)告,發(fā)現(xiàn)響應(yīng)中的 data 值是加密的

          由于關(guān)鍵字 data 不易于全局查找解密邏輯,這里使用關(guān)鍵字 decrypt 在 Source 面板全局進(jìn)行查詢(Ctrl+Shift+F)

          然后在上面搜索到的所有代碼塊處都新增一個(gè)斷點(diǎn),通過通過搜索再次觸發(fā)一次請(qǐng)求,定位到下面的解密邏輯

          我們發(fā)現(xiàn)解密使用的是: AES(對(duì)稱加密),模式是 ECB,填充方式為 Pkcs7,另外密鑰 key 通過調(diào)試也能拿到

          1-3   AES 解密(Python)

          首先,利用 Python 實(shí)現(xiàn) AES 的解密邏輯

          import requests
          import base64
          from Crypto.Cipher import AES
          from Crypto.Util.Padding import pad, unpad

          class AESObject(object):
              def __init__(self, block_size=16):
                  self.__block_size = block_size

              # AES解密
              def aes_decrypt(self, padding: str, content: str, key: str, mode, *args):
                  key = key.encode('utf-8')

                  aes = AES.new(key, mode, *args)

                  content = base64.b64decode(content)

                  # 解密
                  content_raw = aes.decrypt(content).decode('utf-8')
                  if padding == 'zero':
                      return content_raw
                  pad_ = ord(content_raw[-1])
                  return content_raw[:-pad_]

          然后,通過請(qǐng)求獲取加密內(nèi)容,調(diào)用上面的方法進(jìn)行解密

          def get_info():
              url = "https://**/hhc/industry/articleWithTags?filter=%7B%22title%22%3A%221%22%2C%22keyword%22%3A%221%22%2C%22sortType%22%3Anull%2C%22limit%22%3A9%2C%22skip%22%3A0%2C%22userId%22%3A4220972%7D"

              payload = {}
              headers = {
                  'Accept''application/json, text/javascript, */*; q=0.01',
                  'Accept-Language''zh-CN,zh;q=0.9,en;q=0.8',
                  'Auth-Plus''',
                  'Connection''keep-alive',
                  'Origin''https://**',
                  'Sec-Fetch-Dest''empty',
                  'Sec-Fetch-Mode''cors',
                  'Sec-Fetch-Site''same-site',
                  'User-Agent''Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36',
                  'X-Requested-With''XMLHttpRequest',
                  'clientInfo''web',
                  'clientVersion''1.0.2',
                  'currentHref''https://**/industry',
                  'sec-ch-ua''"Not.A/Brand";v="8", "Chromium";v="114", "Google Chrome";v="114"',
                  'sec-ch-ua-mobile''?0',
                  'sec-ch-ua-platform''"Windows"',
                  'Cookie''登錄后獲取的ck'
              }

              # 加密內(nèi)容data
              data = requests.request("GET", url, headers=headers, data=payload).json()['data']

              # AES加密
              key = '調(diào)試拿到的key'
              aESObject = AESObject(block_size=16)

              # 解密
              data_de = aESObject.aes_decrypt('pkcs7', data, key, AES.MODE_ECB)

              print(data_de)

          PS:這里只針對(duì)填充方式為 Pkcs7 做了處理,如果為其他填充模式,可以自行進(jìn)行改寫

          如果你覺得文章還不錯(cuò),請(qǐng)大家 點(diǎn)贊、分享、留言 下,因?yàn)檫@將是我持續(xù)輸出更多優(yōu)質(zhì)文章的最強(qiáng)動(dòng)力!


          推薦閱讀

          5 分鐘,教你從零快速編寫一個(gè)油猴腳本!

          Python 絕招:解鎖小紅書信息流的無限潛力!

          反爬篇 | 手把手教你處理 JS 逆向之字體反爬(下)

          休閑時(shí)光:最近上映的電影與爬蟲世界,帶您徹底放松!


          END


          好文和朋友一起看~

          瀏覽 1996
          點(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>
                  尤物成人在线 | 日韩一级无码电影 | 国产成人无码毛片 | 国产精品久久久久久久久久久久久久久久久 | 中文字幕三级视频 |