百度贴吧登录过程分析

简介: 分析登录过程的话有很多工具可供选择,Fiddler等抓包工具都是很好的选择。不过这次不需要,由于登录过程需要在浏览器上完成,所以我们这次直接使用浏览器的F12开发人员工具。

分析登录过程的话有很多工具可供选择,Fiddler等抓包工具都是很好的选择。不过这次不需要,由于登录过程需要在浏览器上完成,所以我们这次直接使用浏览器的F12开发人员工具。火狐、Chrome、Edge的F12工具都差不多。这次我就以Edge的为例来说明。

熟悉调试工具

一开始由于我的调试姿势不正确,所以浪费了很多时间。在这里我把我的人生经验分享一下。其实很简单,就是一句话:浏览器必须进入隐私模式。因为浏览器有可能保存以前的登录信息、cookie等,对分析工作造成混淆影响。所以我们必须不断地调试不断地清除数据。不妨直接进入隐私模式,这样所有东西都是新的,方便我们分析。

来上两张图看看。首先是调试工具。在这里我们主要看的就是cookie的值。网页登录的每一步骤我们都需要看看新增加了什么cookie,哪些cookie在登录过程中是必要的。这需要我们一步一步分析。

img_28d8d77d9991be72d114a93db4864e3a.png
调试程序

第二个部分就是网络标签。在这里就是我们主要分析的地方了。登录过程中哪一部分发送了什么类型的数据、发到了哪个URL、服务器返回了什么结果,都需要我们分析,然后模拟出登录过程。这里横排的几个按钮还可以清除缓存、cookie、记录等等,如果我们需要重复分析,这几个按钮是非常方便的。

img_7ac6f614a6d114c549cd277e853b5f6e.png
网络标签

这里有一个小技巧,那就是内容类型这里。一个网页常常包含了很多静态文件、需要从很多CDN返回图片等,但是这些都是和登录内容无关的东西。所以我们可以在这里选择需要查看的内容,图片之类的几乎完全可以忽略(当然如果遇到验证码,还是需要分析一下)。

img_463843faf893b9d65ca519aac86300e6.png
内容过滤

如果还有什么不熟悉的地方,最好自己打开几个网页,然后用开发人员工具看看。一个合格的程序员,利用调试工具的技能肯定是必不可少的。另外Edge的开发人员工具是中文的,对于英文不好的同学还是很友好的。

登录过程分析

获取BAIDUID

按照上面的技巧,打开一个隐私模式网页,然后把开发人员工具调教到合适的位置。然后进入百度主页面www.baidu.com。回到调试工具看看浏览器在这一步做了什么。

首先第一步是访问了https://www.baidu.com/ 这个地址,作用是设置了BAIDUID这个cookie。后续的请求我们都需要附上这个cookie。该cookie只有在附有UA的时候才会返回。

获取登录token

然后我们点击百度首页右上角的登录,看看会发生什么。这一步步访问https://passport.baidu.com/v2/api/?getapi&tpl=mn&apiver=v3&tt=1491554358163&class=login&gid=134D887-FD18-4D86-AED8-0880DCA39820&logintype=dialogLogin&callback=bd__cbs__m6q67t 这个地址,可以看到它带了很多参数。其中只有两个参数需要我们注意:一是tt参数,代表当前时间的毫秒数;二是gid,也就是GUID,我们用Python代码就能生成。其他参数不变就行了。

这一步如果成功的话,服务器就会返回一个JSONP。这里最重要的就是data中的token了。我们后续的登陆请求就需要这个玩意。

bd__cbs__m6q67t({
   "errInfo": {
      "no": "0"
   },
   "data": {
      "rememberedUserName": "",
      "codeString": "",
      "token": "7ddcb9b9dd7b57623a77730c53b4df76",
      "cookie": "1",
      "usernametype": "",
      "spLogin": "rate",
      "disable": "",
      "loginrecord": {
         "email": [],
         "phone": []
      }
   }
})

获取验证码

这时候页面上应该已经弹出登录对话框了,有时候好像还是直接在页面上登录。这几种登录方式没有区别,只不过上面的logintype参数可能会有不同的值,这不会影响我们的登录过程。

在登录框中输入用户名,当输入密码的时候会弹出验证码。然后我们返回开发工具看看浏览器做了什么。

