前言
该文章为学习使用,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!如有侵权,请私信联系作者删除~
需求
目标网址: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导包,引用方法就可以了。代码较多,这里就不展开写了
最后
欢迎联系作者交流更多