首页 > Web开发 > 详细

js加密(六)QB.com

时间:2019-12-24 22:39:57      阅读:96      评论:0      收藏:0      [点我收藏+]

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

2. target: 

技术分享图片

 

 3. 分析:

3.1 打开网址,刷新页面,看看都发送了哪些请求。

技术分享图片

 

 看到了发送了一些Ajax请求,其中第一个就是我们需要的。下面就对这个请求进行剖析。

3.2 首先,它是一个post请求:

技术分享图片

 

 多刷新几次就会发现,有两个参数是动态的,一个ts,很明显是十位的时间戳,不用管它。另一个sig,就是我们需要破解的。

技术分享图片

 

 3.3 遇到这种加密参数,首先想到的就是进行直接搜索,看看哪些js中涉及到,一般直接return到加密参数相关的,就是我们要找的js代码。

搜索:

技术分享图片

 

 3.4 接着,我们找到了这个:

技术分享图片

 

看起来有点像,那就试试看吧,把几个相关的变量打上断点。

执行到这里,发现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)

结果:

技术分享图片

 

 学习研究,勿作他用。

js加密(六)QB.com

原文:https://www.cnblogs.com/zrmw/p/12093862.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!