centos 7安裝wordpress上海seo排名
文章目錄
- 請(qǐng)求流程
- 請(qǐng)求參數(shù)
- 加密參數(shù)定位
- r() 方法
- z() 方法
- 加密參數(shù)還原
- JJENCOde js代碼加密
- 環(huán)境檢測(cè)
- _n("jsencrypt")
- 1
- 2
- 3
- 4
- 5
- 計(jì)算全部中獎(jiǎng)的總金額
- 請(qǐng)求代碼
- 注意
請(qǐng)求流程
請(qǐng)求參數(shù)
打開 調(diào)試工具,查看數(shù)據(jù)接口 https://match.yuanrenxue.cn/api/match/6
請(qǐng)求參數(shù)攜帶了 m,q 參數(shù)
q參數(shù) “點(diǎn)擊次數(shù)” + “-” + “時(shí)間戳” + “|”
m參數(shù)為加密值
cookie 沒有加密字段
加密參數(shù)定位
查看請(qǐng)求堆棧
對(duì)應(yīng)的請(qǐng)求參數(shù)
t 在 node 中直接聲明即可
window.i = ''; // 初始值 ''
request = function() {t = Date.parse(new Date()); // 時(shí)間戳,直接在 node 中定義即可var list = {"page": window.page, // 對(duì)應(yīng)的頁(yè)碼信息// t 在上方有聲明// window.o 是點(diǎn)擊頁(yè)面頁(yè)碼的次數(shù),為 1"m": r(t, window.o),// windiw.i = windiw.i + window.o + '-' + t + "|""q": window.i += window.o + '-' + t + "|",};window.o += 1; // 頁(yè)面每請(qǐng)求完一次之后 window.o會(huì)自增
r() 方法
上斷點(diǎn)刷新頁(yè)面在對(duì)應(yīng)的位置斷住,查看 r 方法
// window.o 初始值為 1
// 每點(diǎn)擊一次 window.o 就會(huì)自增 1
// 初始值為 1, 點(diǎn)擊 4 次頁(yè)碼后就會(huì)執(zhí)行 if 塊里的代碼
if (window.o >= 6) {alert('不要戳這么多下,人家好痛嘛~'); // 彈窗location.reload(); // 刷新頁(yè)面
}
z() 方法
var n = _n(“jsencrypt”); // _n 是在上方自執(zhí)行函數(shù)中賦值的
加密參數(shù)還原
分析 delect.js 文件
JJENCOde js代碼加密
在文件的開頭有很長(zhǎng)的一段 JJENCODE 加密的代碼
仔細(xì)觀察這段 JJencode 代碼
前面是給變量賦值的操作
最后一行代碼是將前面賦值的變量加起來(lái)并執(zhí)行
將最后一行代碼放在瀏覽器執(zhí)行
在 JJENCODE 最后一行代碼打上斷點(diǎn)并刷新頁(yè)面
將代碼最后一行的括號(hào)刪除
這行代碼實(shí)際上生成了一個(gè) 自執(zhí)行函數(shù)
給 window.o 賦予了初始值 1
這段代碼在 node 中并不用扣
環(huán)境檢測(cè)
整個(gè)加密的值是在 _n 方法中生成的
function z(pwd, time) {var n = _n("jsencrypt"); // 主要是靠 _n 加載模塊var g = (new n); // new n 方法var r = g.encode(pwd, time); // 取 n 方法中的 encode 進(jìn)行加密return r; // 將加密的值返回
}
_n(“jsencrypt”)
前面有說(shuō)到 _n 是在一個(gè) 自執(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);
}
計(jì)算全部中獎(jiǎng)的總金額
接口只返回三等獎(jiǎng)的金額
計(jì)算 1,2,3 等獎(jiǎng)的值,并除以三等獎(jiǎng)
(142620 + 76064 + 9508) / 9508 = 24
(47730 + 25456 + 3182) / 3182 = 24
(131085 + 69912 + 8739) / 8739 = 24
得出 3等獎(jiǎng)的金額 * 24 就為全部中獎(jiǎng)的金額
請(qǐng)求代碼
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ǐng)求的時(shí)候,q 參數(shù)值是自增的
在 python 中,不需要自增,自增反而會(huì)被檢測(cè)到
大概率是瀏覽器自增了,但是發(fā)送給服務(wù)器的數(shù)據(jù)只是這一次生成的值,并沒有發(fā)送拼接了的值