继前两次对数据爬取过程中对 js 的分析,这次我们针对网页登录学习一下有关 js 的应用,选择百度登录来分析提交表单中的各个参数。研究学习时间比较长,为了能够讲解清楚,分为两篇来写。

一、前言

工具的使用:之前分析 js 加密,主要是使用 Chrome 的开发者工具,当时网页分析过程中觉得很 OK,直到学习百度模拟登录时,发现仅靠 Chrome 开发者工具无法有效分析 js 代码。因此本篇将配合使用开发者工具以及抓包工具 Charles,这也是我学习过程中的小发现。

关于 Charles 的安装,网上有很多教程,网上关于 Charles 的使用教程大部分是关于手机上如何抓取 https 协议包,而关于windows 系统下抓取浏览器访问 Web 应用的 https 协议包的配置和操作比较少。大家如果安装了 Charles,想要进行 PC 端浏览器 https 协议包的分析,可以参考该篇博文进行配置。

二、网页分析

首先打开 Chrome,访问百度,点击登录按钮。

输入账号和密码,点击登录。根据以往的分析经验,我们在开发者工具 Network 栏查看 XHR 和 Doc,找到模拟登录 POST 的链接。

我们想要模拟登录成功,目标主要有两个:一是构建 POST 请求所需的 Headers;二是构建 Form Data。

1.构建 Headers

仔细查看 Requests Headers信息,和登录页面的 GET 请求对比发现除了 Cookie 不同之外,并没有别的什么特殊要求,所以我们按照最基本的要求来构建 Headers。

2.构建 Form Data


退出帐号,清除缓存后,再次登录,观察 POST 请求的 Form Data 数据,与上一次的记录进行比较,对比标记哪些是变化的。通过多次对比,最后发现:

staticpage: https://www.baidu.com/cache/user/html/v3Jump.html
charset: UTF-8
token: 9b76cbbb4933c882de7eb5d1b5da5ae3
tpl: mn
subpro:
apiver: v3
tt: 1560484918581
codestring:
safeflg: 0
u: https://www.baidu.com/
isPhone: false
detect: 1
gid: F64E6A3-034C-4426-9C2D-13D89A818D93
quick_user: 0
logintype: dialogLogin
logLoginType: pc_loginDialog
idc:
loginmerge: true
splogin: rate
username: xxxx
password: xxxxx
mem_pass: on
rsakey: TGiEkUFvpA2i19N9BLfKZrp6Qza2BSp7
crypttype: 12
ppui_logintime: 9116
countrycode:
fp_uid:
fp_info:
loginversion: v4
ds: xxx
tk: xxxx
dv:xxxx
traceid: ECC85E01
callback: parent.bd__pcbs__qyj5vw

其中红色标记的为变化的,这一部分也是我们将要分析的,先简单看一下变化字段有什么含义。

  • token 访问令牌
  • tt 时间戳
  • gid id号
  • username 用户名
  • password 加密后的密码
  • rsakey 看到 RSA 字段,猜想哪里肯定是用到了 RSA 加密
  • ppui_logintime 不清楚
  • ds 不清楚
  • tk 不清楚
  • dv 不清楚
  • traceid 不清楚
  • callback不清楚

那我们就从上往下分析,tt 时间戳最简单,就不做考虑。

token 参数


按照以往的习惯,先是利用开发者工具进行搜索,在一番查询后都没有找到有效信息,最后试着利用 Charles 抓包进行搜索关键字段,终于找到了 token 所在位置。(等到百度模拟登录案例结束之后,进行总结才发现该案例不同于以往的分析,不是从 XHR 中或者 Doc 中找到相关内容,很多参数都是在 js 中发现的,但是开发者工具搜索并不能精确定位,也浪费了不少时间。)


在 https://passport.baidu.com/v2/api/?getapi&tpl=mn&apiver=v3&tt=1560648201405&class=login&gid=FF32A7E-718C-414C-A48A-F4CF60D97CF8&loginversion=v4&logintype=dialogLogin&traceid=&callback=bd__cbs__mj0low 返回的内容中发现了 token 值,不过我们想要获取 token 内容,还需要构建该请求中的必要参数,gid 和 callback参数。

