知乎登錄接口字段解密分析

前言

現(xiàn)在是2019年10月,正在用python模擬知乎登錄

隨便在網(wǎng)上一查,模擬知乎登錄時的接口都是這樣的:

別人分析時的登錄接口

心中一喜,看起來好簡單,趕快F12打開瀏覽器查一下:
為防止登錄后頁面會重新加載,登錄接口被沖洗看不見,所以首先需要勾選[Preserve log]:
勾選

先選擇手機號登錄,查看登錄接口:
登錄接口

雖然沒截完全,但還是看的出來,提交的數(shù)據(jù)從以前的明文字段變成了一串字符串,應(yīng)該是按照自己內(nèi)部的約定邏輯進行了加密,防止信息泄露,拿到加密信息后,再解密一次,以加強信息的安全性

那我們需要分析一下這段加密信息

分析

仔細看一下登錄接口:


登錄

在登錄時訪問的完整請求是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é)果進入文件,Ctrl + f 局部查找``v3/oauth/sign_in`


    局部查找結(jié)果

文件中含有我們要的信息,先點擊當(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)于這些含義,有一些是可以看出來的,一些不知道含義的查過資料整理出來

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容