日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

12306登录分析

發布時間:2023/12/20 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 12306登录分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文制作研究使用

12306的登錄的賬號和密碼都是明文的方式提交的,沒有做任何的加密,但是,直接模擬的話是會失敗.原因是在cookies里面做了文章

首先還是看抓包:

GET https://kyfw.12306.cn/otn/HttpZF/logdevice?algID=SVHBuOPJ2a&hashCode=QtyAPU_LKy3M5hXdOfHzWcsNngNKxEBIg9_3r4Guu8g&FMQw=1&q4f3=zh-CN&VySQ=FGGEB0cu0YuC_ol_icmwwDB0c-ozV84j&VPIf=1&custID=133&VEek=1&dzuS=0&yD16=0&EOQP=49a9fbfe2beb0490836324ceb234fef4&lEnu=1677787516&jp76=52d67b2a5aa5e031084733d5006cc664&hAqN=Win32&platform=WEB&ks0Q=d22ca0b81584fbea62237b14bd04c866&TeRS=1040x1920&tOHY=24xx1080x1920&Fvje=i1l1o1s1&q5aJ=-8&wNLf=99115dfb07133750ba677d055874de87&0aew=Mozilla/5.0%20(Windows%20NT%2010.0;%20Win64;%20x64)%20AppleWebKit/537.36%20(KHTML,%20like%20Gecko)%20Chrome/74.0.3729.169%20Safari/537.36&E3gR=7b12a5199663f2c8fe49a613800c66eb&timestamp=1569745103039 HTTP/1.1 Host: kyfw.12306.cn Connection: keep-alive Pragma: no-cache Cache-Control: no-cache User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36 DNT: 1 Accept: */* Referer: https://kyfw.12306.cn/otn/resources/login.html Accept-Encoding: gzip, deflate, br Accept-Language: zh-CN,zh;q=0.9 Cookie: JSESSIONID=BF45E1688711F0463042C25E83C0B0A2; BIGipServerotn=200278538.50210.0000; route=6f50b51faa11b987e576cdb301e545c4


是這么一串的東西,實際實際上是記錄了瀏覽器的一些信息加密成的.

分析:
首先找到加密的代碼塊:

完整的js加密在https://kyfw.12306.cn/otn/HttpZF/GetJS中,我們需要找到m的各個對象值 :

其實這一部分可以寫死的,不過這個不是我們的目的,我們的目的是分析下加密的過程.

首先"DOMContentLoaded"事件觸發了Qa函數

這里的操作實際是去提取瀏覽器指紋信息

然后初始化

這部分工作做的是獲取硬件的信息:

getMachineCode: function() {return [this.getUUID(), this.getCookieCode(), this.getUserAgent(), this.getScrHeight(), this.getScrWidth(), this.getScrAvailHeight(), this.getScrAvailWidth(), this.md5ScrColorDepth(), this.getScrDeviceXDPI(), this.getAppCodeName(), this.getAppName(), this.getJavaEnabled(), this.getMimeTypes(), this.getPlatform(), this.getAppMinorVersion(), this.getBrowserLanguage(), this.getCookieEnabled(), this.getCpuClass(), this.getOnLine(), this.getSystemLanguage(), this.getUserLanguage(), this.getTimeZone(), this.getFlashVersion(), this.getHistoryList(), this.getCustId(), this.getSendPlatform()]},

檢驗瀏覽器的部分基本信息:

隨后將這部分信息放在一個array中getDfpMoreInfo

拿到這些硬件的信息后,進行最終的組裝:

通過hashAlg函數進行一個加密,得到唯一一個串.

這樣就可以得到了正確的url了,拿著這個url去請求,會的正確的參數,并且加到cookies中去.就可以正確的登錄了

最后以為這樣就可以結束了,高興的把代碼改成了再node中可以執行的代碼后,結果發現12306第二天就不能用了,原來hashAlg的加密代碼被改掉了

也就是12306每天都會修改都會hashAlg函數…

這個也導致一個很不友好的BUG:
如果你昨天登陸了12306,今天再來嘗試登陸的話,點擊登陸按鈕會出現沒有反應,因為Getjs這個已經在瀏覽器的緩存里面了,沒有更新到最新的js,但是后臺的校驗方式更新了,用戶體驗極差.

類似的有支付寶的登錄,但是支付寶的登錄會失敗,然后重新請求加密的js代碼.所以規避了這個問題.

所以最后沒有辦法,hashAlg函數被壓縮了,a,b,c,d不能正則替換,只能把完整的Getjs代碼拿出來,然后將不適合再nodejs中的代碼使用正則替換掉,當做字符串用eval執行

eval(js_code)

這樣就解決了js代碼頻繁更新的問題了.

完.

總結

以上是生活随笔為你收集整理的12306登录分析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。