国家医保服务平台js逆向(SM4+SM2)

发布时间 2023-04-09 22:41:36作者: 是四不是十

网站:

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的。

关注公众号“码字的秃猴”回复:国家医保 获取