今日份的網站ide
aHR0cDovL3d3dy5kZGt5LmNvbS9jb21tb2RpdHkuaHRtbD9kZGt5Y2FjaGU9YTdiMTllODc5ZDJmMmYyNzlkMzU2ZjVhZmE2ZDVjZmY=網站
這個網站的加密比較簡單,是那種新手作過一遍就對 JS 逆向充滿信心的小練手。加密
先分析請求,看看須要的參數有沒什麼搞頭【圖1-1】3d
圖1-1調試
比較明顯的是 sign 其餘的參數好像沒有什麼特別的地方。code
先定位 sign 的位置【圖1-2】orm
圖1-2blog
直接搜索參數就看到結果了,點擊搜索的結果文件在文件內再搜索一次,能夠看到有 3 個結果。【圖1-3】md5
圖1-3get
到這裏就看到 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】這樣。
圖1-4
從新請求一下,就進入到咱們打的斷點裏了,咱們能夠經過在 console 中打印變量的值來理解邏輯。【圖1-5】
圖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 請求就完事了。
[圖1-6]
圖1-6
EOF