首页 > 编程语言 >python爬虫js逆向(标准算法加密)

python爬虫js逆向(标准算法加密)

时间:2024-05-25 20:58:40浏览次数:29  
标签:加密 请求 python 爬虫 sign js 断点 函数

在爬取某些网站时,可能会遇到一些参数或头部信息进行字符串加密、数据加密或字符串编码等问题,导致不能正确获取到我们想要的数据。

step1 观察是否有加密

通过正常方法请求网页,并且也加了请求头和请求参数伪装浏览器,发现返回的状态码还是4xx,那么就要考虑到是否是请求头或者请求载荷中有数据进行了加密!!!

下拉网页之前,先在“网络”中清空所有数据包,再停用缓存,筛选出Fetch/XHR类型的包。下拉完网页(或者重新点击某选项)后,出现红框总的数据包。

首先点开数据包,查看请求标头和请求载荷是否有加密数据,发现请求头中的U-Sign是加密数据

 

step2 由关键词找加密函数

直接对加密的关键词进行搜索,很显然,搜到的部分都是抓到包的请求头的一部分,并没有进入到源代码中,所以失败。如果太多或者没有搜索到,就可以直接跨越到下一个步骤。

step3 XHR断点跟栈

这个时候复制请求网址的路径(域名之后的部分),将其加入到XHR断点(源代码界面的右边选项)中去,然后再下拉页面(或点击选项)即可进入断点

 

每一次打XHR断点调试进入的地方基本上都是send()、apply()等XML对象处。

接下来就是要“跟栈”找到关键词u-sign,此时关注“调用堆栈”和“作用域”两个部分,在“调用堆栈”的列表中,我们可以由上至下依次溯源(程序的执行是用下边的结果执行上面的内容),更改堆栈的同时,观察“作用域”中的“本地”参数是否生成关键字

果然,在追溯到第二个栈的时候,出现了关键字,这时候就需要继续往“下”(回)追溯

往下继续点击栈的时候,异步下边都无变化且蓝色光标也不移动。这是因为到了异步栈(此时外表事件都是一致的,但是事件内部行为有很多),所以要在源代码处打断点进入行为(一定要先把之前的XHR断点取消掉)

小知识点:promise异步栈对象中存在request拦截器(前部分方法)与response拦截器(后部分方法),如果此时的“作用域”中headers没有生成u-sign,那么它就是在request拦截器中生成

根据上述图片很显然此时u-sign是request拦截器中生成的,所以点击上图链接

接着就能找到生成关键字的方法:(但这里不一定是加密函数,要点进去看详情)

此时把生成方法放入控制台输出看一下,是否是我们想要得到的加密内容 (注意:控制台输出之前,一定要打上断点进入调试状态,最好先取消到之前的其他断点)

一般来说,加密函数在哪呢?

答:一般找到一个方法或者函数的return后面的位置

点击进入o的定义位置,如下图,一看最后两行就是加密函数的操作,控制台输出一下(同上,进入调试状态)

 看了一下最终加密的长度,怀疑是标准算法md5 

什么是标准加密算法?

答:加密前的内容一致时,加密后的结果一定相同!

md5在线加密网站输入加密,发现真的是md5加密(对照加密后的字符串和前面网页控制台的n(o)后的字符串是否一样)。可以看出n()函数是MD5加密函数,o则是其中的待加密字符串(仔细观察发现是数据包中的请求载荷的参数)

小知识点:常见的标准算法md5(32位)、sha1(40位)

这种找标准算法的方法属于投机取巧了,有些并不是标准算法,而是js混淆,那么这个时候就需要另一种方法(补代码)!!!

打开pycharm,编写js代码,其中json_data是请求载荷的参数

const CryptoJs=require('crypto-js');
function my_main(a){
    i = "9SASji5OWnG41iRKiSvTJHlXHmRySRp1"
    o = Object.keys(a).length > 0 ? "".concat(JSON.stringify(a), "&").concat(i) : "&".concat(i);
    o = o.toLowerCase()
    u_sign=CryptoJs.MD5(o).toString()
    return u_sign
}
json_data={
    xx:xx,
    yy:zz,
}
console.log(my_main(json_data))

如何在python文件中引用js文件? 

import execjs
u_sign=execjs.compile(open('xxx.js','r',encoding='utf-8').read()).call('my_main',json_data)

我的pycharm是社区版的,所以安装不了js插件,只能用命令行的方式来运行js文件(但是要先安装nodejs,并且配置好环境)

 

结果与u-sign一致哦!

step4 从堆栈找入口

第三步成功的话,并不需要看这个。前面找不到的话,直接从启动器的堆栈入口进入,任选一个都行

然后直接ctrl+F直接查找关键词,剩余步骤同上

step5 测试加密函数是否正确

