Python爬虫进阶必备 | 某裁判文书检索网站加密分析与自动登录实现

点击上方“咸鱼学Python”,选择“加为星标”

第一时间关注Python技术干货!

建议收藏 | 最全的 JS 逆向入门教程合集

抓包分析

先抓包分析一下登录的请求【图1-1】

图1-1

按照加密的参数,我们一个个分析。

首先是 _csrf ,这个参数比较简单,一般是用来防止跨域攻击的,感兴趣的朋友可以借助搜索引擎了解一下,不是重点我们就不详聊了。

直接检索 _csrf关键字,可以看到如图的结果,_csrf 在页面中传递过来的。【图1-2】

图1-2

接着再分析 password , 直接检索 password 就可以找到关键的加密文件。【图1-3】

图1-3

点进文件就可以看到密码的加密了【图1-4】,很明显是一个 RSA 和 AES 加密的结合。

图1-4

我们简单扣取一下逻辑,运行一下结果。【图1-5】

图1-5

既然能够生成密码值了就拿到了所有的加密参数了,现在整合到 Python 中看看。

Python 实现 Openlaw 登陆

之前没有学过 JS 逆向遇到登陆只会用 Selenium 模拟登陆,现在我们可以试试用 Python 直接搞起。

首先我们先生成加密后的密码:

def get_password():
with open(r"login.js", encoding="utf-8")as f:
        js = f.read()
        ctx = execjs.compile(js)
        pwd = ctx.call("keyEncrypt", "密码")
return pwd

再看看整体的登陆逻辑是什么样的【图2-1】

图2-1

可以看到先发起了请求1,提交了加密好的密码与账户名,并且携带上了csrf

之后是一个重定向请求【图2-2】

图2-2

请求完上面的两个请求后,之后经过跳转就访问了我们的个人中心。

所以这里需要使用上session获取cookie并且禁止重定向

login_r = session.post("http://openlaw.cn/login", data=data, headers=headers,allow_redirects=False)

其他的部分只要使用session传递好cookie,在提交完数据后就可以访问个人中心了。【图2-3】

图2-3

难点总结

本篇文章其实想写很久了,但是遇到下面两个问题,我觉得有必要总结一下,方便大家避坑。

第一个问题,遇到一个报错ASN1 is not define 这是在JSEncrypt 这个加密库中报的错。

我一直以为是这个加密库的问题,因为在其他环境运行都没有问题,但是使用nodejs运行就会报错,之后通过定义window = global 解决了这个报错,之前我都是定义window = {}

感谢 @汪唔 老哥的帮助。

第二个问题,这个网站的账号很容易就被封了,所以在你运行代码时,最好先手动登陆一下看看账号是否被封禁,我就是拿了一个被封禁的账号测试了很久,一直以为是代码的问题。

以上就是本次文章的全部内容了,如果上面的文章对你有帮助,希望可以点个好看支持一下,谢谢~

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值