百度用户登陆流程详细分析、百度账号批量登陆程序
前些天,因某些业务需要,需开发一个与百度相关的程序,其中一个子功能便是:百度账号批量登陆、并保持在线状态。
花了些时间研究了一番,当时写了点分析文档,现发出来,也许其他人可能会有需要吧……
登陆页面:
这个有很多个地址,各种百度页面都有,例如:百度首页、贴吧、知道、博客、文库等,但无一例外都是调用的:passport.baidu.com
本文分析时,采用的地址为:http://www.baidu.com/cache/user/html/login-1.2.html
地址对登陆流程无影响,提交的数据包格式都是完全一样的。
登录流程:
注意:以下操作必须使用百度的 cookie(可以通过访问百度域名旗下任何页面获得,例如百度首页),否则无法登陆及获取 token,例如:BAIDUID=0915774773D18CA1A50FB5012E9F9E5A:FG=1,关键值为:BAIDUID,是用户识别码。
0x01.检查是否需要验证码
在加载完登陆页面后,开始填写用户名(例子:[email protected]),当填完用户名后,切换输入框的时候,页面会提交一个GET请求:数据包格式很简单,提交用户名到百度系统,判断该用户是否需要使用验证码,主要是通过判断登陆地点(异地登陆)等信息决定是否启用验证码,然后会分别返回一些 js 数据:由于我这里没有用到验证码(批量登陆的时候,可以绕过验证码的),所以没有详细跟进分析,感兴趣的同学可以分析一下返回数据包,这些数据包很简单的……
0x02.发送登录数据包
填写完账号、密码(及验证码)后,点击登录,则开始提交登录数据包:数据包中注释写得很详细,可以看看。
提交之后,如果账号、密码正确,百度系统会返回一个或多个 Set-Cookie 值(如下所示),及一段跳转代码,跳转到登陆之前的页面,否则会返回错误代码:error=***其中有用的关键 cookie 值只有一个:
BDUSS=pRT29kMERuS28tdXB4YzZ5OC02cDE4R04za********************************************************************************************************************HIAAAAAmWdCAAAAAAAxMC40Mi4yMjMAM1AzADNQSV
然后提取该值,并与之前的 BAIDUID 拼接成为一个完整的 Cookie:
BAIDUID=0915774773D18CA1A50FB5012E9F9E5A:FG=1; BDUSS=pRT29kMERuS28tdXB4YzZ5OC02cDE4R04za********************************************************************************************************************HIAAAAAmWdCAAAAAAAxMC40Mi4yMjMAM1AzADNQSV
然后使用这段 Cookie 访问百度旗下任何产品,此时便是登录状态了,与用户操作无异,然后你懂的……
原文地址:http://lcx.cc/?i=2798
花了些时间研究了一番,当时写了点分析文档,现发出来,也许其他人可能会有需要吧……
登陆页面:
这个有很多个地址,各种百度页面都有,例如:百度首页、贴吧、知道、博客、文库等,但无一例外都是调用的:passport.baidu.com
本文分析时,采用的地址为:http://www.baidu.com/cache/user/html/login-1.2.html
地址对登陆流程无影响,提交的数据包格式都是完全一样的。
登录流程:
注意:以下操作必须使用百度的 cookie(可以通过访问百度域名旗下任何页面获得,例如百度首页),否则无法登陆及获取 token,例如:BAIDUID=0915774773D18CA1A50FB5012E9F9E5A:FG=1,关键值为:BAIDUID,是用户识别码。
0x01.检查是否需要验证码
在加载完登陆页面后,开始填写用户名(例子:[email protected]),当填完用户名后,切换输入框的时候,页面会提交一个GET请求:
检查是否需要验证码:数据包 {
//https://passport.baidu.com/v2/api/?logincheck&callback=bdPass.api.login._needCodestringCheckCallback&tpl=mn&charset=utf-8&index=0&[email protected]&time=1345429566039
/*
[url]https://passport.baidu.com/v2/api/?logincheck[/url]
callback=bdPass.api.login._needCodestringCheckCallback
tpl=mn
charset=utf-8
index=0
[email protected]
time=1345429566039
*/
}
//无需验证码
bdPass.api.login._needCodestringCheckCallback({"errno":0,"codestring":"","index":"0"})
//需要验证码
bdPass.api.login._needCodestringCheckCallback({"errno":0,"codestring":"00134551910401544CDC299B469B5E46D32022AFD068465D3EA7BF0FCFBF84159218814618D466E1E06B531057E7F6249BD724257D2778654C70D4D943DD10CBB421A1E241A81A738E08AFBBAAA53D29894495B6C0079092D24BCFFF0F76DBE8E3F580551DABF998EA0F30387CD05E7109A82FBF82F363D3CD8702E84BC468B09BF44EEF99E61E235B30637E8A04CFAF5C4EB25458C63B878788DC85340637AC1AA9D25538A7A899","index":"0"})
//根据 codestring 生成验证码
[url]https://passport.baidu.com/cgi-bin/genimage?00134551910401544CDC299B469B5E46D32022AFD068465D3EA7BF0FCFBF84159218814618D466E1E06B531057E7F6249BD724257D2778654C70D4D943DD10CBB421A1E241A81A738E08AFBBAAA53D29894495B6C0079092D24BCFFF0F76DBE8E3F580551DABF998EA0F30387CD05E7109A82FBF82F363D3CD8702E84BC468B09BF44EEF99E61E235B30637E8A04CFAF5C4EB25458C63B878788DC85340637AC1AA9D25538A7A899&v=1345519099647[/url]
0x02.发送登录数据包
填写完账号、密码(及验证码)后,点击登录,则开始提交登录数据包:
发送登录数据包 {
POST {
/*
[url]https://passport.baidu.com/v2/api/?login[/url]
*/
}
Data {
/*
<script src="https://passport.baidu.com/js/pass_api_login.js?v=20120731" type="text/javascript" charset="UTF-8"></script>
行:m(L,[{
*/
!ppui_logintime=9379&charset=utf-8&codestring=&token=e26c8539626cdfac6e4fcd4d5c8e0e83&isPhone=false&index=0&u=&safeflg=0&staticpage=http%3A%2F%2Fwww.baidu.com%2Fcache%2Fuser%2Fhtml%2Fjump.html&loginType=1&tpl=mn&callback=parent.bdPass.api.login._postCallback&[email protected]&password=123456&verifycode=&mem_pass=on
/*
ppui_logintime=9379 [用户在页面停留的毫秒数]
charset=utf-8
codestring=
token=e26c8539626cdfac6e4fcd4d5c8e0e83 [token 获取方式见下]
isPhone=false [是否手机号登陆模式]
index=0
u=
safeflg=0
staticpage=http%3A%2F%2Fwww.baidu.com%2Fcache%2Fuser%2Fhtml%2Fjump.html
loginType=1
tpl=mn
callback=parent.bdPass.api.login._postCallback
[email protected] [账号]
password=123456 [密码]
verifycode=
mem_pass=on [是否记住登录状态]
*/
}
}
token 获取方式 {
/*
使用百度 cookie(BAIDUID)访问如下地址,然后提取字符串(该值为固定值并唯一,和 BAIDUID 的值对应)。
地址:<script src="https://passport.baidu.com/v2/api/?getapi&class=login&tpl=mn&tangram=true" type="text/javascript"></script>
行 5:bdPass.api.params.login_token='e26c8539626cdfac6e4fcd4d5c8e0e83';
*/
}
提交之后,如果账号、密码正确,百度系统会返回一个或多个 Set-Cookie 值(如下所示),及一段跳转代码,跳转到登陆之前的页面,否则会返回错误代码:error=***
Set-Cookie:
BDUSS=pRT29kMERuS28tdXB4YzZ5OC02cDE4R04za********************************************************************************************************************HIAAAAAmWdCAAAAAAAxMC40Mi4yMjMAM1AzADNQSV; expires=Sat, 07-Nov-2020 03:27:47 GMT; path=/; domain=baidu.com
PTOKEN=1b97128dc7************9039b65b21; expires=Sat, 07-Nov-2020 03:27:47 GMT; path=/; domain=passport.baidu.com
STOKEN=03b2d2205d************5ad6301745; expires=Sat, 07-Nov-2020 03:27:47 GMT; path=/; domain=passport.baidu.com
PTOKEN=deleted; expires=Mon, 22-Aug-2011 03:27:46 GMT; path=/; domain=baidu.com
SAVEUSERID=217cb64e2dff1587bc**********f38f557957452436; expires=Sat, 07-Nov-2020 03:27:47 GMT; path=/; domain=passport.baidu.com
BDUSS=pRT29kMERuS28tdXB4YzZ5OC02cDE4R04za********************************************************************************************************************HIAAAAAmWdCAAAAAAAxMC40Mi4yMjMAM1AzADNQSV
然后提取该值,并与之前的 BAIDUID 拼接成为一个完整的 Cookie:
BAIDUID=0915774773D18CA1A50FB5012E9F9E5A:FG=1; BDUSS=pRT29kMERuS28tdXB4YzZ5OC02cDE4R04za********************************************************************************************************************HIAAAAAmWdCAAAAAAAxMC40Mi4yMjMAM1AzADNQSV
然后使用这段 Cookie 访问百度旗下任何产品,此时便是登录状态了,与用户操作无异,然后你懂的……
原文地址:http://lcx.cc/?i=2798
评论14次
好文章 收藏之
不错,支持下
如果绕不过验证码的话,程序的实用性大大降低了
求百度空间登录时候最后一部分进行callbak进行跨域问题怎么解决!!!!
只有改了 做技术的才有饭吃。。。
分析的很详细,需要的时候用.
这里是说明在不用验证码的时候的情况,但如果有验证码,可以多加个步骤,一样这样使用的,只是验证码要手动输入了`
如果这里有百度的人 那估计很快要改接口了
不错 !
研究的不错。。业务需要,开发,那你就开发啊。。公布出来,百度改了,你还开发个毛啊。
单是拿到BDUSS是不能登录所有B度的产品的 以前可以现在不行了 很多产品还有另外几个token
如果是遇到验证码这个cookies应该是通不过的
核总比较给力。
可以绕过验证码?