跳转至内容
  • 版块
  • 最新
  • 热门
  • 标签
  • 群组
皮肤
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • 默认(Zephyr)
  • 不使用皮肤
折叠
品牌标识

VariedMC 魔改论坛

  1. 主页
  2. 妙妙工具
  3. [原创][KubeJS 7][BrokenClassFilter]关于Nashorn在kjs中的应用

[原创][KubeJS 7][BrokenClassFilter]关于Nashorn在kjs中的应用

已定时 已固定 已锁定 已移动 妙妙工具
1.21.1kubejsunsafeneoforge
3 帖子 3 发布者 57 浏览 1 关注中
  • 从旧到新
  • 从新到旧
  • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • 忆然忆 在线
      忆然忆 在线
      忆然
      KubeJS
      编写于 最后由 忆然 编辑
      #1

      前言
      ClassFilter是kjs的一个保护机制,笔者在这里不建议进行对ClassFilter动手脚
      此篇仅以替换kjs的ClassFilter为例子展示Nashorn在kjs的使用
      本文使用:CC-BY-NC-SA 4.0协议

      因为1.21.1的kubejs ban了反射,因此只能在nashorn里面进行操作
      Nashorn比较复杂,这次就仅展示成品

      let $KubeJS = Java.loadClass("dev.latvian.mods.kubejs.KubeJS")
      
      let $ServerLifecycleHooks = Java.loadClass("net.neoforged.neoforge.server.ServerLifecycleHooks")
      /**@type {$MinecraftServer_} */
      let Server = $ServerLifecycleHooks.getCurrentServer()
      //所有的scriptmanager获取
      let ServerScriptMagager = Server.getServerResources().managers().kjs$getServerScriptManager()
      let ClientScriptMagager = $KubeJS.getClientScriptManager()
      let StartupScriptMagager = $KubeJS.getStartupScriptManager()
      
      
      
      let $ScriptEngineManager = Java.loadClass("javax.script.ScriptEngineManager")
      let Nashorn = new $ScriptEngineManager().getEngineFactories()[0].getScriptEngine()
      
      
      Nashorn.eval(`
        var Clazz = Java.type("java.lang.Class")
        var ClassFilter = Java.type("dev.latvian.mods.kubejs.plugin.ClassFilter")
        var HashSet = Java.type("java.util.HashSet")
        var ArrayList = Java.type("java.util.ArrayList")
      
        var ScriptManager$Clazz = Clazz.forName("dev.latvian.mods.kubejs.script.ScriptManager")
        var ScriptManager$classFilter$Field = ScriptManager$Clazz.getDeclaredField("classFilter")
      
        var ClassFilter$Clazz = Clazz.forName("dev.latvian.mods.kubejs.plugin.ClassFilter")
        var ClassFilter$denyStrong$Field = ClassFilter$Clazz.getDeclaredField("denyStrong")
        var ClassFilter$denyWeak$Field = ClassFilter$Clazz.getDeclaredField("denyWeak")
        
        ScriptManager$classFilter$Field.setAccessible(true)
        ClassFilter$denyStrong$Field.setAccessible(true)
        ClassFilter$denyWeak$Field.setAccessible(true)
      
        var unlock=function(ScriptMagager){
          var ClassFilter = ScriptManager$classFilter$Field.get(ScriptMagager)
          ClassFilter$denyStrong$Field.set(ClassFilter,new HashSet())
          ClassFilter$denyWeak$Field.set(ClassFilter,new ArrayList())
        }
      `)
      //参数传入scriptmanager即可爆破classfilter
      Nashorn.invokeFunction("unlock",ServerScriptMagager)
      let $File = Java.loadClass("java.io.File")
      
      1 条回复 最后回复
      0
      • 假 离线
        假 离线
        假发
        编写于 最后由 编辑
        #2

        要长脑子了😇

        1 条回复 最后回复
        0
        • sdjgeS 离线
          sdjgeS 离线
          sdjge
          KubeJS
          编写于 最后由 编辑
          #3

          补药在1.21.1偷走我的钱包😭

          1 条回复 最后回复
          0
          回复
          • 在新帖中回复
          登录后回复
          • 从旧到新
          • 从新到旧
          • 最多赞同


            • 登录

            • 没有帐号? 注册

            • 登录或注册以进行搜索。
            • 第一个帖子
              最后一个帖子
            0
            • 版块
            • 最新
            • 热门
            • 标签
            • 群组