1. 程式人生 > 其它 >抓包抓得好,監獄進得早,利用Python突破有道雲筆記會員功能

抓包抓得好,監獄進得早,利用Python突破有道雲筆記會員功能

侵權刪除
另外希望有道雲筆記改改bug(關機報錯的)
我還是希望文章不要被刪除,破解和反破解技術是相互發展的。
本文提供分析思路,突破的技術手段,不提供軟體成品,提供原始碼,如果有道雲看到,我希望修補這個漏洞,另外修復一下bug。

很多人學習python,不知道從何學起。
很多人學習python,掌握了基本語法過後,不知道在哪裡尋找案例上手。
很多已經做案例的人,卻不知道如何去學習更加高深的知識。
那麼針對這三類人,我給大家提供一個好的學習平臺,免費領取視訊教程,電子書籍,以及課程的原始碼!
QQ群:701698587
歡迎加入,一起討論 一起學習!

前言

之前有人向我要一篇我寫的文章,我很多文章都是留在有道雲筆記上的,我匯出pdf, 發現需要會員,我衝了會員,然後匯出了pdf。後來我想分析一下有道雲筆記是如何控制是否允許markdown匯出pdf,所以有了這篇文章。

分析

我想 pdf 來自兩個地方:

  1. 網路請求返回,這種請求的時候肯定是進行了身份認證,判斷使用者是否已經衝了會員(cookie),才會從伺服器返回pdf的資料。
  2. 本地 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 服務,這裡我就不放出了。

會員沒有生效點選同步的時候就會生效。