吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4601|回复: 49
收起左侧

[Web逆向] 记一次爬取数据过程

[复制链接]
潇洒的吸血鬼 发表于 2021-8-6 09:56
本帖最后由 潇洒的吸血鬼 于 2021-8-6 10:44 编辑



记一次爬取数据过程

目标网站

某磁力连接网站

目标

获取如图信息

image.png

遇到问题

  1. 数据是js加载的

  2. 数据是加密(?)的

图片1

图片1

那么目标就变成从接口获取数据然后进行解密操作了

解密数据

格式化代码

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

首先找到关键JS文件

image_2.png

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

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

开始调试

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

image_3.png

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

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

image_4.png

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

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

image_5.png

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

只需要关注这一句

l.adapter.data.pushAll(a)

接下来搜索adapter.data

image_6.png

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

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

直到我发现这一行代码

image_7.png

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

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版本

if __name__ == '__main__':
    s = "誨曑嬲誨曑䑙菷"
    t = ''
    for c in s:
        t += chr((202033 ^ ord(c)) % 65536)
    print(t)

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

结语

虽然如此,最后分析的结果并没有用上
成品开源项目


免费评分

参与人数 21威望 +1 吾爱币 +35 热心值 +19 收起 理由
zhoting666 + 1 + 1 用心讨论,共获提升!
lstar + 1 + 1 热心回复!
Lruc + 1 + 1 我很赞同!
cc5810018 + 1 我很赞同!
woshicp + 1 + 1 我很赞同!
搬砖孩子要毕业 + 1 挺好额帖子
czx121 + 1 我很赞同!
RootMe + 1 用心讨论,共获提升!
kxkxy5505 + 1 + 1 用心讨论,共获提升!
_小白 + 1 + 1 我很赞同!
gba626 + 1 我很赞同!
WM715 + 1 + 1 谢谢@Thanks!
笙若 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
zeknight + 1 + 1 厉害,要是有视频就完美了
三滑稽甲苯 + 2 + 1 用心讨论,共获提升!
syy + 1 谢谢@Thanks!
涛之雨 + 1 + 20 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
The_Stig + 1 + 1 谢谢@Thanks!
ZhiYing520 + 1 + 1 我很赞同!
RebeccaSL52 + 1 谢谢@Thanks!
18839137536 + 1 我很赞同!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

syy 发表于 2021-8-6 16:02
出现异常, HTTPSConnectionPool(host='4raq0y70.xyz', port=443): Max retries exceeded with url: /search-%E9%BE%99%E7%8F%A0-0-0-1.html (Caused by ProxyError('Cannot connect to proxy.', NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x00000178EF6B7E50>: Failed to establish a new connection: [WinError 10061] 由于目标计算机积极拒绝,无法连接。'))) 大佬 我下载GitHub上的 用pycharm装完模块之后 磁力搜索显示加载错位u 这是什么原因呀
derain 发表于 2021-8-6 11:33
[JavaScript] 纯文本查看 复制代码
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
}




这是什么奇怪的加密方式...
pwp 发表于 2021-8-6 11:08
sphsyv 发表于 2021-8-6 11:21
爬取数据,还是用Fiddler好用
 楼主| 潇洒的吸血鬼 发表于 2021-8-6 11:31
pwp 发表于 2021-8-6 11:08
python就这点代码就完啦?

本来解密逻辑就很简单
 楼主| 潇洒的吸血鬼 发表于 2021-8-6 11:32
sphsyv 发表于 2021-8-6 11:21
爬取数据,还是用Fiddler好用

不冲突,js调试chrome的dev tools是真的好用
qiaopf888 发表于 2021-8-6 11:37
pwp 发表于 2021-8-6 11:08
python就这点代码就完啦?

哈哈,虽然他代码少,但是逻辑可以学习借鉴,尤其对我这种小白。
panyanjun 发表于 2021-8-6 11:44
感觉好厉害,学习一下
 楼主| 潇洒的吸血鬼 发表于 2021-8-6 11:54
derain 发表于 2021-8-6 11:33
[mw_shl_code=javascript,true]String.prototype.decrypt = function() {
    var e = this.valueOf();
  ...

就是字符串的unicode编码被处理过,这里就是按照规则处理回来然后再将unicode转成字符串
wwaaffll 发表于 2021-8-6 11:55
学到了,感谢记录
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-16 03:17

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表