百度貼吧登錄過程分析

分析登錄過程的話有很多工具可供選擇,Fiddler等抓包工具都是很好的選擇。不過這次不需要,由于登錄過程需要在瀏覽器上完成,所以我們這次直接使用瀏覽器的F12開發人員工具。火狐、Chrome、Edge的F12工具都差不多。這次我就以Edge的為例來說明。

熟悉調試工具

一開始由于我的調試姿勢不正確,所以浪費了很多時間。在這里我把我的人生經驗分享一下。其實很簡單,就是一句話:瀏覽器必須進入隱私模式。因為瀏覽器有可能保存以前的登錄信息、cookie等,對分析工作造成混淆影響。所以我們必須不斷地調試不斷地清除數據。不妨直接進入隱私模式,這樣所有東西都是新的,方便我們分析。

來上兩張圖看看。首先是調試工具。在這里我們主要看的就是cookie的值。網頁登錄的每一步驟我們都需要看看新增加了什么cookie,哪些cookie在登錄過程中是必要的。這需要我們一步一步分析。

調試程序

第二個部分就是網絡標簽。在這里就是我們主要分析的地方了。登錄過程中哪一部分發送了什么類型的數據、發到了哪個URL、服務器返回了什么結果,都需要我們分析,然后模擬出登錄過程。這里橫排的幾個按鈕還可以清除緩存、cookie、記錄等等,如果我們需要重復分析,這幾個按鈕是非常方便的。

網絡標簽

這里有一個小技巧,那就是內容類型這里。一個網頁常常包含了很多靜態文件、需要從很多CDN返回圖片等,但是這些都是和登錄內容無關的東西。所以我們可以在這里選擇需要查看的內容,圖片之類的幾乎完全可以忽略(當然如果遇到驗證碼,還是需要分析一下)。

內容過濾

如果還有什么不熟悉的地方,最好自己打開幾個網頁,然后用開發人員工具看看。一個合格的程序員,利用調試工具的技能肯定是必不可少的。另外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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,663評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,125評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,506評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,614評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,402評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,934評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,021評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,168評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,690評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,596評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,784評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,288評論 5 357
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,027評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,404評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,662評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,398評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,743評論 2 370

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,776評論 18 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,596評論 25 707
  • 早餐燕麥蛋花粥 午餐菜心秋葵半碗飯 晚餐絲瓜湯 半碗飯 魚膠湯 生菜 荷蘭豆 加餐蘋果一個,橙子兩個 上午兩條推送...
    想去歐洲游學的pipi閱讀 213評論 0 0
  • 先創建一個倉庫 如:Work cd /svn 在你的svn 目錄下 svnadmin create Work ...
    JoeWcc閱讀 756評論 0 2
  • 今天偶然間了解到個有趣的現象,是關于軟件著作權的。 軟件著作權主要是為保護軟件原創性的,如APP。開發的軟件登記軟...
    瓦力求索閱讀 548評論 1 0