Python爬蟲實戰JS逆向AES逆向加密爬取

爬取目標

網址:監管平臺

image.png

工具使用

開發工具:pycharm

開發環境:python3.7, Windows10

使用工具包:requests,AES,json

涉及AES對稱加密問題 需要 安裝node.js環境

使用npm install 安裝 crypto-js​

項目思路解析

確定數據 在這個網頁可以看到數據是動態返回的 但是 都是加密的 如何確定是我們需要的?

123.png

突然想到 如果我分頁 是不是會直接加載第二個頁面 然後查看相似度 找到第一個頁面, 我真是太聰明瞭

234.png

數據找到瞭 現在開始尋找加密 但是突然發現沒有 加密的關鍵字? 那我們通過url 下手試試 在All裡面全局 搜索 query/comp/list(url後面的參數)

345.png

找到這個接口 鼠標右鍵 可以在源代碼查看他

456.png

567.png

678.png

慢慢調試 中間調試太多瞭 我就不一一截圖出來瞭 跑到這裡 發現data 裡面的參數 和我們看到的加密一致

h(t.data) 加密位置

789.png

進去h裡面 (鼠標光標放到 h上面 會顯示他的 js地址 如果沒有顯示 就是證明你還沒有執行到這裡 需要在前面打上斷點 刷新頁面調試)

8910.png

發現這個采用AES加密算法 使用模型CBC模式 采用填充方式為 Pkcs7

AES.decrypt() # 參數說明 秘鑰 模式 偏移值

f  = ‘jo8j9wGw%6HbxfFn’ # 秘鑰

m = ‘0123456789ABCDEF’ # 偏移值

證明數據推導正確 在 return r.toString() 打上斷點

91011.png

r裡面數據正常返回

簡易源碼分享

import requests
from Crypto.Cipher import AES
import json​
url = 'http://jzsc.mohurd.gov.cn/api/webApi/dataservice/query/comp/list?pg=2&pgsz=15&total=0'
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36 Edg/93.0.961.38'
}
response = requests.get(url, headers=headers).text
f = 'jo8j9wGw%6HbxfFn'  # 秘鑰
m = '0123456789ABCDEF'  # 偏移值
​# 轉碼  utf-8?  字節 16進制
m = bytes(m, encoding='utf-8')
f = bytes(f, encoding='utf-8')
​# 創建一個AES算法 秘鑰  模式 偏移值
cipher = AES.new(f, AES.MODE_CBC, m)
# 解密
decrypt_content = cipher.decrypt(bytes.fromhex(response))
result = str(decrypt_content, encoding='utf-8')
​# OKCS7 填充
length = len(result) # 字符串長度
unpadding = ord(result[length - 1]) # 得到最後一個字符串的ASCII
result = result[0:length - unpadding]
result = json.loads(result)['data']['list'] # dupms json.dumps()  dict  格式 json的
# {"鍵":"值"}
​for i in result:
    print(i)

以上就是Python爬蟲實戰JS逆向AES逆向加密爬取的詳細內容,更多關於Python爬取JS逆向AES逆向加密的資料請關註WalkonNet其它相關文章!

推薦閱讀: