百度貼吧登錄過程分析

分析登錄過程的話有很多工具可供選擇串结,F(xiàn)iddler等抓包工具都是很好的選擇。不過這次不需要舅列,由于登錄過程需要在瀏覽器上完成肌割,所以我們這次直接使用瀏覽器的F12開發(fā)人員工具≌室火狐把敞、Chrome、Edge的F12工具都差不多榨惠。這次我就以Edge的為例來說明奋早。

熟悉調(diào)試工具

一開始由于我的調(diào)試姿勢不正確,所以浪費了很多時間赠橙。在這里我把我的人生經(jīng)驗分享一下伸蚯。其實很簡單,就是一句話:瀏覽器必須進入隱私模式简烤。因為瀏覽器有可能保存以前的登錄信息、cookie等摇幻,對分析工作造成混淆影響横侦。所以我們必須不斷地調(diào)試不斷地清除數(shù)據(jù)挥萌。不妨直接進入隱私模式,這樣所有東西都是新的枉侧,方便我們分析引瀑。

來上兩張圖看看。首先是調(diào)試工具榨馁。在這里我們主要看的就是cookie的值憨栽。網(wǎng)頁登錄的每一步驟我們都需要看看新增加了什么cookie,哪些cookie在登錄過程中是必要的翼虫。這需要我們一步一步分析屑柔。

調(diào)試程序

第二個部分就是網(wǎng)絡(luò)標(biāo)簽。在這里就是我們主要分析的地方了珍剑。登錄過程中哪一部分發(fā)送了什么類型的數(shù)據(jù)掸宛、發(fā)到了哪個URL、服務(wù)器返回了什么結(jié)果招拙,都需要我們分析唧瘾,然后模擬出登錄過程。這里橫排的幾個按鈕還可以清除緩存别凤、cookie饰序、記錄等等,如果我們需要重復(fù)分析规哪,這幾個按鈕是非常方便的求豫。

網(wǎng)絡(luò)標(biāo)簽

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

內(nèi)容過濾

如果還有什么不熟悉的地方罩缴,最好自己打開幾個網(wǎng)頁,然后用開發(fā)人員工具看看层扶。一個合格的程序員箫章,利用調(diào)試工具的技能肯定是必不可少的。另外Edge的開發(fā)人員工具是中文的镜会,對于英文不好的同學(xué)還是很友好的檬寂。

登錄過程分析

獲取BAIDUID

按照上面的技巧,打開一個隱私模式網(wǎng)頁戳表,然后把開發(fā)人員工具調(diào)教到合適的位置桶至。然后進入百度主頁面www.baidu.com昼伴。回到調(diào)試工具看看瀏覽器在這一步做了什么镣屹。

首先第一步是訪問了https://www.baidu.com/ 這個地址圃郊,作用是設(shè)置了BAIDUID這個cookie。后續(xù)的請求我們都需要附上這個cookie女蜈。該cookie只有在附有UA的時候才會返回持舆。

獲取登錄token

然后我們點擊百度首頁右上角的登錄,看看會發(fā)生什么伪窖。這一步步訪問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 這個地址逸寓,可以看到它帶了很多參數(shù)。其中只有兩個參數(shù)需要我們注意:一是tt參數(shù)惰许,代表當(dāng)前時間的毫秒數(shù)席覆;二是gid,也就是GUID汹买,我們用Python代碼就能生成佩伤。其他參數(shù)不變就行了。

這一步如果成功的話晦毙,服務(wù)器就會返回一個JSONP生巡。這里最重要的就是data中的token了。我們后續(xù)的登陸請求就需要這個玩意见妒。

bd__cbs__m6q67t({
   "errInfo": {
      "no": "0"
   },
   "data": {
      "rememberedUserName": "",
      "codeString": "",
      "token": "7ddcb9b9dd7b57623a77730c53b4df76",
      "cookie": "1",
      "usernametype": "",
      "spLogin": "rate",
      "disable": "",
      "loginrecord": {
         "email": [],
         "phone": []
      }
   }
})

獲取驗證碼

這時候頁面上應(yīng)該已經(jīng)彈出登錄對話框了孤荣,有時候好像還是直接在頁面上登錄。這幾種登錄方式?jīng)]有區(qū)別须揣,只不過上面的logintype參數(shù)可能會有不同的值盐股,這不會影響我們的登錄過程。

在登錄框中輸入用戶名耻卡,當(dāng)輸入密碼的時候會彈出驗證碼疯汁。然后我們返回開發(fā)工具看看瀏覽器做了什么。

這次發(fā)出的請求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參數(shù)。這個dv參數(shù)是登錄頁面隱藏表單域的一個部分溃卡,用的時候把它取出來即可溢豆。變化的只有一個編碼的用戶名參數(shù),剩下的基本都是固定值瘸羡。

我們看到這個請求用到了用戶名漩仙,所以對于每個不同的用戶名,都會重新發(fā)送一次請求。如果你在登錄框中更改了用戶名讯赏,那么就會瀏覽器就會重新發(fā)送請求垮兑,順便驗證碼也會刷新。

請求返回的結(jié)果同樣是JSONP漱挎。重點就是codeString和vcodetype兩個參數(shù)了。

bd__cbs__p5fzjy({
   "errInfo": {
      "no": "0"
   },
   "data": {
      "codeString": "tcG7d07e2dcb2f8c18d02dc14669801a07b9bcd440666043195",
      "vcodetype": "46dbjrl3l5wu82vPoSiQz/tmNWQIm1xOR0JMD0I7U/UjpgY6Sye/mCtpzMJEvJTK3PJ2hGntFKiNnDNLxjd3bmxt7FlJ3yaomPUj",
      "userid": "",
      "mobile": ""
   }
})

