跳转至内容
  • 版块
  • 最新
  • 热门
  • 标签
  • 群组
皮肤
  • 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 6][BrokenClassFilter]关于反射的应用场景与使用实例的论述

[原创][KubeJS 6][BrokenClassFilter]关于反射的应用场景与使用实例的论述

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

      前言
      ClassFilter是kjs的一个保护机制,笔者在这里不建议进行对ClassFilter动手脚
      此篇仅以替换kjs的ClassFilter为例子讲解部分java的反射机制在kjs的使用
      本文使用:CC-BY-NC-SA 4.0协议
      话不多说,先上成品
      这是在kjs里面使用反射爆破kjs的classfilter的实例

      let $ClassFilter = Java.loadClass("dev.latvian.mods.kubejs.util.ClassFilter")
      let $ServerScriptManager = Java.loadClass("dev.latvian.mods.kubejs.server.ServerScriptManager")
      let $KubeJS = Java.loadClass("dev.latvian.mods.kubejs.KubeJS")
      let ScriptManagers = {
        CLIENT: $KubeJS.getClientScriptManager(),
        SERVER: $ServerScriptManager.instance,
        STARTUP: $KubeJS.getStartupScriptManager(),
      }
      /**@type {Internal.Class<$JavaWrapper_>} */
      let clazz = Java.class
      /**@type {Internal.Class<$ScriptManager_>} */
      let $ScriptManager = clazz.getClassLoader().loadClass("dev.latvian.mods.kubejs.script.ScriptManager")
      let classFilterField = $ScriptManager.getDeclaredField('classFilter')
      classFilterField.setAccessible(true)
      classFilterField.set(ScriptManagers.SERVER, new $ClassFilter())
      

      下面进行解析
      let $ClassFilter = Java.loadClass("dev.latvian.mods.kubejs.util.ClassFilter")
      这一步是为获取新的ClassFilter以获取实例以替换已经完成的构建的ClassFilter

      let $ServerScriptManager = Java.loadClass("dev.latvian.mods.kubejs.server.ServerScriptManager")
      let $KubeJS = Java.loadClass("dev.latvian.mods.kubejs.KubeJS")
      let ScriptManagers = {
      CLIENT: $KubeJS.getClientScriptManager(),
      SERVER: $ServerScriptManager.instance,
      STARTUP: $KubeJS.getStartupScriptManager(),
      }
      在这步获取了全部的ScriptManager

      let clazz = Java.class
      这一步获取了Class<JavaWrapper>实例,在后面用于获取类加载器去加载我们需要的类

      let $ScriptManager = clazz.getClassLoader().loadClass("dev.latvian.mods.kubejs.script.ScriptManager")
      获取Class<ScriptManager>

      let classFilterField = $ScriptManager.getDeclaredField('classFilter')
      获取Class<ScriptManager>的classFilter字段(这是我们需要修改的地方)

      classFilterField.setAccessible(true)
      因为classFilter字段是私有的,我们需要开放他的权限

      classFilterField.set(ScriptManagers.SERVER, new $ClassFilter())
      将set方法的第一个参数的classFilter字符替换为我们的新ClassFilter
      (此处仅替换了server的,有其他的需要替换就修改第一个参数)

      至此,kjs的classfilter就被我们优雅(雾)的处理掉了

      1 条回复 最后回复
      1
      • zhenshizZ 离线
        zhenshizZ 离线
        zhenshiz
        编写于 最后由 编辑
        #2

        太危险了。。。让我的钱包空空

        1 条回复 最后回复
        0
        • 温酒故长安温 离线
          温酒故长安温 离线
          温酒故长安
          KubeJS
          编写于 最后由 编辑
          #3

          看不懂喵

          1 条回复 最后回复
          0
          • 半梦半 离线
            半梦半 离线
            半梦
            Packing
            编写于 最后由 编辑
            #4

            非常好爆破,使我钱包空空

            1 条回复 最后回复
            0
            • 不是客服M 离线
              不是客服M 离线
              不是客服
              VariedMC
              编写于 最后由 编辑
              #5

              bro codeblock做全套啊。

              忆然忆 1 条回复 最后回复
              0
              • 不是客服M 不是客服

                bro codeblock做全套啊。

                忆然忆 在线
                忆然忆 在线
                忆然
                KubeJS
                编写于 最后由 编辑
                #6

                @mihono 下面的用上我感觉比较难看,我按我觉得好看的来的

                1 条回复 最后回复
                0
                • 不是客服M 离线
                  不是客服M 离线
                  不是客服
                  VariedMC
                  编写于 最后由 编辑
                  #7

                  image.png
                  这部分也许可以用一下,方便复制,下面的的确不用。

                  忆然忆 1 条回复 最后回复
                  0
                  • 不是客服M 不是客服

                    image.png
                    这部分也许可以用一下,方便复制,下面的的确不用。

                    忆然忆 在线
                    忆然忆 在线
                    忆然
                    KubeJS
                    编写于 最后由 编辑
                    #8

                    @mihono 这部分也是在最顶上拆出来的,应该,不用吧

                    1 条回复 最后回复
                    0
                    • QiHuang02Q 离线
                      QiHuang02Q 离线
                      QiHuang02
                      KubeJS
                      编写于 最后由 编辑
                      #9

                      非常安全,使我的钱包空空🤓

                      1 条回复 最后回复
                      0
                      • AnNingUIA 离线
                        AnNingUIA 离线
                        AnNingUI
                        KubeJS
                        编写于 最后由 编辑
                        #10

                        这就是unsafe的力量吗,使我钱包空空

                        1 条回复 最后回复
                        0
                        • LirxOwOL 离线
                          LirxOwOL 离线
                          LirxOwO
                          编写于 最后由 编辑
                          #11

                          孩子们这使我的钱包空空

                          1 条回复 最后回复
                          😥
                          0
                          • 不是椰浆不 离线
                            不是椰浆不 离线
                            不是椰浆
                            VariedMC Packing KubeJS
                            编写于 最后由 不是椰浆 编辑
                            #12

                            标题格式已修改,可以的话最好加个名字 @忆然

                            忆然忆 1 条回复 最后回复
                            0
                            • 不是椰浆不 不是椰浆

                              标题格式已修改,可以的话最好加个名字 @忆然

                              忆然忆 在线
                              忆然忆 在线
                              忆然
                              KubeJS
                              编写于 最后由 编辑
                              #13

                              @不是椰浆 彳亍,我去塞一个

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

                                补药偷走我的钱包😭

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


                                  • 登录

                                  • 没有帐号? 注册

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