网站:
aHR0cHM6Ly9mdXd1Lm5oc2EuZ292LmNuL25hdGlvbmFsSGFsbFN0LyMvc2VhcmNoL21lZGljYWwtc2VydmljZT9jb2RlPTkwMDAwJmZsYWc9ZmFsc2UmZ2JGbGFnPXRydWU=
接口分析
通过接口分析可以看到加密参数分别在headers和data都进行了加密。
寻找加密点
1、headers参数
参数搜索,将加密key进行搜素,找到了两个位置,分别打上断点,进行重新请求
从图中可以看到参数中的加密参数也在此处。headers加密只需要解密r(f),h=Object(i.a)()就行
r函数分析
r=n("6c27").sha256
看到n(“6c27”)想到了webpack,js从头看,看到exports和call发现确实是webpack
搜索6c27看到这个入参有点不一样,不能直接使用调用的方式,因此直接进行了扣代码
从createOutputMethod直接向下扣,一直到finalize
从图中可以看到sha256直接是用createMethod调用,因此直接将此处的createMethod定义为r。
Object(i.a)()函数扣取
代码跳转后可以看到调用的是1602的代码,可以直接通过扣取i()函数或者使用webpack调用来实现
直接将o用fff来调用,可以看到都能满足需求
此时headers中的随机参数已经完成,接下来进行固定参数的构造以及返回,大致如图所示
param参数
param参数中的appCode也为定值,因此只需要分析signData和data里的encData
signData
signData中的m,p,v直接跳转扣出来就行
主要说下o.doSignature和e.from
选中后跳转,看到此处调用n,不能直接调用,那么使用webpack全部扣,同时将所有的交叉调用抠出来,大致需要这么多
e.from的e
此处需要注意的是,不能直接将它全局后调用,需要先调用它的Buffer
encData和signData类似,不展开
解密
从返回值可以看出,请求后是加密值,寻找解密点
可以在刚才的基础上一直单步找到解密的点
也就是Object(c.b)(“SM4”, e.data)函数,此处和上面的调用方式一致,选择webpack扣取,也就是g函数。图中的e、s.decrypt扣取和上面的一致。
可以看到解密也是ok的。
关注公众号“码字的秃猴”回复:国家医保 获取