JD到家h5版h5st 4.3参数算法还原逆向记录

之前4.1的过完年回来发现已经变成4.3了,不过大同小异,参考之前的:

zz​​​​​​​https://blog.csdn.net/qq_44628911/article/details/135530165?spm=1001.2014.3001.5501

方便区分,把字段依次标记为str1-str8

前面body的处理方式没变

分析h5st,依旧是这个平坦流:

d031c12d3a8143d5a22990e1d28f0469.png

case1:时间戳的一些格式化处理,str1

        t = int(datetime.now().timestamp() * 1000)
        timestamp = t / 1000.0  # 将时间戳除以1000,转换为秒
        dt = datetime.fromtimestamp(timestamp)
        st1 = dt.strftime('%Y%m%d%H%M%S%f')[:-3]  # 格式化日期字符串,去掉最后三位微秒数
        print(st1)

case4:时间戳对case1生成的时间加盐处理,这里的“盐”变成了22

case2: 对参数进行一次加密,这里貌似会变,有时512有时256?,

da547e2ccbf94e4dbf1e2cb3c70573f9.png

01cb0f8ccaf04f3992cef068ead66d26.png

    def sha512_code(self, tk, fp, ts, ai):
        '''
        :param fp:
        :param ts:
        :param ai:
        :return:
        '''
        rd = 'd2QYShkF698y'
        str_to_hash = ''.join([tk, fp, ts, ai, rd])
        return hashlib.sha512(str_to_hash.encode()).hexdigest()

继续跟下去上面另一个平坦流里面有个case3里面的y值就是h5st里的str5,有两个参数,x是上面256返回的值,t是params的一些参数。

393a0054ed6d473e98496751f54a0047.png

进入这个this[u(416, 0, 449)],可以看到,最终在case3里面return l,l在case4里面生成,可以看到这里是把上面的参数做一些排序处理后再进行一次256处理。

70f68a3367e343a4a120b74486e1b0d8.png

st5:
    def xxx_code(self, body, sha512_result, t):
        param = {
            "appid": "JDReactDaoJiaH5",
            "functionId": "dj_storeIndexSearch_searchByCategory",
            "client": "H5",
            "clientVersion": "8.41.0",
            "body": body
        }
        sorted_data = {k: param[k] for k in sorted(param)}
        sParam = '&'.join(['{}:{}'.format(key, value) for key, value in sorted_data.items()])
        sParam = sParam + f'&t:{t}'
        sign = hmac.new(bytes(sha512_result, 'utf-8'), bytes(sParam,'utf-8'), digestmod=hashlib.sha256).hexdigest()
        return sign

最后就是str8的值,还是一个aes-cbc加密,不过变量改变了:

33ebd443c6b54ceabe91bea9df4436c2.png

    def encrypt_pkcs7_to_java(self):
        '''
        :return:
        '''
        env = {
          "sua": "Linux; Android 6.0; Nexus 5 Build/MRA58N",
          "pp": {
            "p1": "jd_413b4bdf362aa"
          },
          "extend": {
            "wd": 0,
            "l": 0,
            "ls": 0,
            "wk": 0,
            "bu1": "0.1.9",
            "bu2": -1,
            "bu3": 60,
            "bu4": 0
          },
          "random": "JejHZS-Nnlv",
          "v": "h5_file_v4.3.3",
          "fp": "etq5nyytefdtddl5",
          "bu1": "0.2.0"
        }
        data = json.dumps(env, indent=2)
        key = '&d74&yWoV.EYbWbZ'.encode('utf-8')
        iv = '0102030405060708'.encode('utf-8')
        cipher = AES.new(key, AES.MODE_CBC, iv)
        padded_data = pad(data.encode('utf-8'), AES.block_size, style='pkcs7')
        ciphertext = cipher.encrypt(padded_data)
        return binascii.hexlify(ciphertext).decode('utf-8')

最后全部还原测试下:

8b93eeb0d61440ad8b5e926a06270b3b.png

 

  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值