爬虫研究分析-响应结果加密

目标网站

某磁力连接网站

目标

获取如图信息

image

遇到问题

  1. 数据是js加载的

  2. 数据是加密(?)的

image_1

那么就需要进行解密

解密数据

格式化代码

关键JS文件是压缩过的,无法进行调试。需要格式化后才可以进行调试

首先找到关键JS文件

image_2

点击代码左下角进行格式化

格式化后会生成一个新的JS文件,这个时候刷新页面,在新的JS里面打的断点就会起作用

开始调试

首先查找接口看是否可以获取线索

image_3

显然,基本没有什么多余的信息可以获取

那么换一种思路,从接口获取数据到渲染页面一定会有从接口返回数据中读取列表信息的过程

image_4

经过查看接口返回值,发现列表信息对应的Key为hits

所以搜索hits(注意搜索时选择不忽略大小写)

image_5

如图所示,从请求接口返回值中获取列表数据

只需要关注这一句

1
l.adapter.data.pushAll(a)

接下来搜索adapter.data

image_6

一共7个结果,经过查看除了调用clear()就是调用length。只有这里最可疑

接下来走了一些弯路,我先后去搜索了wt,We,Ue这几个函数,发现这些方法实现的逻辑是构造虚拟dom。渲染页面。没有我关注的解密数据过程

直到我发现这一行代码

image_7

原来如此,解密方法写在String的原型中,最后搜索到解密方法如下

1
2
3
4
5
6
7
8
9
String.prototype.decrypt = function() {
    var e = this.valueOf();
    if (0 < this.length) {
        for (var t = [], n = 0; n < e.length; n++)
            t[n] = 202033 ^ e.charCodeAt(n);
        e = String.fromCharCode.apply(null, t)
    }
    return e
}

python版本

1
2
3
4
5
6
7
8
9
if __name__ == '__main__':
    s = "誨曑嬲誨曑䑙菷"
    t = ''
    for c in s:
        t += chr((202033 ^ ord(c)) % 65536)
    print(t)

 # 输出结果
 # 龙珠(七龙珠)全集