目录
声明
本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!
本文章未经许可禁止转载,禁止任何修改后二次传播,擅自使用本文讲解的技术而导致的任何意外,作者均不负责,若有侵权,请联系作者立即删除!
目标
目标:某医保服务平台数据加密
网址:aHR0cHM6Ly9mdXd1Lm5oc2EuZ292LmNuL25hdGlvbmFsSGFsbFN0LyMvc2VhcmNoL2RydWctZGlyZWN0b3J5P2NvZGU9OTAwMDAmZmxhZz1mYWxzZSZnYkZsYWc9dHJ1ZQ==
前言
无意中看到接单群里面看到这个单子(没有接)、我在想gov系列不会没有反扒的呀,应该会有一些加密的产生的、果不其然去看了两眼,还是有一系列的加密参数生成的
一、页面分析
点击下一页就会发现加载两个包,不出意外的话数据应该在gueryDrugTypelnfo加载包里
对比了几下、好家伙、有好几处加密地方在里面
headers就有四个参数加密(虽然简单)
X-Tif-Nonce
X-Tif-Signature:
X-Tif-Timestamp:
X-Tingyun:
请求参数 (会发现没有关于页数的参数)
encData: 'SM4'
signData: 'SM2'
返回参数:
encData: 是内容加密后的结果
二、加密参数解析
1.headers的模块加密
之前这个模块里面的参数有时候固定也可以,有时候不可以
X-Tingyun参数
1、正常全部搜索 X-Tingyun参数,就会发现有两个出现这个参数的地方产生
2、我们看见了把X-Tingyun赋值给wo这个值,我们大可先尝试搜索在目前的JS文件里面搜索看看,就可以看到该参数的加密啦,这个加密参数很简单
3、简单一点的扣出来即可
X-Tif-Signature参数
4、正常全部搜索X-Tif-Signature参数,就会发现有两个出现这个参数的地方产生(两个地方都打上断点,看看哪个断点就取消另外一个)
会发现headers其他那几个加密参数也在那边产生了
5、 往上滑一下,就会发现他是一个经典的webpack打包加密在里面
这样就很好办啦,那就开始扣代码啦~
6、先把webpack加载器找到,这个加密要用到加载器那边的一些方法,也顺便扣下来
(webpack加载的包先全部扣下来,我补了好多的模块,模块的人麻不想补,加载了199个模块在里面---后续的参数加密都在里面)
一共7万多行,到时候可以自己删除一些不需要的模块(或者网上有一些大佬开发的工具自动扣webpack模块,都可以实现的)
7、会发现参数加密都在赋值在headers里面,我们可以自己在里面定义一个集合给他
8、然后直接导出对应的模块,就可以看见加密的值就产生啦
X-Tif-Nonce参数
加密在上面已经完全返回
X-Tif-Timestamp参数
加密在上面已经完全返回
2. 请求参数加密
encData参数
1、正常全部搜索encData参数,就会发现有好多出现这个参数的地方产生(可疑地方都打上断点,看看哪个断点就取消另外一个)
因为我们是知道encData是SM4加密在里面,所以我们可以直接打断点在SM4分支里面
2、打住断点就点击一下下一页、就会发现断住在那边r.toUpperCase()
3、就会看见只有几个值进行加密而已
4、本阶段是在调试阶段,t直接先写死,就n参数需要扣一下函数
b函数里面有需要补一个e04e模块
var s = fff('e04e')
是不是觉得很简单、既然这么简单,无法相信,然后 signData才是折磨人的,之前手动补模块,补了差不多百来个,还缺,人傻了
然后我先把全部模块丢进去跑起来再说
接下来让我们开始signData参数加密的分析把
signData参数
5、正常全部搜索signDate参数,就会发现有好多出现这个参数的地方产生(可疑地方都打上断点,看看哪个断点就取消另外一个)
6、打住断点就点击一下下一页、就会发现断住在那边e.from(a, "hex").toString("base64")是返回正确的结果的
7、其中主要关注 r 、d 这两个参数的加密,和o.doSignature、e.from函数就可以了
就会发现r是请求头那边的一些参数破解而成
d是一个定值
8、跟栈回o.doSignature会跳转去一个g函数里面(在名字为“4d09”模块里面)
因为是webpack模块,可以直接导出"4d09"的模块、代码如下
9、e.from函数一样是模块b639里面的一个方法
因为进行了加密方法的导出,所以 var e = fff("b639").Buffer
10 、 简单测试一下,就可以看到加密函数了(每次都不相同在里面)
10、尝试发送一下请求包,没想到还真的成功了,没有检测环境那些
但是发现返回的结果也是加密的
3.返回参数
encData
1、有一次地方比较可疑、也出现了decrypt解密的字眼
2.、里面没什么加密参数在里面啦,就t.data.data.encData 是需要解密的encData,其他的都是我们已经扣了模块啦
u和c经过仿佛的测试,是一个定值
3、 稍微改写了一下代码就很简单了
分析到这边就已经完美结束了。
4、运行成功案例
总结
1、出于安全考虑,本章未提供完整流程,调试环节省略较多,只提供大致思路,具体细节要你自己还原,相信你也能调试出来.
2、本人写作水平有限,如有讲解不到位或者讲解错误的地方,还请各位大佬在评论区多多指教,共同进步
3、如果这篇文章对你有帮助,就点赞、关注、收藏、三连击一下
4、本篇分享到这里就结束了,欢迎大家关注下期,我们不见不散☀️☀️😊