这次发出的请求URL是https://passport.baidu.com/v2/api/?logincheck&token=7ddcb9b9dd7b57623a77730c53b4df76&tpl=mn&apiver=v3&tt=1491497010074&sub_source=leadsetpwd&username=%E9%82%AA%E7%8C%AB%E9%98%BF%E6%9E%AB&isphone=false&dv={dv}&callback=bd__cbs__p5fzjy ,这个URL其实很长,因为有一个很长的dv参数。这个dv参数是登录页面隐藏表单域的一个部分,用的时候把它取出来即可。变化的只有一个编码的用户名参数,剩下的基本都是固定值。

我们看到这个请求用到了用户名,所以对于每个不同的用户名,都会重新发送一次请求。如果你在登录框中更改了用户名,那么就会浏览器就会重新发送请求,顺便验证码也会刷新。

请求返回的结果同样是JSONP。重点就是codeString和vcodetype两个参数了。

bd__cbs__p5fzjy({
   "errInfo": {
      "no": "0"
   },
   "data": {
      "codeString": "tcG7d07e2dcb2f8c18d02dc14669801a07b9bcd440666043195",
      "vcodetype": "46dbjrl3l5wu82vPoSiQz/tmNWQIm1xOR0JMD0I7U/UjpgY6Sye/mCtpzMJEvJTK3PJ2hGntFKiNnDNLxjd3bmxt7FlJ3yaomPUj",
      "userid": "",
      "mobile": ""
   }
})

由于我们把图片的请求过滤了,所以调试工具只给出了这些请求。下面我们把图片那一项选中,然后在网页上选择更新验证码,看看会出现什么。

这次请求图片的URL是https://passport.baidu.com/cgi-bin/genimage?tcG9c07c1deb266c1790286146443019a7f46b1430702017e69,这里的参数正是上面的codeString。而这个请求的返回值正是验证码图片。每次重新请求,都会发送一个新的验证码图片。看到这里,图片这一块的问题就解决了。我们可以选择再次过滤图片请求。

然后我们在网页上填写验证码,浏览器会将验证码发送给服务器验证。在开发人员工具中可以看到,这次的请求是https://passport.baidu.com/v2/?checkvcode&token=7ddcb9b9dd7b57623a77730c53b4df76&tpl=mn&apiver=v3&tt=1491499485871&verifycode=BFIM&codestring=tcG3907c1deb2eac174026314a24301df7f5820430750017e35&callback=bd__cbs__66bgjs,verifycode参数正是我们填写的验证码,剩下的参数都已经介绍过了。这次请求返回的结果会提示验证码输入是否正确。

获取密钥

浏览器还会发送请求https://passport.baidu.com/v2/getpublickey?token=571fd331d62e4c8dc56c4c9a8788e0b8&tpl=mn&apiver=v3&tt=1491559255612&gid=027CF18-F8F4-47EB-BD7C-A48337DD5F8F&callback=bd__cbs__m915m4来获取加密密码的密钥。

请求的结果就是下面的JSONP,包含了公钥pubkey和密钥key。

bd__cbs__ksjbq7({"errno":'0',"msg":'',"pubkey":'-----BEGIN PUBLIC KEY-----\nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDXN3F7epcT2k2yjuw95Nd3iEDS\nz04mTwPUAOaZIQ+JWtawDWMh6+hpwnT8STs1fa5CZwb1L\/nam4zqu\/Y4zETCp\/uL\nSl8\/6jdNsjVtiyq+IlQ0IkmPHiSk022BfBw0RGrSMUGuPPvdjy0eJ5a5pzRYWfK7\nvJ0QdYEdTovg7hm70QIDAQAB\n-----END PUBLIC KEY-----\n',"key":'KTS4sxpzVAnKxSxAej7ZfPgZE5neIy85'})

最终登录

当验证码填写正确的时候,我们就可以点击登录按钮登录了。这次会向https://passport.baidu.com/v2/api/?login发送一个POST请求,请求体就是登录所需要的全部信息了。

