打开网站–企名片
主要是破解企业数据列表的加密,红框圈起来的
链接:企名片
直接请求网站,response 响应的信息里面没有想要的数据,那应该就是js动态加载的数据,所以直接点击 XHR 你就会看到
这两个请求响应的信息里面都有一个超长的加密字符串,所以大胆猜测一下,应该就是我们需要的数据,其他的点进去啥也没有。
然后怎么去解析这个参数呢?
解析加密数据 encrypt_data
最简单,直接的就是直接根据 encrypt_data 这个键直接去 js 中搜索,最后会在下图中找到
下面就是打断点,刷新页面,一步一步去找到这个在 js 中是怎样解析的。这是最直接的办法,下面说一下正常的流程,因为是 post 请求,所以就可以打 XHR 断点,怎么打这个断点呢
在 source 中选择 XHR BreakPoint,点击它右上角的加号,在框内填入要打断的 URL,或者唯一的关键词就行,我填的 productListVIP, 然后刷新页面, 一步一步去运行,找到解密的位置,直接抠出 js 执行 js 而不用去纠结它具体是咋解密的,只需要结果。
打断点找位置
打断点的时候最好在object前也打个断点,不然有时候就直接结束了,没有进入断点。
刷新,点击下一步
会找到这个方法,找到这基本就差不多了,可以看到方法中调用了一个 s 方法,s 方法中6个参数, 有5个是固定的,所以这就更简单了。只需要去找一下这个decode 方法
找到了,只需传一个t ,而这个t 就是我们加密字符串
再回头找好 s 方法,直接将这几个 js 抠出来,使用 Python 执行 js 的库,执行 js 就 OK 了
o 方法返回的是一个 object 对象,在 Python 中不能正确接受,所以将其转换为 base64 返回。
所以需要稍微改一下
function my_o(t) {
return new Buffer(s("5e5062e82f15fe4ca9d24bc5", mydecode(t), 0, 0, "012345677890123", 1)).toString("base64")
}
改成这样,其他的不变
function mydecode(t) {
var c = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
var f = /[\t\n\f\r ]/g;
var e = (t = String(t).replace(f, "")).length;
e % 4 == 0 && (e = (t = t.replace(/==?$/, "")).length),
(e % 4 == 1 || /[^+a-zA-Z0-9/]/.test(t)) && l("Invalid character: the string to be decoded is not correctly encoded.");
for (var n, r, i = 0, o = "", a = -1; ++a < e;)
r = c.indexOf(t.charAt(a)),
n = i % 4 ? 64 * n + r : r,
i++ % 4 && (o += String.fromCharCode(255 & n >> (-2 * i & 6)));
return o
}
s 方法就不贴了,太长了,使用 execjs 执行js, 完成
结束!