局域网创建网站,网站品牌形象设计怎么做,开发公司是生产经营单位吗,网站代备案需要多少钱文章目录 请求流程请求参数 加密参数定位r() 方法z() 方法 加密参数还原JJENCOde js代码加密环境检测_n(jsencrypt)12345 计算全部中奖的总金额请求代码注意 请求流程
请求参数 打开 调试工具#xff0c;查看数据接口 https://match.yuanrenxue.cn/api/match/6 请… 文章目录 请求流程请求参数 加密参数定位r() 方法z() 方法 加密参数还原JJENCOde js代码加密环境检测_n(jsencrypt)12345 计算全部中奖的总金额请求代码注意 请求流程
请求参数 打开 调试工具查看数据接口 https://match.yuanrenxue.cn/api/match/6 请求参数携带了 mq 参数 q参数 “点击次数” “-” “时间戳” “|” m参数为加密值 cookie 没有加密字段 加密参数定位 查看请求堆栈 对应的请求参数 t 在 node 中直接声明即可 window.i ; // 初始值
request function() {t Date.parse(new Date()); // 时间戳直接在 node 中定义即可var list {page: window.page, // 对应的页码信息// t 在上方有声明// window.o 是点击页面页码的次数,为 1m: r(t, window.o),// windiw.i windiw.i window.o - t |q: window.i window.o - t |,};window.o 1; // 页面每请求完一次之后 window.o会自增r() 方法 上断点刷新页面在对应的位置断住查看 r 方法 // window.o 初始值为 1
// 每点击一次 window.o 就会自增 1
// 初始值为 1, 点击 4 次页码后就会执行 if 块里的代码
if (window.o 6) {alert(不要戳这么多下人家好痛嘛~); // 弹窗location.reload(); // 刷新页面
}z() 方法 var n _n(“jsencrypt”); // _n 是在上方自执行函数中赋值的 加密参数还原 分析 delect.js 文件 JJENCOde js代码加密 在文件的开头有很长的一段 JJENCODE 加密的代码 仔细观察这段 JJencode 代码 前面是给变量赋值的操作 最后一行代码是将前面赋值的变量加起来并执行 将最后一行代码放在浏览器执行 在 JJENCODE 最后一行代码打上断点并刷新页面 将代码最后一行的括号删除 这行代码实际上生成了一个 自执行函数 给 window.o 赋予了初始值 1 这段代码在 node 中并不用扣 环境检测 整个加密的值是在 _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 是在一个 自执行函数中赋值的 将自执行函数 copy到本地, 模拟执行 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
};// 这里是浏览器中的自执行函数// 这里是自己定义的方法方便 python 调用
function sdk(time, clickNum){// _n 加载模块let n _n(jsencrypt)// 模拟浏览器执行函数let g new n;return g.encode(time, clickNum);
}计算全部中奖的总金额 接口只返回三等奖的金额 计算 123 等奖的值并除以三等奖 (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, moder, encodingutf-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/6time_ 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, headersheaders, cookiescookies, paramsparams)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 参数值是自增的
在 python 中不需要自增自增反而会被检测到 大概率是浏览器自增了但是发送给服务器的数据只是这一次生成的值并没有发送拼接了的值