某交易平台相关参数加密

网址

aHR0cHM6Ly95Z3AuZ2R6d2Z3Lmdvdi5jbi8jLzQ0L2p5Z2c=

流程

  • 测试加密参数
  • 逆向分析
  • 测试结果

抓包分析

某交易平台相关参数加密_第1张图片
从上述抓包可以看到 很明显加密的三个参数

  • X-Dgi-Req-Timestamp 时间戳
  • X-Dgi-Req-Nonce 不知道是什么?
  • X-Dgi-Req-Signature 不知道是什么?

逆向分析

某交易平台相关参数加密_第2张图片

根据上述调用栈我们点进去看看,然后打上断点刷新继续看参数生成
某交易平台相关参数加密_第3张图片
某交易平台相关参数加密_第4张图片

某交易平台相关参数加密_第5张图片
某交易平台相关参数加密_第6张图片
某交易平台相关参数加密_第7张图片
这就是我们需要的加密参数
接下来就简单啦,先研究一下他的逻辑,然后想扣就扣了某交易平台相关参数加密_第8张图片
从上述多次可以确定 c是个固定值,接着我们分析tre(16)
,点进去看看
某交易平台相关参数加密_第9张图片
可以看到就是随机取得数字和字母
接下来我们分析d
的值
某交易平台相关参数加密_第10张图片

从上述截图中可以看到,d
的值区分了get和其他请求
我们都看看

get请求

某交易平台相关参数加密_第11张图片
可以看到nre(t)
接受一个参数e并返回一个字符串t,object.keys(e)
返回对象的键数组,然后将其映射到键值对数组,其形式为 n = {n}= n={e[n]}。然后对得到的数组进行排序,并以&作为分隔符连接以形成字符串t。如果e是字符串,则首先用&进行拆分,进行排序,然后以&作为分割符连接以构成字符串t。
接着我们分析QQ()

某交易平台相关参数加密_第12张图片
看到这里我们就可以大致猜测一下加密啦。。。。我就直接贴答案了
某交易平台相关参数加密_第13张图片
可以看到,很明显就是一个sha256的加密,接下来我们测试一下加密是不是sha256
某交易平台相关参数加密_第14张图片
某交易平台相关参数加密_第15张图片

python代码

想扣代码的自己来吧!

import random
import time
import hashlib
import requests
import json

ky = "zxcvbnmlkjhgfdsaqwertyuiop0987654321QWERTYUIOPLKJHGFDSAZXCVBNM"
Fq = ky + "-@#$%^&*+!"


def get_nonce(num):
    nonce = ""
    for i in range(num):
        yq = int(random.random() * 62)
        nonce += ky[yq]
    return nonce


def get_signature(params_data: dict, _nonce: str, _timestamp: int):
    c = 'k8tUyS$m'
    p_data = dict(sorted(params_data.items(), key=lambda k: k[0]))
    p_list = []
    for key, value in p_data.items():
        if str(value) == "False":
            value = "false"
        p_list.append(f"{key}={value}")
    p_str = "&".join(p_list)
    enc_str = _nonce + c + p_str + str(_timestamp)
    print(enc_str)
    _sha256 = hashlib.sha256()
    _sha256.update(enc_str.encode("utf-8"))
    print(_sha256.hexdigest())
    return _sha256.hexdigest()


def get_data():
    url = "https://******/ggzy-portal/search/v1/items"
    headers = {
        'Accept': 'application/json, text/plain, */*',
        'Connection': 'keep-alive',
        'Content-Type': 'application/json',
        'Origin': '******',
        'Pragma': 'no-cache',
        'Referer': '******',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 Edg/111.0.1661.51',
        'X-Dgi-Req-Nonce': '',
        'X-Dgi-Req-Signature': '',
        'X-Dgi-Req-Timestamp': '',
    }

    data = {
        "type": "trading-type",
        "publishStartTime": "",
        "publishEndTime": "",
        "siteCode": "441900",
        "secondType": "A",
        "projectType": "",
        "thirdType": "",
        "dateType": "",
        "total": 0,
        "pageNo": 1,
        "pageSize": 10,
        "openConvert": False
    }

    nonce = get_nonce(16)
    timestamp = int(time.time() * 1000)
    headers["X-Dgi-Req-Timestamp"] = str(timestamp)
    headers["X-Dgi-Req-Nonce"] = nonce
    headers["X-Dgi-Req-Signature"] = get_signature(params_data=data, _nonce=nonce, _timestamp=timestamp)

    data = json.dumps(data, separators=(',', ':'))
    response = requests.post(url, headers=headers,  data=data)

    print(response.text)



if __name__ == '__main__':
    get_data()

注意:
如有侵权以及损害利益等问题,欢迎联系我删除

你可能感兴趣的:(web逆向,python,加解密,前端,python,java)