前言
現(xiàn)在是2019年10月,正在用python模擬知乎登錄
隨便在網(wǎng)上一查先嬉,模擬知乎登錄時的接口都是這樣的:
別人分析時的登錄接口
心中一喜沟堡,看起來好簡單栋盹,趕快F12打開瀏覽器查一下:
為防止登錄后頁面會重新加載夺谁,登錄接口被沖洗看不見托猩,所以首先需要勾選[Preserve log]:
勾選
先選擇手機(jī)號登錄碧磅,查看登錄接口:
登錄接口
雖然沒截完全碘箍,但還是看的出來,提交的數(shù)據(jù)從以前的明文字段變成了一串字符串鲸郊,應(yīng)該是按照自己內(nèi)部的約定邏輯進(jìn)行了加密丰榴,防止信息泄露,拿到加密信息后秆撮,再解密一次四濒,以加強(qiáng)信息的安全性
那我們需要分析一下這段加密信息
分析
仔細(xì)看一下登錄接口:
登錄
在登錄時訪問的完整請求是https://www.zhihu.com/api/v3/oauth/sign_in
,在登錄提交請求時還通過path訪問了其他資源/api/v3/oauth/sign_in
分析完html頁面,沒有找到有關(guān)信息盗蟆,無奈只能從js下手去看源碼:
- 查找
Ctrl + Shift + f 全局搜索v3/oauth/sign_in
查找結(jié)果 -
分析源碼
1)雙擊查找結(jié)果進(jìn)入文件戈二,Ctrl + f 局部查找``v3/oauth/sign_in`
局部查找結(jié)果
文件中含有我們要的信息,先點(diǎn)擊當(dāng)前文件左下角{} 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里的是什么內(nèi)容基本完成了骨饿,看到這基本源碼已經(jīng)沒有可以下手的地方了亏栈,剩下的就需要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
賬號和密碼我打碼了宏赘,其他都是登錄時抓取的字段:
參數(shù) | 值 | 含義 | 處理 |
---|---|---|---|
captcha | "" | 驗證碼模塊 | 當(dāng)驗證碼出現(xiàn)時才有值 |
clientId | c3cef7c66a1843f8b3a9e6a1e3160e20 | "" | 固定 |
grantType | password | 認(rèn)證類型 | 固定 |
lang | en | 語言 | 不知道 |
password | ****** | 密碼 | 輸入 |
refSource | other_https://www.zhihu.com/signin?next=%2F | 頁面鏈接 | 固定 |
signature | d1cfffa2bae9bf0f03dcc6fd67da8068c0cfff01 | 簽名 | 構(gòu)造 |
source | com.zhihu.web | 來源 | 固定 |
timestamp | 1571271780959 | 時間戳 | 生成 |
username | +86*********** | 賬號 | 輸入 |
utmSource | undefined |
關(guān)于這些含義绒北,有一些是可以看出來的,一些不知道含義的查過資料整理出來