Python爬蟲進階必備 | XX快藥 sign 加密分析與加密邏輯複寫

Python爬蟲進階必備 | XX快藥 sign 加密分析與加密邏輯複寫

今日份的網站

aHR0cDovL3d3dy5kZGt5LmNvbS9jb21tb2RpdHkuaHRtbD9kZGt5Y2FjaGU9YTdiMTllODc5ZDJmMmYyNzlkMzU2ZjVhZmE2ZDVjZmY=

這個網站的加密比較簡單,是那種新手做過一遍就對 JS 逆向充滿信心的小練手。

分析請求

先分析請求,看看需要的參數有沒什麼搞頭【圖1-1】

Python爬蟲進階必備 | XX快藥 sign 加密分析與加密邏輯複寫

圖1-1

比較明顯的是 sign 其他的參數好像沒有什麼特別的地方。

先定位 sign 的位置【圖1-2】

Python爬蟲進階必備 | XX快藥 sign 加密分析與加密邏輯複寫

圖1-2

直接搜索參數就看到結果了,點擊搜索的結果文件在文件內再搜索一次,可以看到有 3 個結果。【圖1-3】

Python爬蟲進階必備 | XX快藥 sign 加密分析與加密邏輯複寫

圖1-3

到這裏就看到 sign 的加密了。

接下來繼續分析邏輯,這裏的 sign 值是 y,y的值是通過MD5(f)獲取的,而f又是t.get("method") + p + r的結果,經過一通分析,可以的得到下面的邏輯:

var l = t.keys().sort(), p = "";
            l.length;
for (var g in l) {
  var m = l[g];
  p += m + t.get(m)
}
sign = md5(t.get("method") + p + r)

接下來只需要把我們不知道的值通過斷點的方式調試出來,這個加密我們就完成解密了。

所以先給不知道的值打上斷點,不清楚就打上斷點不要怕麻煩,像【圖1-4】這樣。

Python爬蟲進階必備 | XX快藥 sign 加密分析與加密邏輯複寫

圖1-4

重新請求一下,就進入到我們打的斷點裏了,我們可以通過在 console 中打印變量的值來理解邏輯。【圖1-5】

Python爬蟲進階必備 | XX快藥 sign 加密分析與加密邏輯複寫
圖1-5

明白需要的變量的值之後,我們就可以開始扣取 JS 或者用 Python 複寫加密的邏輯了。

因爲這次的加密比較簡單,我們試試用 Python 複寫一遍加密。(主要是 Python 的 md5 用起來蠻舒服的)

這裏的邏輯比較簡單沒啥好分析的,我就直接上代碼了。

import time
from hashlib import md5
def get_sign():
    timeStamp = time.time()
    localTime = time.localtime(timeStamp)
    strTime = time.strftime("%Y-%m-%d %H:%M:%S", localTime)

    l = ["method", "orderTypeId", "orgcode", "pageNo", "pageSize", "plat", "platform", "shopId", "t", "v",
         "versionName"]
    t = {
        'method': 'ddsy.product.query.orgcode.product.list.b2c',
        'orderTypeId': '0',
        'orgcode': '010502,010503,010504,010505,010506,010507',
        'pageNo': '1',
        'pageSize': '100',
        'plat': 'H5',
        'platform': 'H5',
        'shopId': '-1',
        # 't': '2019-9-23 22:4:16',
        't': '{}'.format(strTime),
        'v': '1.0',
        'versionName': '3.2.0'
    }
    p = ''
    for i in range(0, 11):
        m = l[i]
        p += m + t.get(m)
    f = t['method'] + p + '6C57AB91A1308E26B797F4CD382AC79D'
    print(f)
    sign = md5value(f).upper()
    print(sign)
    return sign

def md5value(s):
    a = md5(s.encode()).hexdigest()
    return a

到這裏其實就沒有什麼難度了,直接帶入 sign 請求就完事了。
Python爬蟲進階必備 | XX快藥 sign 加密分析與加密邏輯複寫

[圖1-6]
圖1-6

EOF

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章