0x00
由于最近的app项目用到云通讯的语音验证码,几次出现余额不足的情况,虽然网站自带余额提醒,可是又繁琐界面。所以打算在项目管理端增加爬余额显示的接口。
0x01
首先最简单的进入官网的登录界面http://www.yuntongxun.com/user/login,模拟登录.
# coding: utf-8
import requests
url = 'http://www.yuntongxun.com/user/login'
# f12,可以看到登录需要的是loginName, loginPwd
data = {
'loginName': '',
'loginPwd': '',
}
r = requests.post(url, data=data)
print r.text.encode('utf-8')
结果发现返回的还是登录页面。
判断可能是headers和cookies没有设置。通过抓包,设置好cookies重新发送,结果也病没有什么乱用。
0x02
web端太麻烦,正好又开了抓包工具,那顺便抓下手机端的数据是什么样子的吧。正好微信搜到云通讯的公众号,立马抓一下。
通过抓包发现,需要这3个参数才可以登录。
- JSESSIONID
- gr_session_id_xxxx
- gr_user_id
反复试验发现gr_user_id 是固定的,JSESSIONID是网站返回的,而gr_session_id_xxxx是怎么产生的呢?
经过一番折腾,发现并不知道gr_session_id_xxx是怎么产生的,又抓不到js文件,所以放弃手机端,重新转向web端。
0x03
重新抓包可以发现一些js文件,有些可以直接看到js代码,而有一些则抓不到js代码。
重新阅读/user/login页面,发现登录的源码
$.ajax({
type : "POST",
url : "/user/doLogin",
data{
loginName:$("#loginName").val(),loginPwd:$.md5($("#loginPwd").val()),loginCode:$("#loginCode").val(),remeberMe:remeber,preUrl:$("#preUrl").val()},
dataType : "json",
success : function(data) {
}
};
原来真正的登录是/user/doLogin
重新编辑代码,登录,提示用户或密码不正确。
重新阅读代码,发现密码是加密过后发过去的,所以md5是关键。正好抓包的时候可以看到抓到的jquery.md5.js,可是并没有源码,把文件路径粘贴到url上提示404,决定把域名换成ip试试,结果得到源码,然后加密自己的密码重新发送,最终得到返回值。
0x04
得到返回值之后带着cookies访问/member/main,最终访问成功。源码如下:
import requests
url = 'http://www.yuntongxun.com/user/doLogin'
data = {
'loginName': '',
'loginPwd': '',
}
r = requests.post(url, data=data)
cookies = dict(r.cookies)
url = 'http://www.yuntongxun.com/member/main'
r = requests.get(url, cookies=cookies)
print r.text.encode('utf-8')
0x05
最后就是分析html,在此就不做分析了。