您现在的位置是:IT资讯 >>正文
别让加密难倒你:Python爬虫攻克加密网站的实战教程
IT资讯43716人已围观
简介今天有个朋友向我求助,希望我帮他爬取一个网站上的内容。网站内容如下:复制aHR0cHM6Ly93d3cuY2NwcmVjLmNvbS9uYXZDcXpyLyMvCg==1. ...
今天有个朋友向我求助,别让希望我帮他爬取一个网站上的加密加密内容 。网站内容如下 :

打开上述网址,难倒进入开发者模式 ,爬虫这些数据的攻克请求接口,正常逻辑是网站通过搜索页面上内容进行锁定请求接口 。但是战教,进行搜索时,别让发现什么都搜索不到 。加密加密

通过上图发现,难倒这些数据只请求了一个接口,爬虫当我点击负载和响应这两个标签 ,攻克发现数据是源码库网站被加密了 ,所以 ,战教我们搜索不了页面的别让内容。

负载加密内容

响应加密内容
浏览器为啥是明文?这时相信小伙伴,心中都有一个疑问浏览器为啥是明文? 浏览器在收到数据后 ,会自动采用服务器返回的资源文件对加密内容进行解密并显示明文 ,这也是我们能够在页面上看到正常内容的原因。

通过XHR/提取断点 ,该方法是通过匹配URL包括请求路径关键字进行断点,源码下载具体配置如下图:

这时我们重新刷新网页 ,如下图所示 ,网站就成功进入我们上一步设置的断点中。

其中,h就是加密后的请求体参数 ,然后我们从调用堆栈中一步步往前推。至于如何找呢?这里是有一个技巧的,我们需要找到前一步请求体还没加密 ,后一步请求体就加密成功了。

请求体加密后

请求体加密前
其中上图o就是请求体加密之前的免费模板参数,s就是加密后的参数。chunk-common.a25fd3ce.js就是进行加密的js。通过点击堆栈的js名称就可以定位到对应的地方。
扣取代码经过上一步分析,我们知道o就是加密之前的参数,就在js代码找o定义的位置 ,云计算如下图所示 :

下面代码就是请求体的参数,通过上述代码发现id是通过uuid方法生成的。
复制{ "id": "rtmhwib79r4ytdgn", "projectKey": "honsan_cloud_ccprec", "clientKey": "rtmhwialwggc91l6", "token": null, "clientDailyData": { }, "acts": [ { "id": "rtmhwib65mon96h1", "fullPath": "/cloud.sys.tomcatV11/api/v1/template/getPages", "args": [ { "yuPiLou": { "templateId": "32d3044760964ed8927bad49e545ba4b", "pageNo": 1, "pageSize": 20, "where": { "projecttype": "PG3", "state": "42" } } } ] } ] }1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.接着我们需求扣取这个uuid方法 。通过鼠标悬停在这个方法上面 ,就会弹出面板,如下图所示 :

点击后就会调到uuid方法定义的地方,如下图所示 :

把这段代码扣取下面,如下所示:
复制uuid = function (t, n) { void 0 === t && (t = 16), void 0 === n && (n = !1), !n && t < 16 && (console.error("uuid useCase=false 时 len 不能小于 16"), t = 16), n && t < 12 && (console.error("uuid useCase=true 时 len 不能小于 12"), t = 12); var i = ((new Date).getTime() + 1e14).toString(); return i += ("000" + (++e.uuidCount).toString()).substr(-3, 3), i = n ? parseInt(i).to62() : parseInt(i).toString(36), i += randomStr(t), i = i.substr(0, t), i }1.2.3.4.5.6.7.8.9.10.11.12.13.14.把this关键的全部删除它。
然后通过node进行运行,如下图所示报错了e没有定义。香港云服务器

于是,我们再去源码中找改值是什么 ?通过选中该值 ,经过几次的确认 。该值是NaN,如下图所示 :

我们再自己扣取的代码写死它,再次运行 。如下图所示 :

发现这是报randomStr没有定义 ,我们再去源码找这个方法进行补环境。通过搜索发现了randomStr方法,该方法有调用了random。于是模板下载我们两个方法一起扣取下来。

再次运行 ,没有报错了,成功打印了uuid ,如下图所示:

把之前扣取下来的请求体 ,id字段固定值替换成uuid函数生成的动态值 ,如下图所示:

最重要的一步就是扣取加密的JS代码啦 , 在请求体参数附近查看this.aes.encode(a)加密方法,如下图所示 :

通过上面介绍的方面快速定位到这个加密的方法 ,如下图所示:

该方法又调用了另外一个方法this.encryptCode ,通过关键搜索也找到了encryptCode方法 ,如下图所示:

