js逆向-某网站国密分析

本文仅供学习参考,如有侵权可私信本人删除,请勿用于其他途径,违者后果自负! 如果觉得文章对你有所帮助,可以给博主点击关注和收藏哦!

网站

aHR0cHM6Ly9jcmVkaXQuaGQuZ292LmNuL3h5eHhncy8=

接口分析

打开网站选择【行政处罚】,通过Fetch/XHR过滤即可发现数据包。

请求

响应

通过接口能够看出使用了 sign加密类型为SM2。那么signType加密类型对应的可能是另一个参数或响应体。

简单的分析下来明确了接下来的方向,即请求和响应的双重加密。

参数分析

  • nonceStr
  • queryContent
  • sign

需要分析的有这三个参数,拿最长的参数进行全局搜索。


搜索只有一个,那么事情就简单了。

拆解三目运算符后代码简化如下:

i = ls.sm4.encrypt(i, e.encryptKey)

其中encryptKey为固定值,i是请求参数


这样就获得了queryContent

继续下一个参数,向上找找可以发现请求参数包裹在一个对象中。

需要的nonceStr也已经找到了。

既然知道请求参数都在对象n中,搜索n.sign应该是能够获得到结果的。

正好应证了上文的分析。

参数的加密分析到这里就结束了,需要扣取的代码简单整理一下:

var appSignPrivateKey = "xxx";
var appSignPublicKey = "xxx";
var n = {
        version: "1.0",
        appId: 'xxxx',
        signType: 'SM2',
        encryptType: 'SM4',
        nonceStr: H.uuid(),
        timestamp: H.timeStamp()
    };
var i = `param=&page=${page}&size=10`;
var page = 1
n.queryContent = ls.sm4.encrypt(i, encryptKey)
n.sign = Zi(o = ls.sm2.signature(a, appSignPrivateKey, appSignPublicKey, n.appId));

扣代码

请求
nonceStr

打上断点,重新触发该接口请求。

可以将H对象都拿下来,或者是只拿使用到的相关部分。

继续查看N

N指向T

继续跳进去将函数B扣下来,将整个T的原型链函数也扣取下来,就可以获取到nonceStr参数。

queryContent

这个参数使用了SM2加密,扣的内容会比较多,但是难度也不高,将断点跳过来。

ls对象拿下来,从图中还需要将kr拿下来,继续深入。

_r函数如下:

将这些函数拿到本地不断运行,会不断报错,将报错缺少的内容补上再运行,循环往复就可以获取到结果了。

本地结果:

网站结果:

多次运行发现相同页码下加密结果相同,本地复现没问题。

sign

参数比较多,但是都有迹可循,不展开说了。
ls对象前面已经扣下来了,将剩余部分补完整问题不大。

Zi函数:

还是上面的套路,缺什么就补什么,比较考验细心程度和耐心。

响应

使用XHR断点同样hook该接口。因为是异步请求,如果一直F11跳断点会丢掉很多东西,建议使用F9跟栈,或者使用图上的小箭头。

不知跟了多久,发现一处可疑的地方。

响应拦截器,顾名思义就是对响应的内容做操作,可能会涉及到解密。
里面的控制流需要逐步分析。

还是熟悉的kr对象,继续补完所需的代码即可。


可以看到本地的解密也是没有任何的问题。

总结

网站大量使用异步,跟栈时需要耐心,整体的加密也不算太难,获取的加密的key值也可以尝试使用python或其他语言还原。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值