跳转至内容

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

妙妙工具
3 3 232 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.21.1偷走我的钱包😭


相关推荐


  • [原创][KubeJS]kubejs获取玩家所处坐标的结构

    妙妙工具 kubejs
    1
    1 赞同
    1 帖子
    146 浏览
    忆然
    本文使用:CC-BY-NC-SA 4.0协议 直接上代码 在此推荐下来自ZZZank的ProbeJS Legacy (已经支持1.20.1了(喜)) /** * 获取实体坐标的所有结构 * @param {Internal.Entity} entity * @returns {$StructureStart_[]} */ function getAllStructuresAt(entity) { let structureList = [] /**@type {$ServerLevel_} */ let serverLevel = entity.level let entityPos = entity.block.pos /** @type {Internal.Structure[]} */ let structureArray = serverLevel.structureManager().getAllStructuresAt(entityPos).keySet().toArray() for (let structure of structureArray) { let structureStart = serverLevel.structureManager().getStructureAt(entityPos, structure) if (structureStart.isValid()) { structureList.push(structureStart) } } return structureList }
  • 0 赞同
    11 帖子
    652 浏览
    不是客服M
    Override被爆掉确实很奇怪…
  • [原创][Mod]基于opengl取色的hsv色盘屏幕

    妙妙工具 渲染
    5
    0 赞同
    5 帖子
    163 浏览
    不是客服M
    没有教程的话,哇达西?