gid 参数


打开相关 js 文件后,继续搜索 gid,看看 gid 是怎么产生的。

通过多次比对,发现 gid 由guideRandom这个函数产生的,接着在脚本中搜索这个函数。

最后找到了 gid 产生的函数,针对函数原型,我们可以利用 execjs 执行 js 代码,或者转换为 Python 代码。

callback 参数

经过多次测试,发现链接中的 callback 值都是以“bd__cbs__”开头,所以如果觉得搜索 callback 关键字太麻烦的话,可以搜索 “bd__cbs__”试一试。


在 js 文件中发现,callback 是由 getUniqueId 函数产生的,那我们继续往下找。

至此,获取 token 值的请求中的必要参数已经构建完毕,另外需要注意的是在发送 get 请求时,要将初次打开百度网页进行登录前的 cookie 保存下来,这次将继续使用,不然 get 请求响应内容不完整。

最终我们找到了 token 参数和 gid 参数,其中对于 callback 参数的分析,后续我们还会有所使用。那么接下来我们继续研究学习 rsakey 参数。

rsakey 参数

在搜索“rsakey”关键字没有结果的情况下,由于事先猜想可能使用了 RSA 加密,因此还会涉及到另一个关键字 pubkey,我们尝试着搜索一下看。(对于 RSA 非对称加密不了解的朋友,可以查看我之前的博客。)

对搜索的结果进行查看。

发现果然采用了 RSA 加密,并且发现了 rsakey 的踪迹。

最终发现了 pubkey 和 rsakey。接下来我们需要发送 get 请求,获取响应结果。我们需要分析https://passport.baidu.com/v2/getpublickey?token=9b76cbbb4933c882de7eb5d1b5da5ae3&tpl=mn&apiver=v3&tt=1560648209058&gid=FF32A7E-718C-414C-A48A-F4CF60D97CF8&loginversion=v4&traceid=&callback=bd__cbs__am8r4v 中必需的参数,细看发现就是我们上述步骤中找到的值,刚好可以拿来使用。记得 Headers 中的 Cookie 继续保留。

既然发现了 pubkey 参数值,那就看看是不是对 password 进行 RSA 加密。

password 参数

搜索 password 关键字,查看相关 js 文件。

结合上文中分析 rsakey 时看到的内容。

可以确定获取 rsakey 时一同返回的 pubkey 值就是 RSA 加密所需要的公钥,因此我们对输入的 password 进行 RSA 加密,返回加密后的数据。我是采用 Python 代码来实现 RSA 加密(关于 RSA 加密,可以参考我之前的博客)。

import base64
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_v1_5    #用于加密def get_password(self):with open('pubkey.pem','rb') as f:pubkey = f.read()rsakey = RSA.import_key(pubkey)cipher = PKCS1_v1_5.new(rsakey)passwd = base64.b64encode(cipher.encrypt(self.password.encode()))return passwd

总结一下:目前我们已经对 token、gid、rsakey 以及 password 分析处理完毕,接下里的参数,我们下一篇再做详细分析。