加密方法
按照编程习惯,附近也会有对应的解密方法的,如下图所示 :

解密方法
现在加密和解密的方法都找到了,我们把它全部扣取下面进行调试 ,发现缺什么方法再进行补 。重新定义一个方法生成加密请求头 ,后续让python调用这个方法并传入分页参数 。如下图所示 :

测试该方法是否能正常生成加密请求头,执行如下命令 :
复制console.log(encrypt())1.执行上述方法后 ,输入如下图所示 :

这里介绍一个非常快捷的方式用python模拟一个浏览器请求 ,首先我们先在开发者模式选择这条请求,然后右击选择**将所有列表复制为cURL(Bash)**,如下图所示 :

然后,来的这个工具网站[1] ,粘贴刚才复制的cURL信息,就可以根据自己喜欢的编程语言生成模拟浏览器请求的代码,如下图所示 :

然后 ,把生成的代码拷贝下来,进行修改。通过python的第三方库execjs调用js代码并执行对应的方法 。
复制jscode=open("./test.js",r,encoding=utf-8).read()1.以读的模式打开test.js并赋值给jscode
复制data = execjs.compile(jscode).call("encrypt",page)1.通过execjs调用jscode对象 ,并通过call方法调用encrypt加密方法 ,并传入分页参数page。
下图是python中的完整代码:

执行上述代码后,成功获取网站的数据如下图所示 :

在python中使用execjs库,出现UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0xac in position 244: illegal multibyte sequence ,一般遇见编码问题先看看代码里写没写encoding=utf-8 ,没写的话写加上试试。加了也不行 。通过在python代码中加入如下代码:
复制import subprocess from functools import partial subprocess.Popen = partial(subprocess.Popen, encoding="utf-8")1.2.3. 脚本获取方式上述脚本已经上传上传到gitee,有需要的小伙伴可以自行获取。gitee上的仓库主要是分享一些工作中常用的脚本。小伙伴可以frok或者watch仓库,这样有更新可以及时关注到。

仓库地址:https://gitee.com/didiplus/script
工具网站: https://curlconverter.com/
Tags:
转载:欢迎各位朋友分享到网络,但转载请说明文章出处“信息技术视野”。http://www.bziz.cn/html/45f599949.html
相关文章
风险管理之风险管理信息
IT资讯为什么在评估网络安全风险时识别不同类型的信息至关重要。介绍风险信息是可以影响决策的任何信息。一些组织倾向于只接受某些类型的信息作为合法的风险信息。这些限制增加了错过重要事情的可能性。为什么多样性很重要 ...
【IT资讯】
阅读更多联想U410超极本的性能和用户体验如何?(深入解析联想U410超极本的优势和不足)
IT资讯如今,超极本成为越来越多用户的首选,其轻薄便携的特点深受大众喜爱。而在众多超极本品牌中,联想U410凭借其高性能和出色的用户体验,成为了不少消费者的追捧对象。本文将从不同方面详细介绍联想U410超极本 ...
【IT资讯】
阅读更多华硕B85M声卡表现如何?(深度评测华硕B85M声卡的音质与功能)
IT资讯作为一款主板集成的声卡产品,华硕B85M声卡备受关注。本文将对其音质表现和功能特点进行深度评测,为读者提供全面的参考。音质表现-超越预期的清晰度华硕B85M声卡的音质表现令人惊喜。无论是在高音、中音还 ...
【IT资讯】
阅读更多
热门文章
最新文章
友情链接
- 多款热门 Chrome 扩展程序存在明文传输风险,用户隐私安全受威胁
- 谷歌 Chrome 零日漏洞遭广泛利用,可执行任意代码
- 戴尔笔记本F2刷机教程(戴尔笔记本F2刷机方法详解,助你发挥最大潜力)
- 新型 PumaBot 僵尸网络瞄准 Linux 物联网设备窃取 SSH 凭证并挖矿
- GitLab Duo AI 编程助手曝出提示注入漏洞 凸显AI助手的潜在风险
- 体验音乐新境界,BOSEQC35带来震撼音质!(逆袭耳朵的,QC35成为音乐控的首选!)
- 戴尔科技 VMware Tanzu 加快基础设施现代化进程满足您的业务需求
- 花漾搜索答题教程(掌握花漾搜索的技巧,快速解答各类题目)
- 神舟战神K540D-i7D2笔记本电脑的性能和用户体验(一款高性能笔记本电脑的推荐及评测)
- 身份安全成焦点:Palo Alto Networks拟以250亿美元收购CyberArk 亿华云香港物理机云服务器b2b信息平台源码库企业服务器网站建设