前言
现在是2019年10月,正在用python模拟知乎登录
随便在网上一查,模拟知乎登录时的接口都是这样的:
心中一喜,看起来好简单,赶快F12打开浏览器查一下:
为防止登录后页面会重新加载,登录接口被冲洗看不见,所以首先需要勾选[Preserve log]:
勾选
先选择手机号登录,查看登录接口:
登录接口
虽然没截完全,但还是看的出来,提交的数据从以前的明文字段变成了一串字符串,应该是按照自己内部的约定逻辑进行了加密,防止信息泄露,拿到加密信息后,再解密一次,以加强信息的安全性
那我们需要分析一下这段加密信息
分析
仔细看一下登录接口:
登录
在登录时访问的完整请求是https://www.zhihu.com/api/v3/oauth/sign_in
,在登录提交请求时还通过path访问了其他资源/api/v3/oauth/sign_in
分析完html页面,没有找到有关信息,无奈只能从js下手去看源码:
- 查找
Ctrl + Shift + f 全局搜索v3/oauth/sign_in
查找结果 -
分析源码
1)双击查找结果进入文件,Ctrl + f 局部查找``v3/oauth/sign_in`
局部查找结果
文件中含有我们要的信息,先点击当前文件左下角{} Pretty Print
格式化代码,方便查看
function p(e) {
return function(t) {
return t({
API: {
types: c.LOGIN,
endpoint: "v3/oauth/sign_in",
method: "POST",
fetchOptions: {
credentials: "include",
zsEncrypt: !0,
bodyType: "form",
body: Object(r.decamelizeKeys)(e)
}
},
NOTIFICATION: !1
}).then(null, function(e) {
e && e.err ? 120005 === e.err.payload.code && t(Object(i.a)()) : e.payload && 120001 === e.payload.code && t(Object(a.h)("页面已过期,请刷新重试", "red"))
})
}
}
源码长这样,只要知道放在body里的是什么内容基本完成了,看到这基本源码已经没有可以下手的地方了,剩下的就需要debug完成了
2)在线debug,查看加密前信息
debug
看一下具体信息:
具体抓取信息
加密前的字段信息:
captcha: ""
clientId: "c3cef7c66a1843f8b3a9e6a1e3160e20"
grantType: "password"
lang: "en"
password: "******"
refSource: "other_https://www.zhihu.com/signin?next=%2F"
signature: "d1cfffa2bae9bf0f03dcc6fd67da8068c0cfff01"
source: "com.zhihu.web"
timestamp: 1571271780959
username: "+86***********"
utmSource: undefined
账号和密码我打码了,其他都是登录时抓取的字段:
参数 | 值 | 含义 | 处理 |
---|---|---|---|
captcha | "" | 验证码模块 | 当验证码出现时才有值 |
clientId | c3cef7c66a1843f8b3a9e6a1e3160e20 | "" | 固定 |
grantType | password | 认证类型 | 固定 |
lang | en | 语言 | 不知道 |
password | ****** | 密码 | 输入 |
refSource | other_https://www.zhihu.com/signin?next=%2F | 页面链接 | 固定 |
signature | d1cfffa2bae9bf0f03dcc6fd67da8068c0cfff01 | 签名 | 构造 |
source | com.zhihu.web | 来源 | 固定 |
timestamp | 1571271780959 | 时间戳 | 生成 |
username | +86*********** | 账号 | 输入 |
utmSource | undefined |
关于这些含义,有一些是可以看出来的,一些不知道含义的查过资料整理出来
网友评论