Python高階爬蟲實戰,JS解密咪咕音樂登錄參數分析

2020-08-11 14:51:20

目標:分析咪咕視訊登錄參數(enpasswordfingerPrintfingerPrintDetail

工具:NodeJs + Chrome 開發者工具

許久沒有水文了,閒來無事特來混混臉熟

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

enpassword

找到登錄入口:

查詢方式:

點選登錄 —> 開啓chrome開發者工具 -> 過載框架 —> 抓到登錄包

如下:

加密參數尋找

清空之後,使用錯誤的賬號密碼登錄。一共兩個包兩張圖片。圖片開源不看,具體看包,最後在authn包中看到了我們登錄所加密過的三個參數,如下

海裡 海裏撈針-找參數

在搜尋方塊(ctrl + shift + F )下搜尋enpassword參數,進入source File 發現link 93,name並未加密;那麼就是在它的class 屬性 J_RsaPsd中。再次找!

海裡 海裏撈針-找參數、埋斷點

找到三個 J_RsaPsd,每個都上斷點,然後在點登錄一下

encrypt:加密函數,b.val加密物件(輸入的密碼)

將其扣出來!

爲什麼扣這裏?因爲這裏爲加密處!由明文轉爲密文。那我們拿到這些就以爲着拿到了加密的函數。就可以自己實現加密

c = new p.RSAKey;
c.setPublic(a.result.modulus, a.result.publicExponent);
var d = c.encrypt(b.val());

該寫如下:(js丫)

 

1

2

3

4

5

6

function getPwd(pwd) {

    c = new p.RSAKey;

    c.setPublic(a.result.modulus, a.result.publicExponent);

    var d = c.encrypt(b.val());

    return d;

}

雖然我們加密的函數已經找到了,but,我們是在自己的環境下並不一定有這個函數(c.encrypt)。所以現在需要去找c.encrypt

新問題:p.RSAKey;沒有定義;回到chrome進入p.RSAKey-(選中點選進入f db())

進入f db()扣出這個方法,然後改寫

尋找a.result.modulus, a.result.publicExponent兩個參數,

其實是publickey包返回的結果那麼至此enpassword加密完成

補兩個環境參數

 

1

2

window = this;

navigator = {};

fingerPrintfingerPrintDetail參數破解

link480 下斷點點選下一步,執行

執行一步, 進入RSAfingerPrint函數內,把o.page.RSAfingerPrint方法摳出來

在頁面中觀察a,b參數

觀察發現:

其實a,b,就是我們的a.result.modulus, a.result.publicExponent

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

rsaFingerprint = function () {

    a = "00833c4af965ff7a8409f8b5d5a83d87f2f19d7c1eb40dc59a98d2346cbb145046b2c6facc25b5cc363443f0f7ebd9524b7c1e1917bf7d849212339f6c1d3711b115ecb20f0c89fc2182a985ea28cbb4adf6a321ff7e715ba9b8d7261d1c140485df3b705247a70c28c9068caabbedbf9510dada6d13d99e57642b853a73406817";

    b = "010001";

    var c = $.fingerprint.details

        , d = $.fingerprint.result

        , e = c.length

        , f = ""

        , g = new m.RSAKey;

    console.log(a, b)

    g.setPublic(a, b);

    for (var h = g.encrypt(d), i = 0; e > i; i += 117)

        f += g.encrypt(c.substr(i, 117));

    return {

        details: f,

        result: h

    }

}

rsaFingerprint()

繼續尋找;這兩個

 

1

2

c = $.fingerprint.details

d = $.fingerprint.result

瀏覽器裏面測一下,把他從console拿出來