Yakit热加载实现流量解密

admin 2025年5月23日15:46:12评论6 views字数 2355阅读7分51秒阅读模式

    WELCOME    

Yakit热加载实现流量解密

网络安全·诚邀合作

Yakit热加载实现流量解密

    我们C4安全团队是一支专业高效富有经验团结的信息安全服务团队,由一群经验丰富、技术精湛的安全专家组成,他们在网络安全领域都有各自发光发亮的地方和大量的实战经验。在红蓝攻防、日常渗透测试、CTF比赛中也获取很多优异的成绩,帮助客户解决了很多安全问题,得到了客户的认可。欢迎合作咨询!

Yakit热加载实现流量解密

扫描二维码

联系合作

原文作者:本团队师傅Tai

Yakit热加载实现流量解密

分享一个yakit的热加载解密流量的案例

打开一个小程序,发现该小程序的数据包全是POST请求,并且都类似如下这种格式,请求体的requestData做了加密,并且请求体还有noncesignature签名,看起来非常难搞

Yakit热加载实现流量解密
重放数据包试试呢,果然,后端应该是验证了noncesignature值是否已被用过,做了防重放防篡改的设计
Yakit热加载实现流量解密

开始js逆向,两个部分要逆,一是请求体里requestData的加解密问题,二是数据包的noncesignature签名问题。

开启小程序调试

Yakit热加载实现流量解密

打开小程序F12,全局搜索requestData,发现只有两处,均打上断点
Yakit热加载实现流量解密
点击小程序任意功能,发现断住了,requestData生成的地方在t[a(505)](o, r)
多调试几遍就会发现,这个r值是固定为:
"3879696f4c6e5659522a3433266f2e33"
o则像是请求体的明文json数据。代码中还含有sm4_index.js字样
Yakit热加载实现流量解密
控制台查看t[a(505)]函数,跳到了如下,发现encryptdecrypt字样,猜测是加密和解密函数,并且都由v函数实现
module.exports = {encryptfunction(r, n, t) {return v(r, n, 1, t)},decryptfunction(r, n, t) {return v(r, n, 0, t)        }
Yakit热加载实现流量解密

跟进v函数,其实这里我已经看得眼花缭乱了,不懂算法,直接把v函数丢给AI分析

Yakit热加载实现流量解密

我们提示AI该算法似乎和sm4有关,让AI帮我们分析

Yakit热加载实现流量解密

然后就是缺啥函数,就在控制台打印出来给AI,最后也是成功的给我返回了加解密函数的nodejs代码

Yakit热加载实现流量解密

运行代码,也是成功还原出来请求体的明文数据,不得不说,这AI是真nb

Yakit热加载实现流量解密

requestData的问题解决,接下来是数据包的签名问题了,在全局搜索signature,翻了一会,找到了一处比较可能的位置,打上断点,再点击功能,果不其然断住了。

Nonce值由l()函数生成

Signature值由g(f, p, o, I)生成

Yakit热加载实现流量解密

Nonce值的函数破解比较简单,毕竟只是生成随机数而已,在控制台打印l函数再给AI完善一下实现生相应格式的nonce值就可,这里不多说。

跟进到g函数,该函数最终returns(p + e + u + c)

多调试几次后发现p为固定值

"EvAucyQXqhNrXB23hw8wPw73xHzAHNqipmBFKJTHGzBXTsHpNxR9PgyMhErNEvAu"

e则是随机数nonceu值是截断后的e,也就是e.substring(5)c值为s(JSON.stringify(t)),里面的t这是请求体里的明文数据。

Yakit热加载实现流量解密

控制台打印s函数,进去打断点,然后跳到这来了,注意到上面有个sm3,直接复制代码让AI帮我们分析分析,由于心疼无问AI的免费额度,所以我打算问免费的GPT试试

Yakit热加载实现流量解密

最后GPT也不负众望,给我返回了签名生成代码

Yakit热加载实现流量解密

用刚才解密的明文数据 生成一对noncesignature

Yakit热加载实现流量解密

替换发包验证,服务器返回正常数据,说明校验成功。

Yakit热加载实现流量解密

至此我们已经完成了改小程序的js算法逆向,接下来要把加解密运用到yakit中。

Yak可以通过js.Runjs.GetFunction调用运行js里的函数,非常方便。

首先我们先解决webfuzzer里的数据包签名加密

主要思路是在beforeRequest函数里对请求包做加密和签名

Yakit热加载实现流量解密

真正实现功能的yak代码就几行

Yakit热加载实现流量解密

来看效果,这里我们可以直接对明文的请求数据进行篡改发包,可以看到服务器仍然是正常响应的,不会报500错误

Yakit热加载实现流量解密

来到历史流量中查看发出去的真实数据包,代码已经为我们加密了请求体并且生成了新的随机数和签名

Yakit热加载实现流量解密

但是这样还不够,我们还要让MITM中流量全部显示明文,方便我们查看。没有运行热加载之前,我们看到的流量如下,是加密的

Yakit热加载实现流量解密

实现这点我们需要了解yakit的数据流量走向方式,来判断我们应该在哪些函数中做手脚

Yakit热加载实现流量解密

现在我们劫持数据包如下图,也是加密,为了在劫持的时候可以看明文并且修改数据包,应该在hijackHTTPRequest函数中对数据包解密

Yakit热加载实现流量解密

hijackHTTPRequest解密部分代码

Yakit热加载实现流量解密

光这里解密了还不够呀,因为这样放出去的话数据包还是明文,服务器不接受,所以,我们还得在beforeRequest函数中对数据包进行最后的加密签名,代码如下

Yakit热加载实现流量解密

如此一来,数据包又被加密了,在MITM看到的流量仍然是密文,所以,我们应该在完整请求包和响应包存进数据库之前,也就是我们在MITM看到该条流量之前,再对请求包做一次解密即可,也就是在hijackSaveHTTPFlow函数中解密

Yakit热加载实现流量解密

至此,热加载代码已成,运行看下效果

首先是劫持抓包,看到的是明文

Yakit热加载实现流量解密

MITM流量中,看到也是明文,并且响应包都是正常返回,没有返回500错误;用yak实现了流量全明文的效果,极大地方便了后续的测试。

Yakit热加载实现流量解密

怎么样,是不是特别简单。

专栏介绍

Freebuf知识大陆内部共享资料截屏详情如下

(每周保持更新,已更新 170+文档,扫码可免费预览)

Yakit热加载实现流量解密
Yakit热加载实现流量解密

知识大陆——安全渗透感知大家族

圈子券后现价 ¥39.9元/年     ¥59.9元/永久

(新人优惠券折扣20,扫码即可领取优惠)

Yakit热加载实现流量解密
内部圈子——友反馈,价格优惠,内容优质
Yakit热加载实现流量解密
Yakit热加载实现流量解密

原文始发于微信公众号(C4安全团队):Yakit热加载实现流量解密

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年5月23日15:46:12
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Yakit热加载实现流量解密http://cn-sec.com/archives/4084942.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息