JS逆向-sm2、sm4加密某医保局

前言

该文章为学习使用,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!如有侵权,请私信联系作者删除~

需求

目标网址:aHR0cHM6Ly9mdXd1Lm5oc2EuZ292LmNuL25hdGlvbmFsSGFsbFN0LyMvc2VhcmNoL21lZGljYWw/Y29kZT05MDAwMCZmbGFnPWZhbHNlJmdiRmxhZz10cnVl

步骤

1、抓包分析
2、定位及还原加密算法

正文

一、抓包

在这里插入图片描述
在这里插入图片描述
加密参数
请求头:
x-tif-nonce、x-tif-signature、X-Tingyun:
请求体:
appCode、encData(sm4)、signData(sm2)
以及返回的数据也是加密的,形式类似请求参数

二、定位及还原

在这里插入图片描述
通过搜索关键字,可以定位到请求头在此处生成

x-tif-signature = r(f)
f = s + h + s
s = Math.ceil((new Date).getTime() / 1e3)
h = Object(i.a)()

r(f)返回的数据是64位,经过测试是标准的SHA256算法
Math.ceil()>四舍五入;s返回的是一个时间戳并去掉后三位
h是由一个方法i生成的
那么x-tif-signature、x-tif-nonce就可以推导出来了,用JS还原一下

var CryptoJS = require('crypto-js')
function sha256Encrypt(t) {
    return CryptoJS.SHA256(t).toString()
}
function get_nonce() {
    var e, t, n, i = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ", r = "0123456789";
    return e = o(6, "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"),
    t = o(1, i),
    n = o(1, r),
    t + n + e;
    function o(e, t) {
        e = e || 32;
        for (var n = "", i = 0; i < e; i++)
            n += t.charAt(Math.ceil(1e3 * Math.random()) % t.length);
        return n
    }
}

var h = get_nonce()
console.log('nonce:'+ h)

function get_signature() {
    var s = Math.ceil((new Date).getTime() / 1e3)
    var f = s + h + s
    return sha256Encrypt(f)
}
signature = get_signature()
console.log('signature:'+signature)

经过测试,可知appCode为固定值:“T98HPCGN5ZVVQBS8LZQNOAEXVI9GYHKQ”

在这里插入图片描述
可见signData由以上方法生成,那么我们一步一步还原

n = m(t.data)

t.data = 这里是引用

后面就是把webpack导包,引用方法就可以了。代码较多,这里就不展开写了

最后

欢迎联系作者交流更多

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值