centos 7安裝wordpress上海seo排名
文章目錄
- 請求流程
- 請求參數(shù)
- 加密參數(shù)定位
- r() 方法
- z() 方法
- 加密參數(shù)還原
- JJENCOde js代碼加密
- 環(huán)境檢測
- _n("jsencrypt")
- 1
- 2
- 3
- 4
- 5
- 計算全部中獎的總金額
- 請求代碼
- 注意
請求流程
請求參數(shù)
打開 調(diào)試工具,查看數(shù)據(jù)接口 https://match.yuanrenxue.cn/api/match/6
請求參數(shù)攜帶了 m,q 參數(shù)
q參數(shù) “點擊次數(shù)” + “-” + “時間戳” + “|”
m參數(shù)為加密值
cookie 沒有加密字段
加密參數(shù)定位
查看請求堆棧
對應(yīng)的請求參數(shù)
t 在 node 中直接聲明即可
window.i = ''; // 初始值 ''
request = function() {t = Date.parse(new Date()); // 時間戳,直接在 node 中定義即可var list = {"page": window.page, // 對應(yīng)的頁碼信息// t 在上方有聲明// window.o 是點擊頁面頁碼的次數(shù),為 1"m": r(t, window.o),// windiw.i = windiw.i + window.o + '-' + t + "|""q": window.i += window.o + '-' + t + "|",};window.o += 1; // 頁面每請求完一次之后 window.o會自增
r() 方法
上斷點刷新頁面在對應(yīng)的位置斷住,查看 r 方法
// window.o 初始值為 1
// 每點擊一次 window.o 就會自增 1
// 初始值為 1, 點擊 4 次頁碼后就會執(zhí)行 if 塊里的代碼
if (window.o >= 6) {alert('不要戳這么多下,人家好痛嘛~'); // 彈窗location.reload(); // 刷新頁面
}
z() 方法
var n = _n(“jsencrypt”); // _n 是在上方自執(zhí)行函數(shù)中賦值的
加密參數(shù)還原
分析 delect.js 文件
JJENCOde js代碼加密
在文件的開頭有很長的一段 JJENCODE 加密的代碼
仔細觀察這段 JJencode 代碼
前面是給變量賦值的操作
最后一行代碼是將前面賦值的變量加起來并執(zhí)行
將最后一行代碼放在瀏覽器執(zhí)行
在 JJENCODE 最后一行代碼打上斷點并刷新頁面
將代碼最后一行的括號刪除
這行代碼實際上生成了一個 自執(zhí)行函數(shù)
給 window.o 賦予了初始值 1
這段代碼在 node 中并不用扣
環(huán)境檢測
整個加密的值是在 _n 方法中生成的
function z(pwd, time) {var n = _n("jsencrypt"); // 主要是靠 _n 加載模塊var g = (new n); // new n 方法var r = g.encode(pwd, time); // 取 n 方法中的 encode 進行加密return r; // 將加密的值返回
}
_n(“jsencrypt”)
前面有說到 _n 是在一個 自執(zhí)行函數(shù)中賦值的
將自執(zhí)行函數(shù) copy到本地, 模擬執(zhí)行
1
window = {};
2
xe = [][(![] + [])[!+[] + !![] + !![]] + ([] + {})[+!![]] + (!![] + [])[+!![]] + (!![] + [])[+[]]][([] + {})
3
window.addEventListener ? window.addEventListener(“mousemove”, Be, !1) : window.attachEvent && window.attachEvent(“onmousemove”, Be)
4
s = navigator
5
r = t || navigator && navigator.userAgent,
在 node 文件
window = global;
navigator = {userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36'
};// 這里是瀏覽器中的自執(zhí)行函數(shù)// 這里是自己定義的方法,方便 python 調(diào)用
function sdk(time, clickNum){// _n 加載模塊let n = _n("jsencrypt")// 模擬瀏覽器執(zhí)行函數(shù)let g = new n;return g.encode(time, clickNum);
}
計算全部中獎的總金額
接口只返回三等獎的金額
計算 1,2,3 等獎的值,并除以三等獎
(142620 + 76064 + 9508) / 9508 = 24
(47730 + 25456 + 3182) / 3182 = 24
(131085 + 69912 + 8739) / 8739 = 24
得出 3等獎的金額 * 24 就為全部中獎的金額
請求代碼
python 代碼
import requests
import execjs
import timeheaders = {"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36",
}
cookies = {"sessionid": "你的sessionid",
}def call_js(file_name, func_name, *args):with open(file_name, mode='r', encoding='utf-8') as f:js_code = execjs.compile(f.read())return js_code.call(func_name, *args)def send_match6(page, click):url = "https://match.yuanrenxue.cn/api/match/6"time_ = int(str(int(time.time() * 1000))[:10] + '000')q = str(click) + '-' + str(time_) + '|'m = call_js('6.js', 'sdk', time_, click)params = {"page": f'{page}',"m": m,"q": q}response = requests.get(url, headers=headers, cookies=cookies, params=params)print(params)print(response.text)print('==================================================')if __name__ == '__main__':str_concat = ''click_Nums = 1for page in range(1, 6):concat = send_match6(page, click_Nums)click_Nums += 1str_concat = concat
注意
瀏覽器請求的時候,q 參數(shù)值是自增的
在 python 中,不需要自增,自增反而會被檢測到
大概率是瀏覽器自增了,但是發(fā)送給服務(wù)器的數(shù)據(jù)只是這一次生成的值,并沒有發(fā)送拼接了的值