做网站要遵守的基本原则,wordpress长图拼接,门户网站模板免费下载,营销网站外包https://match.yuanrenxue.cn/match/2 抓包分析
根据发包加密参数在cookie中
删除cookie带的m参数#xff0c;重新点击其他页面#xff0c;然后使用Fiddler抓包 第一个包请求没有携带m#xff0c;但是后面的请求是附带了m了#xff0c;所以m就是在此之间生成 查看不带… https://match.yuanrenxue.cn/match/2 抓包分析
根据发包加密参数在cookie中
删除cookie带的m参数重新点击其他页面然后使用Fiddler抓包 第一个包请求没有携带m但是后面的请求是附带了m了所以m就是在此之间生成 查看不带m请求的返回数据发现返回是一段js代码很有可能就是这段代码生成了需要的m参数
调试找入口
回到浏览器删除cookie中的m参数然后刷新页面 会出现一个无限debugger点到上层堆栈
[$dbsm_0x4847(\x30\x78\x34\x63, \x58\x23\x32\x39) $dbsm_0x4847(\x30\x78\x31\x62\x31, \x4d\x70\x54\x59) $dbsm_0x4847(\x30\x78\x31\x65\x31, \x6a\x35\x4b\x51) \x6f\x72](_0x280c63[$dbsm_0x4847(\x30\x78\x33\x38\x34, \x24\x71\x37\x75) \x61\x50](_0x280c63[\x50\x4b\x44 \x41\x6b], _0x280c63[$dbsm_0x4847(\x30\x78\x31\x63\x35, \x55\x21\x35\x74) \x54\x68]))[\x63\x61\x6c \x6c](_0x280c63[$dbsm_0x4847(\x30\x78\x31\x31\x37, \x33\x26\x51\x25) \x74\x68]));
结构是很经典的 对debugger的构成字符置空 这时还需要对cookie进行hook 下面是代码在控制台运行得到document…就是运行成功 Object.defineProperty(document, cookie, {set: function (val) {if (val.indexOf(m) ! -1) {debugger;return val;}},
});下面F8跳到下一个断点就会断在set cookie的地方 往上追一层cookie就是在此设置
document[\x63\x6f\x6f $dbsm_0x4847(\x30\x78\x34\x63\x66, \x47\x54\x67\x79)] _0x3edf8c[$dbsm_0x4847(\x30\x78\x31\x64\x63, \x42\x6c\x32\x64) \x64\x50](_0x3edf8c[$dbsm_0x4847(\x30\x78\x33\x32\x61, \x53\x69\x34\x49) \x64\x50](_0x3edf8c[$dbsm_0x4847(\x30\x78\x32\x38\x35, \x2a\x4c\x75\x7a) \x64\x50](_0x3edf8c[$dbsm_0x4847(\x30\x78\x32\x32\x38, \x76\x57\x28\x33) \x53\x6e](_0x3edf8c[\x75\x62\x76 \x70\x67](_0x3edf8c[$dbsm_0x4847(\x30\x78\x37\x30, \x4f\x6b\x35\x62) \x47\x5a](\x6d, _0x3edf8c[$dbsm_0x4847(\x30\x78\x31\x38\x39, \x67\x6d\x53\x63) \x4d\x4d](_0x3823cf)), \x3d), _0x3edf8c[$dbsm_0x4847(\x30\x78\x31\x61\x31, \x53\x65\x23\x7a) \x48\x52](_0x132a93, _0x50b846)), \x7c), _0x50b846), _0x3edf8c[\x76\x55\x45 \x6a\x7a]);根据代码结构一层层在控制台里面输出根据下面过程就可以发现
加密函数为 _0x132a93传入的时间戳格式为1717640384000数字类型
记住输入和输出
1717640384000
4ef8eeb14aa14c728c4ddd25012169e9扣代码
下面就是扣代码了。扣代码这一块还是比较麻烦的我几乎干了整整一天当然我也是新手刚开始弄可能花时间比较多。还是先来分析一下代码结构不然很难扣下去
先把所有代码复制一下进行解混淆操作 猿人学官方解混淆地址 模式一般我这么用 结构如上图
大数组存放字符里面的字符作为取值用的键用来混淆操作
搜索加密函数_0x132a93发现在自执行函数里面 我试过直接把这个函数复制出来但是他会用到很多自执行函数里面的属性方法等都扣出来就好烦不知道能不能在这里面搞个接口出来我这次也试一下吧 window[encode] _0x132a93;运行试试看 下面的内容是按照这种做法来的实验成功了可以通过window存下这个函数 还有另一种做法也是我最开始的做法下面我没写出可以自行尝试就是把两个自执行函数内部的内容直接拉到全局变量中下面有一个简单示例这样可以直接调用加密函数否则会出现找不到函数的情况。 (function f() {var a 这里是自执行函数内部;function insideFunction() {return 这是内部方法;}
})();// 直接改成var a 这里是自执行函数内部;
function insideFunction() {return 这是内部方法;
}var window global; // 先定义一个全局变量用来放函数
// ...
console.log(window[encode](1717640384000));
运行发现会被一直卡住这说明哪里被检测了大概率是格式化检测防止调试的只需要对代码进行压缩。但是压缩之前需要按照标准格式需要添加的地方必须要有 菜鸟JS压缩工具 压缩之后就可以运行了提示要补环境
navigator is not defined
var navigator {};补充放开头 新的报错大概意思是在给setInterval提供的函数参数是不可执行的既然是setInterval里面估计不是什么好东西加密不可能需要定时加密一定是干扰手段。在最开始就把setInterval置空掉。
var setIntervalfunction(){return 0;};再次运行提示补环境
ReferenceError: document is not defined
ReferenceError: location is not definedvar document {};
var location {};
再次运行提示TypeError: location[($dbsm_0x4847(...) $dbsm_0x4847(...))] is not a function 这说明用到了location里面的一个函数。在原来网站查看发现是刷新页面的函数这里不需要直接删掉了。 把location[$dbsm_0x4847(\x30\x78\x33\x36\x64,\x2a\x4c\x75\x7a)$dbsm_0x4847(\x30\x78\x31\x38,\x6a\x35\x4b\x51)]()整句删除 再次运行又出现报错 这个报错是在console.log中的很有可能是对输出函数做了手脚防止我们输出查看。 解决办法是先备份然后最后打印也使用备份
var logconsole.log;
// ...
log(window[encode](1717640384000));再次执行成果输出加密数据 而且跟之前记录的数据一样
下面构建完整SDK
function getMSdk() {let timestamp Date.now();timestamp Math.floor(timestamp / 1000) * 1000;encodeString window[encode](timestamp);return encodeString | timestamp;
};然后再次压缩代码注意不要格式化。 var logconsole.log;var location{};var document{};var setIntervalfunction(){return 0};var navigator{};var windowglobal;
// ...
function getMSdk(){let timestampDate.now();timestampMath.floor(timestamp/1000)*1000;encodeStringwindow[encode](timestamp);return encodeString|timestamp}代码太长完整的放不上来上面过程写的很清楚。
下面构建Python代码 如果要用的话cookie的信息改成自己的 import execjs
import requestsheaders {authority: match.yuanrenxue.cn,accept: application/json, text/javascript, */*; q0.01,accept-language: zh-CN,zh;q0.9,referer: https://match.yuanrenxue.cn/match/2,sec-ch-ua: \Chromium\;v\122\, \Not(A:Brand\;v\24\, \Google Chrome\;v\122\,sec-ch-ua-mobile: ?0,sec-ch-ua-platform: \Windows\,sec-fetch-dest: empty,sec-fetch-mode: cors,sec-fetch-site: same-origin,user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36,x-requested-with: XMLHttpRequest
}ret 0for pageIndex in range(1, 6):js_code open(match2Sdk.js, moder, encodingutf-8).read()js_compile execjs.compile(js_code)m js_compile.call(getMSdk)cookies {sessionid: zwy0uz1vd0ge1e42310i34b37584m1lj,Hm_lvt_c99546cf032aaa5a679230de9a95c7db: 1717578931,1717603706,no-alert3: true,Hm_lvt_9bcbda9cbf86757998a2339a0437208e: 1717578942,1717639423,Hm_lpvt_9bcbda9cbf86757998a2339a0437208e: 1717639423,m: m,Hm_lpvt_c99546cf032aaa5a679230de9a95c7db: 1717645785}url https://match.yuanrenxue.cn/api/match/2params {page: pageIndex}response requests.get(url, headersheaders, cookiescookies, paramsparams)print(response.json())data response.json()[data]for item in data:ret item[value]print(ret)