豆瓣搜索爬虫

豆瓣读书

代码

图书数据是直接加密的。在window.DATA 里面

window.__data__参数破解:?base64 + xxHash + bplist?

base64 编码

base64

13992 行,e.from(r, “base64”) 很明显的提示 --> base解码过程

我们使用Python库 base64 进行验证

import base64
base64.b64decode(window.__data__)

xxHash

13996 行,Object(o.hash) --> 肯定是一个hash 算法。我们下一步进入这个函数。
xxhash
4025 行 update().digest() --> 用过Python hashlib库的人是不是感觉很熟悉

4039 - 4043 行 五个 magic constants --> 进一步确认是xxhash 算法

import xxhash
# u 是base64 解密之后的最后16个字节
sec_key = xxhash.xxh64_hexdigest(u, 41405).encode("utf-8")

xxHash 是一种非常快速的非加密哈希算法。使用教程

bplist破解

我们继续向下执行代码,这里初步怀疑是bplist 解析过程(为什么我会知道,后面会介绍bplist的知识)
在这里插入图片描述

我们继续调试

在这里插入图片描述

看到这。不用怀疑这就是pblist解析过程。但是我们观察bplist 对象表会发现:豆瓣改变了objType= 4,5,6的解析方式。

豆瓣bplist

objTypehex
二进制0x6X
字符串ASCII0x4X
字符串UTF-160x5X

具体解析过程请看源码。

Binary Plist解析详解

  • bplist文件由四个部分组成:文件头,对象表,偏移表, 文件尾

Handle trailer, last 32 bytes of the file (文件最后32个字节)

filedlengthmeaning
null6备用
offset_size1偏移表中的整形字节长度
object_ref_size1对象表中的整形字节长度
num_objects8偏移表中的元素个数
top_object8根节点中的起始位置
offset_table_offset8偏移表在文件中的起始位置

偏移表

  • 文件从offset_table_offset开始的 offset_size * num_objects个字节

对象表

objType(hex)说明
单字节0x0XX=0: 返回 null
X=8: false
X=9: true
X=F: b"", 填充字节
整数0x1X后面跟的2^X个字节就是这个数字的值
浮点型0x2XX=2: float类型数据(4位)
X=3: double类型数据(8位)
日期0x33后面接着8个字节的浮点数时间戳
二进制0x4XX表示这段数据的字节数,如果X=F,则取后面一个字节的记为Y,随后的2^Y个字节解析为整数Z,即为这段数据的字节数
字符串0x5XASCII编码 X表示这段数据的字节数,如果X=F则后面作为整数对象继续解析所得数既为字节数
字符串0x6XUTF-16 X表示这段数据的字节数,如果X=F则后面作为整数对象继续解析所得数既为字节数 记得双字节!
数组0xAXX表示其元素个数,如果X=F则后面作为整数对象继续解析所得数既为个数 后面接着X个元素在偏移表的位置
字典0xCX当做数组处理
单字节0xDXX表示其元素个数,如果X=F则后面作为整数对象继续解析所得数既为个数 后面接着X个key在偏移表的位置,X个value在偏移表的位置

javascript pblist parse无混淆代码

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

keenanli

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值