由于我們把圖片的請求過濾了雀哨,所以調(diào)試工具只給出了這些請求磕谅。下面我們把圖片那一項選中,然后在網(wǎng)頁上選擇更新驗證碼雾棺,看看會出現(xiàn)什么膊夹。

這次請求圖片的URL是https://passport.baidu.com/cgi-bin/genimage?tcG9c07c1deb266c1790286146443019a7f46b1430702017e69,這里的參數(shù)正是上面的codeString捌浩。而這個請求的返回值正是驗證碼圖片放刨。每次重新請求,都會發(fā)送一個新的驗證碼圖片尸饺〗常看到這里,圖片這一塊的問題就解決了浪听。我們可以選擇再次過濾圖片請求螟碎。

然后我們在網(wǎng)頁上填寫驗證碼,瀏覽器會將驗證碼發(fā)送給服務(wù)器驗證迹栓。在開發(fā)人員工具中可以看到掉分,這次的請求是https://passport.baidu.com/v2/?checkvcode&token=7ddcb9b9dd7b57623a77730c53b4df76&tpl=mn&apiver=v3&tt=1491499485871&verifycode=BFIM&codestring=tcG3907c1deb2eac174026314a24301df7f5820430750017e35&callback=bd__cbs__66bgjs,verifycode參數(shù)正是我們填寫的驗證碼克伊,剩下的參數(shù)都已經(jīng)介紹過了酥郭。這次請求返回的結(jié)果會提示驗證碼輸入是否正確。

獲取密鑰

瀏覽器還會發(fā)送請求https://passport.baidu.com/v2/getpublickey?token=571fd331d62e4c8dc56c4c9a8788e0b8&tpl=mn&apiver=v3&tt=1491559255612&gid=027CF18-F8F4-47EB-BD7C-A48337DD5F8F&callback=bd__cbs__m915m4來獲取加密密碼的密鑰愿吹。

請求的結(jié)果就是下面的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'})

最終登錄

當(dāng)驗證碼填寫正確的時候洗搂,我們就可以點擊登錄按鈕登錄了消返。這次會向https://passport.baidu.com/v2/api/?login發(fā)送一個POST請求,請求體就是登錄所需要的全部信息了耘拇。

這些信息非常多撵颊,不過所有所需信息都在上面解釋過了。唯一需要注意的就是password參數(shù)惫叛,這需要通過上面獲取的密鑰進行加密倡勇。非常遺憾的是,具體的加密算法我沒有找到嘉涌∑扌埽看那些參數(shù)的名字我猜應(yīng)該是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

所以這篇文章只能到這里結(jié)束了扔役。不過現(xiàn)在百度賬號的安全機制也比較完善了帆喇,基本上繞不過驗證碼這道工序,也就是說無論如何都必須人工登錄亿胸。所以有這功夫研究登錄過程不如直接把BDUSS參數(shù)復(fù)制過來省事坯钦,而且也更加安全。

參考資料

http://baogege.info/2016/04/21/baidu-login-with-httpclient/

https://zhuanlan.zhihu.com/p/25577023

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末侈玄,一起剝皮案震驚了整個濱河市婉刀,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌序仙,老刑警劉巖突颊,帶你破解...
    沈念sama閱讀 222,378評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異潘悼,居然都是意外死亡律秃,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,970評論 3 399
  • 文/潘曉璐 我一進店門挥等,熙熙樓的掌柜王于貴愁眉苦臉地迎上來友绝,“玉大人,你說我怎么就攤上這事肝劲∏停” “怎么了?”我有些...
    開封第一講書人閱讀 168,983評論 0 362
  • 文/不壞的土叔 我叫張陵辞槐,是天一觀的道長掷漱。 經(jīng)常有香客問我,道長榄檬,這世上最難降的妖魔是什么卜范? 我笑而不...
    開封第一講書人閱讀 59,938評論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮鹿榜,結(jié)果婚禮上海雪,老公的妹妹穿的比我還像新娘。我一直安慰自己舱殿,他們只是感情好奥裸,可當(dāng)我...
    茶點故事閱讀 68,955評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著沪袭,像睡著了一般湾宙。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,549評論 1 312
  • 那天侠鳄,我揣著相機與錄音埠啃,去河邊找鬼。 笑死伟恶,一個胖子當(dāng)著我的面吹牛碴开,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播知押,決...
    沈念sama閱讀 41,063評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼叹螟,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了台盯?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,991評論 0 277
  • 序言:老撾萬榮一對情侶失蹤畏线,失蹤者是張志新(化名)和其女友劉穎静盅,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體寝殴,經(jīng)...
    沈念sama閱讀 46,522評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡蒿叠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,604評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了蚣常。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片市咽。...
    茶點故事閱讀 40,742評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖抵蚊,靈堂內(nèi)的尸體忽然破棺而出施绎,到底是詐尸還是另有隱情,我是刑警寧澤贞绳,帶...
    沈念sama閱讀 36,413評論 5 351
  • 正文 年R本政府宣布谷醉,位于F島的核電站,受9級特大地震影響冈闭,放射性物質(zhì)發(fā)生泄漏俱尼。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,094評論 3 335
  • 文/蒙蒙 一萎攒、第九天 我趴在偏房一處隱蔽的房頂上張望遇八。 院中可真熱鬧,春花似錦耍休、人聲如沸刃永。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,572評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽揽碘。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間雳刺,已是汗流浹背劫灶。 一陣腳步聲響...
    開封第一講書人閱讀 33,671評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留掖桦,地道東北人本昏。 一個月前我還...
    沈念sama閱讀 49,159評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像枪汪,于是被迫代替她去往敵國和親涌穆。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,747評論 2 361

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

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