首页
学习
活动
专区
圈层
工具
发布

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

抓包分析

先抓包分析一下登录的请求【图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 直接搞起。

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

代码语言:javascript
代码运行次数:0
复制
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并且禁止重定向

代码语言:javascript
代码运行次数:0
复制
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 = {}

感谢 @汪唔 老哥的帮助。

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

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

下一篇
举报
领券