1. 程式人生 > 其它 >Jsrpc學習——加密引數Sign變化的網站破解教程

Jsrpc學習——加密引數Sign變化的網站破解教程

大家好,我是皮皮。前幾天給大家分享jsrpc的介紹篇,Python網路爬蟲之js逆向之遠端呼叫(rpc)免去摳程式碼補環境簡介,還有實戰篇,Jsrpc學習——網易雲熱評加密函式逆向,Jsrpc學習——Cookie變化的網站破解教程感興趣的小夥伴可以戳此文前往。

今天給大家來個jsrpc實戰教程,讓大家加深對jsrpc的理解和認識。下面是具體操作過程,不懂的小夥伴可以私我。

今天我們介紹的這個網站是cookie引數不變,但是加密引數Sign變化的一個網站,一起來使用jsrpc來攻破它吧!

1、這裡使用的網站是87aed0b6bc8cb687d63dd7eee0f64d38,MD5加密處理過的。

2、需要提取100個網頁中的數字,然後求和。

3、開啟瀏覽器抓包,然後打斷點除錯,依次點選右邊的Call Stack內的東西,直到找到加密函式,裡邊的值對應請求引數即可判定。

[圖片上傳失敗...(image-b0f02b-1648287067493)]

4、最終在這裡找到了一堆人看不懂的東西。

5、仔細尋找,發現加密的函式在這裡了。

6、之後可以在控制檯輸入指令window.dcpeng = window.get_sign,其中window.get_sign為加密函式。注意:這個地方挺重要的,很多時候我們會寫成ct.update(),這樣會有問題!加了括號就是賦值結果,沒加就是賦值整個函式!千差萬別。

7、關閉網頁debug模式。注意

:這個地方挺重要的,很多時候如果不關閉,ws無法注入!

8、此時在本地雙擊編譯好的檔案win64-localhost.exe,啟動服務。

9、之後在控制檯注入ws,即將JsEnv.js檔案中的內容全部複製貼上到控制檯即可(注意有時要放開斷點)。

10、連線通訊,在控制檯輸入命令var demo = new Hlclient("ws://127.0.0.1:12080/ws?group=para&name=test");

11、隨後繼續輸入命令:

// 註冊一個方法 第一個引數get_v為方法名,
// 第二個引數為函式,resolve裡面的值是想要的值(傳送到伺服器的)
// param是可傳參引數,可以忽略
demo.regAction("get_para", function (resolve) {
    dcpeng();
 var res = window.sign
    resolve(res);
})

也許有小夥伴會覺得奇怪,window.sign明明是在list這個變數中,為啥我們通過window.get_sign()可以獲取到,莫非window.get_sign()和window.sign返回的值是一樣的?其實window是整個全域性,它只是聲名一個list物件裡面有signature等於全域性的sign,這個全域性的sign的值通過window.get_sing()得到。

dcpeng()就是一個函式,裡面寫的最後結果就是window.sign=window.get_sign(),並沒有return東西。

12、之後就可以在瀏覽器中訪問資料了,開啟網址 http://127.0.0.1:12080/go?group={}&name={}&action={}¶m={} ,這是呼叫的介面 group和name填寫上面注入時候的,action是註冊的方法名,param是可選的引數,這裡續用上面的例子,網頁就是:http://127.0.0.1:12080/go?group=para&name=test&action=get_para

13、如上圖所示,我們看到了那個變化的引數v的值,直接通過requests庫可以發起get請求。

14、現在我們就可以模擬資料,進行請求傳送了。

15、將拷貝的內容可以丟到這裡進行貼上:http://tool.yuanrenxue.com/curl

16、之後將右側的程式碼複製到Pycharm中即可用,非常便利。

17、之後就可以構造請求了,加一個整體迴圈,然後即可獲取翻頁的內容,整體程式碼如下所示。

import requests
import json

cookies = {
    'session': '6c78df1c-37aa-4574-bb50-99784ffb3697.Qcl0XN6livMeZ-7tbiNe-Ogn8L4',
    'v': 'A7s8gqX6XgjWtmKFwCNKPNdQSpQgEM9-ySWTzq14lzDRLtVKNeBfYtn0IxW-',
}

headers = {
    'Connection': 'keep-alive',
    'Accept': 'application/json, text/javascript, */*; q=0.01',
    'X-Requested-With': 'XMLHttpRequest',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36 Edg/97.0.1072.69',
    'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
    'Origin': 'http://spider.wangluozhe.com',
    'Referer': 'http://spider.wangluozhe.com/challenge/2',
    'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
}
all_data = []
for page_num in range(1, 101):
    sign_url = 'http://127.0.0.1:12080/go?group=para&name=test&action=get_para'
    sign = requests.get(url=sign_url).json()["get_para"]
    # print(sign)
    data = {
      'page': f'{page_num}',
      'count': '10',
      '_signature': sign
    }
    print(f'Crawlering page {page_num}')

    response = requests.post('87aed0b6bc8cb687d63dd7eee0f64d38', headers=headers, cookies=cookies, data=data, verify=False).json()
    for item in response["data"]:
        all_data.append(item["value"])
        # print(item["value"])

print(sum(all_data))

執行結果如上圖所示,和網頁上呈現的資料一模一樣。

18、至此,請求就已經完美的完成了,如果想獲取全部網頁,構造一個range迴圈翻頁即可實現。

17、也歡迎大家挑戰該題目,我已經挑戰成功了,等你來戰!

總結

大家好,我是皮皮。這篇文章主要給大家介紹了jsrpc的實戰教程,使用jsrpc工具可以在網路爬蟲過程中事半功倍,無需仔細的去釦環境,去一步步逆向,只一個黑盒的模式,我們就拿到了想要的結果,屢試不爽。

初次接觸jsrpc的小夥伴可能看不懂,這裡還有黑哥錄製的一個視訊,大家可以對照著視訊進行學習,地址:https://www.bilibili.com/video/BV1EQ4y1z7GS,黑哥全程無聲演示,視訊的BGM很大,建議大家可以靜音播放,領會其中奧義。

關於jsrpc工具,可以點選原文前往獲取。

小夥伴們,快快用實踐一下吧!如果在學習過程中,有遇到任何問題,歡迎加我好友,我拉你進Python學習交流群共同探討學習。