js加密(六)QB.com

1. url: https://notice.qb.com/detail?noticeId=256python

2. target: json

 

 3. 分析:api

3.1 打開網址,刷新頁面,看看都發送了哪些請求。app

 

 看到了發送了一些Ajax請求,其中第一個就是咱們須要的。下面就對這個請求進行剖析。dom

3.2 首先,它是一個post請求:post

 

 多刷新幾回就會發現,有兩個參數是動態的,一個ts,很明顯是十位的時間戳,不用管它。另外一個sig,就是咱們須要破解的。學習

 

 3.3 遇到這種加密參數,首先想到的就是進行直接搜索,看看哪些js中涉及到,通常直接return到加密參數相關的,就是咱們要找的js代碼。加密

搜索:url

 

 3.4 接着,咱們找到了這個:spa

 

看起來有點像,那就試試看吧,把幾個相關的變量打上斷點。

執行到這裏,發現m.sig的值已經出來了,記錄一下。調試完畢,最後看看post請求的sig值和記錄的值是否一致,發現是一致的。

省略調試過程。

3.5 接下來就剩下解密這段js了。看過程結合js代碼,是對「_」的值進行了md5加密,再進行md5加密,再來一個sha256加密,而「_」的值就在上面:

 

 "a=at&appId=0&con=1&device=Windows+10&deviceId=Chrome79.0.3945.88&id=256&la=1&p=0&ps=10&reqLang=0&ts=1577196094&ty=0&version=1.6.2370f239020d3a28b8d24ba1706f2dd7c03dcaa2fa5e7a077f1f517e5f2d3a68a1"

多調試幾遍,就會發現這個變量只有一個ts參數是變的,別的都不變。而ts就是一個時間戳而已,用的時候拼接一下。接下來去編寫python程序。

4. 代碼:

import json
import time
import hashlib
import requests
import re
from afterWork.config import userAgent, proxies

def myMd5(value):
    return hashlib.md5(value.encode('utf-8')).hexdigest()

def mySha256(value):
    return hashlib.sha256(value.encode('utf-8')).hexdigest()

def getSig():
    # 15771 80402
    ts = time.time()
    # print('1577180402')
    # print(str(ts)[:10])
    sig = 'a=at&appId=0&con=1&device=Windows+10&deviceId=Chrome79.0.3945.88&id=256&la=1&p=0&ps=10&reqLang=0&ts={}&ty=0&version=1.6.2370f239020d3a28b8d24ba1706f2dd7c03dcaa2fa5e7a077f1f517e5f2d3a68a1'.format(ts)
    return ts, mySha256(myMd5(myMd5(sig)))

def getData():
    ts, sig = getSig()
    d1 = {'id': 256,
          'ty': 0,
          'con': 1,
          'p': 0,
          'ps': 10,
          'la': 1}
    data = {
        "a": "at",
        "d": d1,
        "ts": ts,
        "reqLang": 0,
        "appId": 0,
        "device": "Windows 10",
        "deviceId": "Chrome79.0.3945.88",
        "version": "1.6.23",
        "sig": sig
    }
    # return data
    return json.dumps(data)

def getInfo(url):
    # print(type(getData()))
    res = requests.post(url=url,
                        data=getData(),
                        # headers={'User-Agent': userAgent.random()},
                        proxies=proxies,
                        timeout=10)
    print(json.loads(res.text)['d']['d'][0]['su'])
    print(re.sub(r'<.*?>', '', json.loads(res.text)['d']['d'][0]['cnt']))

if __name__ == '__main__':
    url = 'https://api.qb.com/v1/common/'
    getInfo(url)

結果:

 

 學習研究,勿做他用。

相關文章
相關標籤/搜索