Python实现58 同城模拟登录

hresh 804 0

Python实现58 同城模拟登录

前言

58 同城是国内领先的生活分类信息网站,海量生活信息免费发布查询。提供找房子、找工作、二手物品买卖、二手车、58 团购、商家黄页、宠物票务、旅游、交友等多种生活信息。对于数据分析师来说,58 同城是重要的数据源,来获取我们需要的数据。获取数据前,我们需要做模拟登录准备,本文便是讲解如何利用 Python 代码模拟登录 58 同城。

58 同城的前端登陆 js处理不同于百度登录,很有自己的特色,藏匿了关键的 js 语句、关键字段的参数值的出处也很特别,虽然没有百度模拟登录难,但是分析 58 同城前端登录过程也是很有意义的。

实战分析

一、页面分析

进入 58 同城登录页面后,输入账户名和密码,点击登录按钮。

58 同城登录页面

主要是构建 post 请求所需要的 Form Data,首先我们来简单的分析一下各个参数:

 Form Data分析

多次登录测试发现主要需要构建 fingerprint、password、token、path 参数,其它的固定不变。接下来我们对这些参数一一进行分析讲解。

1.fingerprint

利用 Charles 抓包,搜索 fingerprint 关键字。

Charles 抓包分析

Charles 抓包分析

发现打开登录页面之后,js 会根据图中地址发送请求,并返回 ppStore_fingerprint 和 finger_session 两个字段信息,后经比对,发现 finger_session 的值即为我们所需要的 fingerprint 信息。

该参数的分析,本没有那么简单,一开始动手分析的时候,也不会想到那么简单,多次测试后才发现其构造。

2.password

搜索 password 关键字。

Charles 抓包分析

定位到该 js 文件,分析出现 password 的语句,最后发现以下加密方法。

Python实现58 同城模拟登录

那么 password 参数可能经过了 RSA 加密处理,一番查找后,都没有找到 encryptString 函数的所在,然后掉头分析抓取的 http 协议包,发现了 RSA 的文件夹。

Python实现58 同城模拟登录

打开一看,发现是 eval 开头,其中关键信息都是编码的。

Charles 抓包分析

利用 Eval 解密工具,对该文件里的内容进行解密,最终得到完整的 js 代码信息。在 js 文件尾部发现了 encryptString 函数。

Python实现58 同城模拟登录

找到 encryptString 函数后,我们再回头来分析进行 RSA 加密所需要的参数值,在 C 函数所在的 js 文件中发现了 RSA 加密必需的模数和指数。

Python实现58 同城模拟登录

找到对 password 进行 RSA 加密的所有条件后,通过 execjs 调用 js 代码进行密码加密。

3.token

搜索 token 关键字,发现某个请求返回结果中包含 token 的值。

Charles 抓包分析

4.path

该参数前面部分基本不变,尾部更新时间戳即可。

二、登录验证

将各个参数构建完成后,把 Form Data 通过 post 请求进行提交,最后返回值如图所示,即为登录成功。

Python实现58 同城模拟登录

总结:

通过本次案例分析,认识到开发者工具和抓包工具结合使用的重要性,断点调试和截取 https 信息对于网页请求分析都必不可少。

发表评论 取消回复
表情 图片 链接 代码

分享