廊坊网站制作,青岛专业做网站的,个人网站做外链方法,建筑公司网页一、数据接口分析
主页地址#xff1a;猿人学第四题
1、抓包
通过抓包可以发现数据接口是api/match/4
2、判断是否有加密参数
请求参数是否加密#xff1f; 无请求头是否加密#xff1f; 无响应是否加密#xff1f; 响应数据无加密#xff0c;但是返回的却是html代码…一、数据接口分析
主页地址猿人学第四题
1、抓包
通过抓包可以发现数据接口是api/match/4
2、判断是否有加密参数
请求参数是否加密 无请求头是否加密 无响应是否加密 响应数据无加密但是返回的却是html代码cookie是否加密 无
二、处理位置定位
1、看启动器
查看启动器发现有一个request调用堆栈点进去查看 可以发现此处是ajax请求对响应的处理就在下方成功的回调函数中通过分析可以得出对响应内容的处理是根据响应中的key和value进行处理生成一个j_key然后将响应中class属性为j_key的图片隐藏将剩下的其他图片进行展示。
三、获取数据
将定位到的j_key生成代码扣出来然后缺啥补啥将代码补全。 源代码
var hexcase 0;
var b64pad ;
var chrsz 8;function safe_add(x, y) {var lsw (x 0xFFFF) (y 0xFFFF);var msw (x 16) (y 16) (lsw 16);return (msw 16) | (lsw 0xFFFF)
}function bit_rol(num, cnt) {return (num cnt) | (num (32 - cnt))
}function md5_cmn(q, a, b, x, s, t) {return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b)
}function md5_ff(a, b, c, d, x, s, t) {return md5_cmn((b c) | ((~b) d), a, b, x, s, t)
}function md5_gg(a, b, c, d, x, s, t) {return md5_cmn((b d) | (c (~d)), a, b, x, s, t)
}function md5_hh(a, b, c, d, x, s, t) {return md5_cmn(b ^ c ^ d, a, b, x, s, t)
}function md5_ii(a, b, c, d, x, s, t) {return md5_cmn(c ^ (b | (~d)), a, b, x, s, t)
}function str2binl(str) {var bin Array();var mask (1 chrsz) - 1;for (var i 0; i str.length * chrsz; i chrsz)bin[i 5] | (str.charCodeAt(i / chrsz) mask) (i % 32);return bin
}function core_md5(x, len) {x[len 5] | 0x80 ((len) % 32);x[(((len 64) 9) 4) 14] len;var a 1732584193;var b -271733879;var c -1732584194;var d 271733878;for (var i 0; i x.length; i 16) {var olda a;var oldb b;var oldc c;var oldd d;a md5_ff(a, b, c, d, x[i 0], 7, -680876936);d md5_ff(d, a, b, c, x[i 1], 12, -389564586);c md5_ff(c, d, a, b, x[i 2], 17, 606105819);b md5_ff(b, c, d, a, x[i 3], 22, -1044525330);a md5_ff(a, b, c, d, x[i 4], 7, -176418897);d md5_ff(d, a, b, c, x[i 5], 12, 1200080426);c md5_ff(c, d, a, b, x[i 6], 17, -1473231341);b md5_ff(b, c, d, a, x[i 7], 22, -45705983);a md5_ff(a, b, c, d, x[i 8], 7, 1770035416);d md5_ff(d, a, b, c, x[i 9], 12, -1958414417);c md5_ff(c, d, a, b, x[i 10], 17, -42063);b md5_ff(b, c, d, a, x[i 11], 22, -1990404162);a md5_ff(a, b, c, d, x[i 12], 7, 1804603682);d md5_ff(d, a, b, c, x[i 13], 12, -40341101);c md5_ff(c, d, a, b, x[i 14], 17, -1502002290);b md5_ff(b, c, d, a, x[i 15], 22, 1236535329);a md5_gg(a, b, c, d, x[i 1], 5, -165796510);d md5_gg(d, a, b, c, x[i 6], 9, -1069501632);c md5_gg(c, d, a, b, x[i 11], 14, 643717713);b md5_gg(b, c, d, a, x[i 0], 20, -373897302);a md5_gg(a, b, c, d, x[i 5], 5, -701558691);d md5_gg(d, a, b, c, x[i 10], 9, 38016083);c md5_gg(c, d, a, b, x[i 15], 14, -660478335);b md5_gg(b, c, d, a, x[i 4], 20, -405537848);a md5_gg(a, b, c, d, x[i 9], 5, 568446438);d md5_gg(d, a, b, c, x[i 14], 9, -1019803690);c md5_gg(c, d, a, b, x[i 3], 14, -187363961);b md5_gg(b, c, d, a, x[i 8], 20, 1163531501);a md5_gg(a, b, c, d, x[i 13], 5, -1444681467);d md5_gg(d, a, b, c, x[i 2], 9, -51403784);c md5_gg(c, d, a, b, x[i 7], 14, 1735328473);b md5_gg(b, c, d, a, x[i 12], 20, -1926607734);a md5_hh(a, b, c, d, x[i 5], 4, -378558);d md5_hh(d, a, b, c, x[i 8], 11, -2022574463);c md5_hh(c, d, a, b, x[i 11], 16, 1839030562);b md5_hh(b, c, d, a, x[i 14], 23, -35309556);a md5_hh(a, b, c, d, x[i 1], 4, -1530992060);d md5_hh(d, a, b, c, x[i 4], 11, 1272893353);c md5_hh(c, d, a, b, x[i 7], 16, -155497632);b md5_hh(b, c, d, a, x[i 10], 23, -1094730640);a md5_hh(a, b, c, d, x[i 13], 4, 681279174);d md5_hh(d, a, b, c, x[i 0], 11, -358537222);c md5_hh(c, d, a, b, x[i 3], 16, -722521979);b md5_hh(b, c, d, a, x[i 6], 23, 76029189);a md5_hh(a, b, c, d, x[i 9], 4, -640364487);d md5_hh(d, a, b, c, x[i 12], 11, -421815835);c md5_hh(c, d, a, b, x[i 15], 16, 530742520);b md5_hh(b, c, d, a, x[i 2], 23, -995338651);a md5_ii(a, b, c, d, x[i 0], 6, -198630844);d md5_ii(d, a, b, c, x[i 7], 10, 1126891415);c md5_ii(c, d, a, b, x[i 14], 15, -1416354905);b md5_ii(b, c, d, a, x[i 5], 21, -57434055);a md5_ii(a, b, c, d, x[i 12], 6, 1700485571);d md5_ii(d, a, b, c, x[i 3], 10, -1894986606);c md5_ii(c, d, a, b, x[i 10], 15, -1051523);b md5_ii(b, c, d, a, x[i 1], 21, -2054922799);a md5_ii(a, b, c, d, x[i 8], 6, 1873313359);d md5_ii(d, a, b, c, x[i 15], 10, -30611744);c md5_ii(c, d, a, b, x[i 6], 15, -1560198380);b md5_ii(b, c, d, a, x[i 13], 21, 1309151649);a md5_ii(a, b, c, d, x[i 4], 6, -145523070);d md5_ii(d, a, b, c, x[i 11], 10, -1120210379);c md5_ii(c, d, a, b, x[i 2], 15, 718787259);b md5_ii(b, c, d, a, x[i 9], 21, -343485551);a safe_add(a, olda);b safe_add(b, oldb);c safe_add(c, oldc);d safe_add(d, oldd)}return Array(a, b, c, d)
}function binl2hex(binarray) {var hex_tab hexcase ? 0123456789ABCDEF : 0123456789abcdef;var str ;for (var i 0; i binarray.length * 4; i) {str hex_tab.charAt((binarray[i 2] ((i % 4) * 8 4)) 0xF) hex_tab.charAt((binarray[i 2] ((i % 4) * 8)) 0xF)}return str
}function hex_md5(s) {return binl2hex(core_md5(str2binl(s), s.length * chrsz))
}function get_key(key, value) {var j_key hex_md5(btoa(key value).replace(//g, ))return j_key
}此时虽然我们已经可以生成j_key了但是还有一个难题就是数据是图片如何才能获取到图片拼接的数字。 原本我是准备将base64转成图片然后识别图片中的数字进行拼接然后相加但是有一个问题就是响应返回的图片中会使用styleleft:11.5px重新排序我没有想到很好的办法去处理。最后我就只能是将响应的内容写入到html文件中进行展示然后自己再去计算展示出的所有数字的和。如果有大佬有好的办法可以私信或者评论教我一下。 python源代码 Email912917367qq.com
Date: 2023/8/1 11:08import execjs
import lxml.etree
from lxml.html import tostring
import requestsheaders {authority: match.yuanrenxue.cn,referer: https://match.yuanrenxue.cn/match/4,user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36,
}
url https://match.yuanrenxue.cn/api/match/4with open(get_key.js, r, encodingutf-8) as f:js_obj execjs.compile(f.read())for page in range(1, 6):params {page: str(page)}if page 4:headers[user-agent] yuanrenxue.projectresponse requests.get(url, headersheaders, paramsparams)data response.json()key js_obj.call(get_key, data[key], data[value])html_obj lxml.etree.HTML(data[info])td_list html_obj.xpath(//td)with open(img.html, a) as f:f.write(tr)for td_index, td in enumerate(td_list):f.write(td)img_list td.xpath(./img)for img_index, img in enumerate(img_list):if key in img.xpath(./class)[0]:continueimg_str tostring(img, encodingutf-8).decode(utf-8)f.write(img_str)f.write(/td)f.write(/tr)