抓包抓得好,監獄進得早,利用Python突破有道雲筆記會員功能
侵權刪除
另外希望有道雲筆記改改bug(關機報錯的)
我還是希望文章不要被刪除,破解和反破解技術是相互發展的。
本文提供分析思路,突破的技術手段,不提供軟體成品,提供原始碼,如果有道雲看到,我希望修補這個漏洞,另外修復一下bug。
很多人學習python,不知道從何學起。 很多人學習python,掌握了基本語法過後,不知道在哪裡尋找案例上手。 很多已經做案例的人,卻不知道如何去學習更加高深的知識。 那麼針對這三類人,我給大家提供一個好的學習平臺,免費領取視訊教程,電子書籍,以及課程的原始碼! QQ群:701698587 歡迎加入,一起討論 一起學習!
前言
之前有人向我要一篇我寫的文章,我很多文章都是留在有道雲筆記上的,我匯出pdf, 發現需要會員,我衝了會員,然後匯出了pdf。後來我想分析一下有道雲筆記是如何控制是否允許markdown匯出pdf,所以有了這篇文章。
分析
我想 pdf 來自兩個地方:
- 網路請求返回,這種請求的時候肯定是進行了身份認證,判斷使用者是否已經衝了會員(cookie),才會從伺服器返回pdf的資料。
- 本地 markdown轉換,這種就只能是有道雲程式裡面有一個開關(是否是會員),是否允許進行轉換,而這個開關的是否閉合肯定是源於一個請求的響應。
經過charles 抓包,發現當我點選匯出pdf 時候,並不會請求到一個pdf資料,所以判斷是第二種情況,那麼關鍵在於我找這個關鍵請求,我猜測響應中具有一個關鍵字就是vip, 我開始在很多請求中尋找返回中具有關鍵字vip的關鍵請求,然後在其下斷點。
因為我衝了會員,所以我是具有會員狀態的。
但是我下完斷點後發現還是具有保持vip狀態,明明請求結果還沒有返回,但是還是保持了我充完會員的狀態,那麼肯定有一個本地資料庫儲存了我是否是會員的狀態,於是我尋找到了對應的資料庫,C:\Users\wshuo\AppData\Local\YNote\Data在這個目錄下:
將其全部刪除,就會重新請求是否是會員的狀態,(後來我發現點選同步就會重新整理狀態)。
終於我下斷點的請求斷下了,那麼這時我再匯出pdf, 發現不能匯出,然後我一個一個放行請求,直到有一個請求放行後發現可以匯出了,說明這個請求就是關鍵請求。
我重新註冊一個無會員的有道雲使用者,然後手動修改charles返回請求結果,發現還是不能將其變為有會員狀態,這可能我手動改的速度太慢,超時了,沒辦法,只能用fiddler的autoResponder來消除這種影響。果然成功了,並且我發現每次點選同步按鈕的時候都會進行這個請求,這種是我想看到的,因為不能每次都要刪除本地資料庫,那就沒有意義了。
會員功能測試
當然這裡測試我都是使用無會員賬號測試的。
匯出pdf:
會員紙張:
會員標識:
還有一些功能沒有測試,由此可以判斷,普通使用者和充完會員的使用者唯一區別只有空間了,其它功能都具有了。
軟體編寫
我不能每次啟動有道雲都開啟fiddler, 後來我想起python mitmdump可以實現修改請求返回結果,簡單的指令碼:
複製程式碼 隱藏程式碼
# mitmdump -s proxServer.py -p 8888 -k -q
import json
import time
tss1 = '3000-01-01'
timeArray = time.strptime(tss1, "%Y-%m-%d")
timeStamp = int(time.mktime(timeArray))*1000
def response(flow):
# print(flow.request.url)
if "http://notify3.note.youdao.com/pushserver3/client" in flow.request.url:
pass
elif "https://rpc1.note.youdao.com/ydrive/rpc/u" in flow.request.url:
data = flow.response.content
flow.response.set_content(data.decode().replace('"is_vip":false','"is_vip":true').encode())
elif "https://note.youdao.com/yws/mapi/payment?method=status" in flow.request.url:
data = json.loads(flow.response.content)
data["pt"] = ["pres", "wx_auto"]
data["end"] = timeStamp
flow.response.set_content(json.dumps(data).encode())
print("已啟動會員")
在windows上設定好代{過}{濾}理127.0.0.1 8888埠就可以了,啟動命令為指令碼的第一行。
後續我寫了python自動設定代{過}{濾}理,每次當有道雲筆記啟動的時候先自動設定代{過}{濾}理,當軟體退出的時候再自動關閉了代{過}{濾}理和 mitmdump 服務,這裡我就不放出了。
會員沒有生效點選同步的時候就會生效。