Sekiro+Yakit 热加载无痛绕sign

admin 2025年1月13日23:08:06评论12 views字数 165阅读0分33秒阅读模式

涉及

Js 逆向 (很浅)

无限 debugger 绕过

Js-rpc

Yakit 热加载批量

背景

之前写过的一篇文章https://xz.aliyun.com/t/16673主要讲实战自动化加解密,其中对加密算法的处理就需要先分析再写加解密脚本

Sekiro+Yakit 热加载无痛绕sign

这种方式需要我们能够读懂目标JS代码的加密逻辑,完整还原加密链,然后再去编写代码。像0xsdeo师傅文章双层mitmproxy代理实现自动化加解密中提到的通过execjs来在python中运行JS代码,同样需要梳理加密逻辑。

在实战场景下,多数情况会存在多层加密或者自研算法,并且还伴有代码混淆的情况。此时,想要完整还原加密链,是非常困难的。

因此,今天的主角 sekiro 登场了,其可以使无需理解它的算法细节也可以完成加解密,那...接下来深入的学习一下,感受其魅力!

Sekiro 简介

首先需要了解一下 JSRPC 技术,JSRPC是远程调用JavaScript函数的方法。它的原理是在客户端(也就是浏览器)注入JSRPC环境,使客户端与JSRPC服务器建立WebSocket连接,保持通信。然后在客户端注册需要用到的加解密函数的demo,这样当JSRPC服务器发送信息给客户端时,客户端接收到并执行相应的方法,然后将结果发送回服务器。服务器接收到结果并将其显示出来。

sekiro 相当于一个将其封装好的框架,当然其功能更为强大,今天我们只关注其在 js 逆向的作用!

实操演示

实名认证的场景,一般这种接口都是收费的。如果该接口未限制用户访问频率,则可以出一个不受限制的资源调用的洞。

Sekiro+Yakit 热加载无痛绕sign

但是比较烦的是,他虽然没限制频率,但是请求有有验签(sign)的操作, 导致我们不能批量爆破了 (数据包处理过的哈)

Sekiro+Yakit 热加载无痛绕sign

因此我们需要逆向一下 sign,来绕过签名,首先肯定是,F12,找找看那个函数生成的 sign

无限 debugger 绕过

说干就干,不过运气貌似不太行,碰到了无限 debugger 反调试

Sekiro+Yakit 热加载无痛绕sign

如果不需要调试,只看代码的话,我们可以直接把断点的功能关了

Sekiro+Yakit 热加载无痛绕sign

但是这样的话,咱就也不能打断点了。那怎么办,当然,无限 debugger 是可以绕过的。咱们这里使用最朴素的办法即可绕过

使用朋友给的小脚本

var _constructor = constructor;Function.prototype.constructor = function (s) {if (s == "debugger"){        console.log(s)return null;    }return _constructor(s)}
Sekiro+Yakit 热加载无痛绕sign

再搭配:一律不再此处暂停

Sekiro+Yakit 热加载无痛绕sign
Sekiro+Yakit 热加载无痛绕sign

两次就过了,现在我们可以打断点了,更加详细的请看下文。

https://mp.weixin.qq.com/s/hpJ3qSaYI4yFJU0LWsm23A

sign 逆向

首先我们可以在数据包中尝试,看看是哪些参数影响到了 sign

Sekiro+Yakit 热加载无痛绕sign

可以通过按个删减尝试

最终发现 APP_TIMEAPP_LICENSE_ID 参数均影响,通过关键词到 js 中搜索

找到了一处可以的地方

Sekiro+Yakit 热加载无痛绕sign

然后我们打个断点试试

Sekiro+Yakit 热加载无痛绕sign
Sekiro+Yakit 热加载无痛绕sign

现在我们梳理一下

#函数 dd()#参数  l=APP_TIME cl=APP_LICENSE_ID   r=appKey s=张三&4112002000090876112&  //url编码#调用 sign=dd(l + cl + r + s, r)

试试 ok 不 ok,改身份证最后一位成 3,试试构造 l、cl、r 都可以使用固定参数

dd("1735286838520"+"1730789038315978754"+"9b5a1fa345624fdf937312eb93aabe4e"+"%E5%BC%A0%E4%B8%89&411222200002022223&","9b5a1fa345624fdf937312eb93aabe4e")

控制台直接生成

Sekiro+Yakit 热加载无痛绕sign

然后成功过签

Sekiro+Yakit 热加载无痛绕sign

正常思路,我们要开始逆向 dd 函数,或者使用 execjs ,但是这都太麻烦了,今天的主角 sekiro 登场

Sekiro

花里胡哨的不讲,网上也挺多的,直接实操(安装就不讲喽,一搜一大堆)

首先把 dd()函数作用域提升至全局

Sekiro+Yakit 热加载无痛绕sign

启动Sekiro

Sekiro+Yakit 热加载无痛绕sign
Sekiro+Yakit 热加载无痛绕sign

添加如下代码到控制台或者新增代码段

Sekiro+Yakit 热加载无痛绕sign

快速上手 | sekiro

Sekiro+Yakit 热加载无痛绕sign

但是需要我们有一点小改动(箭头指向的 4 处)

Sekiro+Yakit 热加载无痛绕sign
  • 将wss://sekiro.iinti.cn:5612改成ws://127.0.0.1:5612

  • test_web 随意

  • testAction 随意

  • 代码逻辑根据实际情况来

然后点击下边的 Ctrl+Enter 即可

Sekiro+Yakit 热加载无痛绕sign

python 代码调试

import requests  data = {  "group""wsyu9a",  "action""signDecrypt",  "data1":"123",  "data2":"123"}  res = requests.get("http://127.0.0.1:5612/business/invoke",params=data )  print(res.text)
Sekiro+Yakit 热加载无痛绕sign

Yakit 热加载

signDecryot = func(sfz) {  APP_TIME = '1735326352548'  APP_LICENSE_ID = '1730789038315978754'  appKey = '9b5a1fa345624fdf937312eb93aabe4e'  s=codec.EscapeQueryUrl('张三')+'&'+sfz+'&'  // return s  data1=APP_TIME+APP_LICENSE_ID+appKey+codec.EncodeUrl(s)  data2=appKey  rsp = http.Get(f"http://127.0.0.1:5612/business/invoke?group=wsyu9a111&action=signDecrypt&data1=${data1}&data2=${data2}")~return json.Find(rsp.Data(), "$.data")  }

成功

Sekiro+Yakit 热加载无痛绕sign

参考

https://sekiro.iinti.cn/sekiro-doc/01_manual/1.quickstart.html#android-xposed

https://mp.weixin.qq.com/s/383WoENRfTpVWLNXvEjHqw

https://blog.csdn.net/weixin_43927244/article/details/127125217

文章首发先知社区:https://xz.aliyun.com/t/17003

原文始发于微信公众号(朱厌安全):Sekiro+Yakit 热加载无痛绕sign

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

发表评论

匿名网友 填写信息