JS逆向- openlaw 自动登录

如何用 js 自动登录 openlaw

抓包分析

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

图1-1

分析加密参数

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

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

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

图2-1

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

图2-2

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

图2-3

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

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

Python 实现 Openlaw 登陆

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

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

1
2
3
4
5
6
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

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

图3-1

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

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

图3-2

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

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

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

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

难点总结

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

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

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

感谢 @汪唔 老哥的帮助。

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

煌金 wechat
扫描关注公众号,回复「1024」获取为你准备的特别推送~
  • 本文作者: 煌金 | 微信公众号【咸鱼学Python】
  • 本文链接: http://www.xianyucoder.cn/2020/07/16/每日JS-openlaw密码/
  • 版权声明: 本博客所有文章除特别声明外,均采用 许可协议。转载请注明出处!
  • 并保留本声明和上方二维码。感谢您的阅读和支持!