这些信息非常多,不过所有所需信息都在上面解释过了。唯一需要注意的就是password参数,这需要通过上面获取的密钥进行加密。非常遗憾的是,具体的加密算法我没有找到。看那些参数的名字我猜应该是RSA加密,可惜我没有从百度的一大堆JS中找到那段加密代码。


   apiver: v3
   callback: parent.bd__pcbs__6j4pna
   charset: utf-8
   codestring: tcG0407c116b36dc11202ae14e24301427f443077f047e16
   countrycode: 
   crypttype: 12
   detect: 1
   dv: MDEwAAoAyAAKAIAACAAAAF0HLFwIAFcjL5-f3lKfG9Nz7y7PS6s3kzZDthxYCACLqnvXF69nt3eXQ5t7q0-Pb4tDk1ObX49rr3ujY69vq2-_bBQIABMvLy8EBAgAGy8nJxkK0FQIACMvLypHWOjiiBAIABsnJy8r_zQICABDKysrKrq6ur_SzX1wICjsP
   gid: E2D73BA-FC75-44B1-A051-BA0E6B4F9ED9
   idc: 
   isPhone: 
   loginmerge: true
   logintype: dialogLogin
   logLoginType: pc_loginDialog
   mem_pass: on
   password: k2KCYNYLju5rt08imdZGdavn62s71kGnHYiALR%2FmZMmKfw2WgkNdkuddhqIm7QtSokqs84nDqyBh67cZRUV79iAEllJjO0l3lq1RMBmR49hMS1iKsIFiPUe%2F7NkooiVvaYCDqtZH1tHw3AtUkVKuL9O9lHswDDn%2Bwy9WTs%3D
   ppui_logintime: 91424
   quick_user: 0
   rsakey: 8qbRUQebUUsasdmeawvQNIAGvJqgT3DD
   safeflg: 0
   splogin: rate
   staticpage: https%3A%2F%2Fwww.baidu.com%2Fcache%2Fuser%2Fhtml%2Fv3Jump.html
   subpro: 
   token: 422d13308efaf3fb8aa05606c13147cc
   tpl: mn
   tt: 1491560392290
   u: https%3A%2F%2Fwww.baidu.com%2F
   username: %E5%86%B7%E6%BC%A0%E5%B0%98%E4%B8%96
   verifycode: %E6%9A%82%E5%81%9C

所以这篇文章只能到这里结束了。不过现在百度账号的安全机制也比较完善了,基本上绕不过验证码这道工序,也就是说无论如何都必须人工登录。所以有这功夫研究登录过程不如直接把BDUSS参数复制过来省事,而且也更加安全。

参考资料

http://baogege.info/2016/04/21/baidu-login-with-httpclient/

https://zhuanlan.zhihu.com/p/25577023

相关文章
|
自然语言处理 BI 数据处理
【数据对比】综合分析百度情感分析以及华为情感分析的差异,我有了如下结果
【数据对比】综合分析百度情感分析以及华为情感分析的差异,我有了如下结果
277 0
|
监控 JavaScript 前端开发
百度统计分析埋点最佳实战篇
百度统计分析埋点最佳实战篇
1680 0
百度统计分析埋点最佳实战篇
|
9月前
|
定位技术 API 容器
百度地图覆盖物加载svg图片的实战案例分析
百度地图覆盖物加载svg图片的实战案例分析
383 0
|
9月前
|
数据可视化 大数据 关系型数据库
百度Echarts消防训练成绩大数据可视化综合分析系统开发实录(2)雷达图表格梯次排列互动篇
百度Echarts消防训练成绩大数据可视化综合分析系统开发实录(2)雷达图表格梯次排列互动篇
55 0
|
9月前
|
JSON 数据可视化 前端开发
百度Echarts消防训练成绩大数据可视化综合分析系统开发实录(1)饼图表格互动篇
百度Echarts消防训练成绩大数据可视化综合分析系统开发实录(1)饼图表格互动篇
51 0
百度Echarts消防训练成绩大数据可视化综合分析系统开发实录(1)饼图表格互动篇
百度飞浆batch分析
百度飞浆batch分析
89 0
|
数据采集
百度蜘蛛ip段大全分析爬虫式
百度蜘蛛ip段大全分析爬虫式:https://www.20200824.com
341 0
|
数据采集
百度图片参数分析
爬虫这几年应用场景越来越广泛,数据越来越重要。今天vike和你们一起来看看百度图片参数。本文仅供技术交流,如有侵权请联系作者删除
348 0
百度图片参数分析
|
人工智能 区块链 数据安全/隐私保护
kinmall分析百度亮剑区块链能否险中求胜?
在BAT的长期竞争中,百度的落伍已然是不争的事实。在错过移动互联网的船票后,百度正在尽可能地去把握未来科技竞争的制高点,人工智能是百度关键技术之一,区块链同样也是。
1657 0