大綱
- 前言
- 分析加密引數
- uaTokenwebUmidToken
- 發送模擬請求
- 對比解決障礙
- 瀏覽器發送postman模仿
- 小結
- 撰寫代碼
- pythonjava
很多人學習python,不知道從何學起,
很多人學習python,掌握了基本語法過后,不知道在哪里尋找案例上手,
很多已經做案例的人,卻不知道如何去學習更加高深的知識,
那么針對這三類人,我給大家提供一個好的學習平臺,免費領取視頻教程,電子書籍,以及課程的源代碼!??¤
QQ群:623406465
前言
- 很久以前研究過csdn的模擬登錄,記得那個時候的csdn登錄還是一個`form``表單,然后參雜著一些引數,使用遍歷input元素把表單各個引數拿下來,存下直接post即可登陸成功,
- 前幾天再次看了下親愛的csdn,突然發現多了這連個引數,這就勾起了我的性趣和好奇心:我靠,就一年沒見,csdn也搞這么一大串加密?并且以看兩種加密方式還不一樣哇?有點東西!
- 下面就分享一下分析的程序!由于時間有限,只能每晚抽點時間研究,如果大家感覺不夠深入或者講的不好請諒解!大家也可以看另一篇破解的文章
爬蟲之網易云js解密剖析
使用工具:
- 谷歌瀏覽器
- postman發送請求除錯
- fidder抓包
分析加密引數
可以根據上圖分析得知:有uaToken 和webUmidToken兩個token,
分析引數肯定是要打斷點的,一般有直接搜索,查看js呼叫堆疊,和hook查找找到引數位置,我是利用搜索找引數,
分析前先做好一些預備作業,多發幾個請求,重繪頁面,你會發現:
- 不重繪頁面的話uaToken不會變化,
- webUmidToken每次都不一樣,
- 每次cookie不變,
uaToken
- 查找uaToken發現這段代碼比較詭異,打斷點debug,發現沒錯,這就是我們要找的!點擊F11,進入子函式查看發生了什么,
- 進去發現它執行e()函式,再次F11查看,
- 通過校驗發現e函式其實就是一個加密函式,關鍵是它跟我們的核心資料(賬號、cookie、密碼等)無關,所以這個加密資料空有其架勢無作用,你可以保存一個直接一直使用一個(如果可逆后臺可能會根據字串進行校驗是否符合規則),
webUmidToken
每次重繪都會發現他在變化,鑒于前面的token都沒啥作用,我大膽猜測,他也不影響登錄!就先不debug分析了,
,
發送模擬請求
- 通過瀏覽器的頭發送請求資訊,你會發現:不管你怎么模擬都是各種錯誤,要么型別錯誤,要么繁忙,要么型別錯誤,(可以看得出csdn是java后臺,個人感覺介面例外處理的還有問題,暴露方法了)
對比解決障礙
有時候瀏覽器太過于局限,用fidder找到其中不同之處,用瀏覽器和postman發送請求找到其中引數的不同之處,
瀏覽器發送
postman模仿
- 你可以發現其中主要是格式區別,和部分頭資訊瀏覽器不顯示需要加上,然后發送請求檢驗!
小結
- 后來發現其實那兩個token,和cookie為空都沒有關系!(可能掃碼登錄驗證的token,有興趣可以自行分析)
- cookie也沒有限制,在登錄時候根本不要cookie都可以,按理論來說應該進入頁面回傳一組cookie,用這個cookie訪問登錄介面有效才行,顯然csdn沒有,
- 分析一波約等于白分析,登錄機制太簡單了,
- content-length別亂加,加錯了它后臺校驗或出錯
- 也就是登錄著需要type,賬號密碼即可,其他設為空都行,要注意的就是引數發送的格式!raw文本,
- 以后見到類似先測驗登錄,不能盲目分析,雖然能夠增加經驗,但是有點浪費時間,,像csdn這次就是,,啥都沒用,
撰寫代碼
思路:訪問登錄介面,用回傳的cookie訪問我關注的人的文章!
python
import requests from bs4 import BeautifulSoup url='https://passport.csdn.net/v1/register/pc/login/doLogin' header={'user-agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36', 'referer':'https://passport.csdn.net/login', 'origin':'https://passport.csdn.net', 'content-Type':'application/json;charset=UTF-8', 'x-requested-with':'XMLHttpRequest', 'accept':'application/json, text/plain, */*', 'accept-encoding':'gzip, deflate, br', 'accept-language':'zh-CN,zh;q=0.9', 'connection': 'keep-alive' ,'Host': 'passport.csdn.net' } data='{"loginType":"1","pwdOrVerifyCode":"你的密碼",' \ '"userIdentification":"你的賬號","uaToken":"",' \ '"webUmidToken":""}' req=requests.post(url,data=https://www.cnblogs.com/sn8888/archive/2020/10/22/data,headers=header) cookies = requests.utils.dict_from_cookiejar(req.cookies) res=req.text print(res) print(req.status_code) print(cookies) url2='https://blog.csdn.net/nav/watchers' req2=requests.get(url2,cookies=cookies) soup=BeautifulSoup(req2.text,'lxml') print(soup.text)
java
依賴jsoup、fastjson
package csdn; import java.io.IOException; import java.util.HashMap; import java.util.Map; import java.util.Scanner; import org.jsoup.Connection; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; import com.alibaba.fastjson.JSONObject; import org.jsoup.Connection.Response; public class csdn { static Map<String, String> cookies; private static void dologin(String username, String password) throws IOException { String url = "https://passport.csdn.net/v1/register/pc/login/doLogin"; Map<String, String> data = https://www.cnblogs.com/sn8888/archive/2020/10/22/new HashMap<String, String>(); data.put("loginType", "1"); data.put("pwdOrVerifyCode", password); data.put("userIdentification", username); data.put("loginType", "1"); data.put("uaToken", ""); data.put("webUmidToken", ""); String dataString = JSONObject.toJSONString(data); JSONObject JSON = JSONObject.parseObject(dataString); Connection con = Jsoup.connect(url).header("user-agent", "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36") .header("referer", "https://passport.csdn.net/login").header("origin", "https://passport.csdn.net") .header("content-Type", "application/json;charset=UTF-8").header("x-requested-with", "XMLHttpRequest") .header("accept", "application/json, text/plain, */*").header("accept-encoding", "gzip, deflate, br") .header("accept-language", "zh-CN,zh;q=0.9").header("connection", "keep-alive") .header("Host", "passport.csdn.net").header("Cookie", "").requestBody(JSON.toJSONString()) .ignoreContentType(true)// 非常重要 .maxBodySize(1000).method(Connection.Method.POST); System.out.println(JSON.toJSONString()); Response response = con.execute(); cookies = response.cookies(); System.out.println(response.body()); } public static void main(String[] args) throws IOException { // TODO Auto-generated method stub Scanner sc = new Scanner(System.in); System.out.println("輸入賬號:"); String username = sc.next(); System.out.println("輸入密碼:"); String password = sc.next(); dologin(username, password); } }
如有錯誤請指教!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/185758.html
標籤:其他