js 分析——百度模拟登录(一)相关推荐

  1. js 分析——百度模拟登录(二)

    上一篇百度模拟登录(一)主要讲解了 token.gid.rsakey 以及 password 等参数的产生.好了,废话不多说,咱们进入今天的主题,主要分析 ppui_logintime.ds.tk.d ...

  2. python爬虫登录微博_【新手学Python爬虫】微博网页PC端抓包分析和模拟登录

    本帖最后由 杀猪用牛刀 于 2020-4-2 23:59 编辑 首先我是一个python爬虫的新手,模拟登录也是我看b站模拟登录教学加自己琢磨完成的,其中很多分析很粗糙,还希望大家多多包涵:lol 话 ...

  3. 深澜认证协议分析,python模拟登录

    深澜校园网模拟登录 1.分析api 连接到校园网,登录网站自动弹出来 http://172.16.8.6/srun_portal_pc?ac_id=1&theme=basic2 先输入错的密码 ...

  4. node.js爬虫-校园网模拟登录

    爬虫的主要目的是将互联网上的网页下载到本地形成一个互联网内容的镜像备份.当我们将学号.密码及验证码提交后,浏览器首先通过与服务器进行连接,确认我们填的信息正确后,服务器会生成一个sessionId来表 ...

  5. 第26讲:模拟登录爬取实战案例

    在上一课时我们了解了网站登录验证和模拟登录的基本原理.网站登录验证主要有两种实现,一种是基于 Session + Cookies 的登录验证,另一种是基于 JWT 的登录验证,那么本课时我们就通过两个 ...

  6. pyhon3模拟登录百度(2)—— 使用IE11理清百度登录内部逻辑和分析请求发送数据

    依照思路来,第一步就是难点和重点,搞清楚了网页登录的内部逻辑,才能进行下一步的模拟登录. 这里,我的浏览器是IE11.因为已经看了一篇手把手教学分析登录逻辑的文章,所以这里写的要节省多了. 通过分析发 ...

  7. python登录教务系统_强智科技教务系统python爬虫模拟登录分析(湖南)

    强智科技教务系统python爬虫模拟登录分析(湖南) 本文章仅用作于学习 前提:最近期末到来,想第一时间看到新出成绩的,于是就有了爬取学校教务系统自己的成绩并通过Qmsg酱推送到自己QQ上的想法,目前 ...

  8. selenium与python自动化测试模拟登录百度

    将一些必须必要条件准备好 1,安装chorme浏览器 1,安装依赖 sudo apt-get install libxss1 libappindicator1 libindicator7 2,下载go ...

  9. 新浪微博模拟登录分析(含验证码)

    实验室项目结题需要爬取新浪微博的内容做实验,师兄提供了一份已实现的微博爬虫系统.本身可以轻松愉快的完成语聊收集这一部分,然而自己的微博账号始终登录失败.究其原因,结果是登录时需要验证码.而系统对于需要 ...

  10. js逆向加密五邑大学教务系统密码AES实现模拟登录(仅供参考)

    最近下班无聊,就看了一下之前写的教务系统模拟登录代码(python-爬虫),整体逻辑大概自己总结了一下: 1.请求验证码图片. 2.对输入的密码进行加密. 3.封装账号,密码,验证码,发送post请求 ...

最新文章

  1. 灰度图像--图像增强 非锐化掩蔽 (Unsharpening Mask) .
  2. oracle正确维护归档,转载:ORACLE正确删除归档日志的方法
  3. 2012年12月21日所谓世界末日时做的第一个五年规划——成为领域内的专家
  4. php7 mysql json 小程序_微信小程序JSON数组递交PHP服务端解析处理
  5. Python打印指定日期日历
  6. java 内存 静态_java中内存分配以及static的用法(转)
  7. Python学习笔记(三)Python安装及设置环境变量
  8. 快速了解babel工作原理
  9. QuickTest Professionar 快捷键
  10. 如何学习angular.js
  11. Java语言程序设计 基础篇 原书第10版梁勇著 课后编程练习题答案1
  12. linux u盘 随身,教你安装CentOS到U盘,制作随身Linux系统
  13. a+b / a-b / a*b / a/b c++问题题解
  14. 数据字典的作用是什么,它有哪些条目?
  15. 做跨境电商为什么要用海外IP代理呢?
  16. android恶意积分墙代码,传统积分墙的忧虑:微信积分墙刷榜优化分析
  17. python 通信中间件_python 终极篇 ---- 中间件
  18. 计算机专业被check后拒签,签证被Check是怎么一回事?解读美签的几种情况
  19. eversync safari_EverSync安卓版
  20. 英文手写墨水艺术字体

热门文章

  1. 银行卡收单之网络传输加密
  2. PS 使用画笔修复工具去除文字
  3. 经营微博的十个经典案例
  4. oss上传判断_React实现阿里云OSS上传文件的示例
  5. 【蓝桥杯单片机笔记6】PWM脉宽调制信号
  6. roc曲线spss怎么做_如何用SPSS做ROC曲线分析?看这1篇就够了!
  7. Mplay 常用命令及功能简介(ZT)
  8. 【环境配置】octopus + dirt--ubuntu18.04
  9. 华师大的计算机专业属于提前批吗,华东师范大学提前批上海录取线确定
  10. 使用美图秀秀批量处理照片