对照载荷中u-sign的值是否与自己找到的加密函数的加密结果一致!!! 

总结:

js逆向是真的变化多端,不同的网页有不同的操作技巧。但是如何打断点进行调试是一个需要花费时间掌握的内容,现在对于基本的加密算法能够从网页源码中找出,加密,将js引用到python中。存在疑问:什么是异步栈?什么是js混淆?标准算法的加密解密?

学习参考视频:JS逆向封神路!爬虫大佬必修课,2024年Python爬虫进阶教程,企业级逆向实战(逆向各种参数、验证码、滑块、算法)学爬虫看着一套就够了_哔哩哔哩_bilibili

标签:加密,请求,python,爬虫,sign,js,断点,函数
From: https://blog.csdn.net/benbenxinchen/article/details/139131162

相关文章

  • python管理k8s集群
    1、python怎么管理k8sk8s最核心的组件就是api-server,大部分的组件都是监听这个端口的,因此只有有着api就能进行使用python来管理k8s了2、操作1、参数详细的介绍#导入这些库fromkubernetesimportclient,configfromkubernetes.streamimportstreamApi_Instance=clie......
  • Pandas合并操作——《Python数据分析库Pandas》
    Pandas合并操作——《Python数据分析库Pandas》Pandas合并操作使用`merge`方法进行数据合并使用`concat`方法进行数据堆叠使用`join`方法进行列连接`merge`方法的更多选项`concat`方法的轴参数`join`方法与`merge`方法的比较性能考虑总结Pandas合并操......
  • Pandas连接操作——《Python数据分析库Pandas》
    Pandas连接操作——《Python数据分析库Pandas》Pandas连接操作内连接(InnerJoin)左连接(LeftJoin)右连接(RightJoin)外连接(OuterJoin)总结Pandas连接操作Pandas是一个强大的Python数据分析库,它提供了丰富的数据结构和数据操作工具,使得数据处理变得简单......
  • Pandas分类对象——《Python数据分析库Pandas》
    Pandas分类对象——《Python数据分析库Pandas》Pandas分类对象分类对象的创建分类对象的属性和方法分类对象的应用场景示例:使用分类对象进行数据分析总结Pandas分类对象Pandas分类对象(Categorical)是Pandas库中一种用于处理分类数据的数据类型。分类数据......
  • Python 潮流周刊#52:Python 处理 Excel 的资源
    本周刊由Python猫出品,精心筛选国内外的250+信息源,为你挑选最值得分享的文章、教程、开源项目、软件工具、播客和视频、热门话题等内容。愿景:帮助所有读者精进Python技术,并增长职业和副业的收入。本期周刊分享了12篇文章,12个开源项目,赠书5本《网络是怎样连接的》,全文1......
  • python系列:Python3 XML处理模块详解
    Python3XML处理模块详解Python3XML处理模块详解一:XML文件格式二:ElementTree解析XML文件Element常用属性如下:1、tag2、attrib3、text4、childelements三:Element之查找四:Element之修改五:Element之删除六:Element之增加七:Element之排序Python3XML处理模块详解x......
  • formilyjs/element-plus 设置中文无效的原因
    工作中用到了这个库,但是使用国际化设置中文却不行,所以查看源码发现了不行的原因直接说结论,不浪费大家时间,不是使用方法有问题,就是这个库自身的bug,想要设置中文,要么改源码要么直接使用原生element原理分析先看看element是如何设置成中文的这是官网的写法,那么看看这个组件内......
  • 量化交易:海龟交易法则的Python实现
    哈喽,大家好,我是木头左!海龟交易法则是由著名的商品交易大师理查德·丹尼斯(RichardDennis)和威廉·埃克哈特(WilliamEckhardt)在20世纪80年代开发的一套交易策略。海龟交易法则以其简单性和趋势跟踪的核心理念而闻名,它证明了通过一套明确的交易规则,即使是没有交易经验的人也可以在......
  • 用 Python 编写网络爬虫:从网页获取数据并存储到 Excel 文件
    在本篇博客中,我们将介绍如何使用Python编写一个简单的网络爬虫,用于从网页中提取数据,并将这些数据存储到Excel文件中。我们将使用Python中的一些库来实现这个功能,包括urllib.request、BeautifulSoup和openpyxl。1.网络爬虫的基本原理网络爬虫是一种程序,可以自动访问......
  • @JsonFormat注解出现日期序列化以及反序列化问题(日期比实际日期少一天)
    文章目录前言一、场景如下所示二、问题分析三、@JsonFormat注解是什么以下是@JsonFormat注解的一些常用属性:四、解决问题解决方式:只需要指定对应的时区就好效果如下:五、@JsonFormat注解时出现日期问题总结前言  在一次的偶然机会下发现了一个小问题,场景是这......