注意!!!!某数据网站逆向实例仅作为学习案例,禁止其他个人以及团体做谋利用途!!!!
案例分析
第一步:分析请求和响应内容。该网站任何一请求和内容都不可直接阅读
第二步: 通过分析(至于咋分析的,全凭经验)。个人通过加密内容对全局进行AES关键词搜索,并未查到。因此在搜索 JSON.parse 可查到多个。筛选后选择 可传入object对象的。或者此网站 可以对 请求参数的payload 和sig 进行确定。总之我是凭经验
第三步:打断点,通过json.parse查找 可以对关键处打断点。刷新后可以看到一些重要信息。可以在console 中进行查看。下图所示可以看到
t :是第一次请求
s: 是加密前的参数
f:是加密后的参数一
p: 是加密后的参数二
第四步:第一次请求后,响应内容加载和解析
l:是第一次请求后加密响应内容
v:是第一次请求后解密响应内容
第五步:第二次请求后,响应和内容
t :是第一次请求
s: 是加密前的参数
f:是加密后的参数一
p: 是加密后的参数二
第六步:将鼠标放在object 后面上能够看到调用的函数。出现提示点进去即可查看,加密解密内核。例如:e2 和 d1 该网站调用了一些,不止于给出的例子。活学活用!最后v 是解密后的内容
最后加密解密
鄙人能力有限仅在js 文件中测试出来结果未能将其改写成python文章来源:https://www.toymoban.com/news/detail-516431.html
var md5 = require('md5');
var _p = "W5D80NFZHAYB8EUI2T649RT2MNRMVE2O";
var _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
function d1(e) {
var t, n, r, o, i, a, c = "", u = 0;
for (e = e.replace(/[^A-Za-z0-9\+\/\=]/g, ""); u < e.length; )
t = _keyStr.indexOf(e.charAt(u++)) << 2 | (o = _keyStr.indexOf(e.charAt(u++))) >> 4,
n = (15 & o) << 4 | (i = _keyStr.indexOf(e.charAt(u++))) >> 2,
r = (3 & i) << 6 | (a = _keyStr.indexOf(e.charAt(u++))),
c += String.fromCharCode(t),
64 != i && (c += String.fromCharCode(n)),
64 != a && (c += String.fromCharCode(r));
return c
}
function _u_d(e) {
for (var t = "", n = 0, r = 0, o = 0, i = 0; n < e.length; )
(r = e.charCodeAt(n)) < 128 ? (t += String.fromCharCode(r),
n++) : r > 191 && r < 224 ? (o = e.charCodeAt(n + 1),
t += String.fromCharCode((31 & r) << 6 | 63 & o),
n += 2) : (o = e.charCodeAt(n + 1),
i = e.charCodeAt(n + 2),
t += String.fromCharCode((15 & r) << 12 | (63 & o) << 6 | 63 & i),
n += 3);
return t
}
function d2(e) {
for (var t = "", n = 0; n < e.length; n++) {
var r = _p.charCodeAt(n % _p.length);
t += String.fromCharCode(e.charCodeAt(n) ^ r)
}
return t = _u_d(t)
}
function _u_e(e) {
if (null == e)
return null;
e = e.replace(/\r\n/g, "\n");
for (var t = "", n = 0; n < e.length; n++) {
var r = e.charCodeAt(n);
r < 128 ? t += String.fromCharCode(r) : r > 127 && r < 2048 ? (t += String.fromCharCode(r >> 6 | 192),
t += String.fromCharCode(63 & r | 128)) : (t += String.fromCharCode(r >> 12 | 224),
t += String.fromCharCode(r >> 6 & 63 | 128),
t += String.fromCharCode(63 & r | 128))
}
return t
}
function e1(e) {
if (null == e)
return null;
for (var t, n, r, o, i, a, c, u = "", s = 0; s < e.length; )
o = (t = e.charCodeAt(s++)) >> 2,
i = (3 & t) << 4 | (n = e.charCodeAt(s++)) >> 4,
a = (15 & n) << 2 | (r = e.charCodeAt(s++)) >> 6,
c = 63 & r,
isNaN(n) ? a = c = 64 : isNaN(r) && (c = 64),
u = u + _keyStr.charAt(o) + _keyStr.charAt(i) + _keyStr.charAt(a) + _keyStr.charAt(c);
return u
}
function e2(e) {
if (null == (e = _u_e(e)))
return null;
for (var t = "", n = 0; n < e.length; n++) {
var r = _p.charCodeAt(n % _p.length);
t += String.fromCharCode(e.charCodeAt(n) ^ r)
}
return t
}
function sig(e) {
return md5(e + _p).toUpperCase()
}
function s1(n) {
var s = JSON.stringify(n)
, l = JSON.parse(s);
var f = e1(e2(JSON.stringify(l.payload)))
,p = sig(f);
l.payload = f
l.sig = p
return l;
}
n = {}
// l = s1(n)
// console.log(l)
// l1 = d1(l.payload)
// l2 = d2(l1)
// console.log(l2)
仅作为笔记记录,如有问题请各位大佬来指导文章来源地址https://www.toymoban.com/news/detail-516431.html
到了这里,关于python爬虫-逆向实例小记-2的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!