前言
58 同城是国内领先的生活分类信息网站,海量生活信息免费发布查询。提供找房子、找工作、二手物品买卖、二手车、58 团购、商家黄页、宠物票务、旅游、交友等多种生活信息。对于数据分析师来说,58 同城是重要的数据源,来获取我们需要的数据。获取数据前,我们需要做模拟登录准备,本文便是讲解如何利用 Python 代码模拟登录 58 同城。
58 同城的前端登陆 js处理不同于百度登录,很有自己的特色,藏匿了关键的 js 语句、关键字段的参数值的出处也很特别,虽然没有百度模拟登录难,但是分析 58 同城前端登录过程也是很有意义的。
实战分析
一、页面分析
进入 58 同城登录页面后,输入账户名和密码,点击登录按钮。
主要是构建 post 请求所需要的 Form Data,首先我们来简单的分析一下各个参数:
多次登录测试发现主要需要构建 fingerprint、password、token、path 参数,其它的固定不变。接下来我们对这些参数一一进行分析讲解。
1.fingerprint
利用 Charles 抓包,搜索 fingerprint 关键字。
发现打开登录页面之后,js 会根据图中地址发送请求,并返回 ppStore_fingerprint 和 finger_session 两个字段信息,后经比对,发现 finger_session 的值即为我们所需要的 fingerprint 信息。
该参数的分析,本没有那么简单,一开始动手分析的时候,也不会想到那么简单,多次测试后才发现其构造。
2.password
搜索 password 关键字。
定位到该 js 文件,分析出现 password 的语句,最后发现以下加密方法。
那么 password 参数可能经过了 RSA 加密处理,一番查找后,都没有找到 encryptString 函数的所在,然后掉头分析抓取的 http 协议包,发现了 RSA 的文件夹。
打开一看,发现是 eval 开头,其中关键信息都是编码的。
利用 Eval 解密工具,对该文件里的内容进行解密,最终得到完整的 js 代码信息。在 js 文件尾部发现了 encryptString 函数。
找到 encryptString 函数后,我们再回头来分析进行 RSA 加密所需要的参数值,在 C 函数所在的 js 文件中发现了 RSA 加密必需的模数和指数。
找到对 password 进行 RSA 加密的所有条件后,通过 execjs 调用 js 代码进行密码加密。
3.token
搜索 token 关键字,发现某个请求返回结果中包含 token 的值。
4.path
该参数前面部分基本不变,尾部更新时间戳即可。
二、登录验证
将各个参数构建完成后,把 Form Data 通过 post 请求进行提交,最后返回值如图所示,即为登录成功。
总结:
通过本次案例分析,认识到开发者工具和抓包工具结合使用的重要性,断点调试和截取 https 信息对于网页请求分析都必不可少。
本文作者为hresh,转载请注明。