浅谈JAVA反射机制

admin 2022年3月2日12:51:57评论65 views字数 1409阅读4分41秒阅读模式

浅谈JAVA反射机制

扫一扫关注公众号,长期致力于安全研究浅谈JAVA反射机制




0x01 前言

最近一段时间一直在学习JAVA安全方面的知识,但从深入来讲,很多地方都用到了反射,所以从新复习了一遍,做了几个反射的练习题,来巩固一下。由于网上有很多文章讲解了反射基础的内容,所以本人不重复“造轮子”。直接拿出现有的例题,来做分析。


0x02 例题1分析

浅谈JAVA反射机制

   代码讲解:既然name属性是私有,所以需要使用getDeclaredField来获取该属性,并通过返回值name进行爆破,之后发现getName方法为public,所以直接使用getMethod获取即可。并通过invoke调用该方法,而该方法返回值为String,所以直接使用Object接收即可。最后进行打印输出
    public void test07()throws Exception{        Class cls = Class.forName("org.example.pojo.PrivateTest");        PrivateTest privateTest = (PrivateTest) cls.newInstance();        Field name = cls.getDeclaredField("name");        name.setAccessible(true);        name.set(privateTest,"Met32");        Method method = cls.getMethod("getName");        Object obj = method.invoke(privateTest);        System.out.println(obj);    }
    

0x03 例题2分析

浅谈JAVA反射机制


有了例题1的基础后,玩一个实操吧。


File类存在于java.io中,通过forName获取即可。之后通过getDeclaredConstructors获取所有构造器,遍历输出即可

浅谈JAVA反射机制


既然要创建一个txt文件,说明在构造初始化需要传入一个String类型的参数

所以直接通过cls.getConstructor(String.class)得到Constructor,得到之后通过newInstance传入文件名,到这步,就相当于

File file = new File("d://mynew.txt")
所以还需要使用createNewFile方法创建即可,该方法为公有方法,直接使用getMethod获取,并最终使用invoke实例化即可

浅谈JAVA反射机制

    public void test08()throws Exception{        Class cls = Class.forName("java.io.File");        Constructor[] constructors = cls.getDeclaredConstructors();        for (Constructor constructor : constructors) {            System.out.println(constructor);        }
Constructor constructor = cls.getConstructor(String.class); Object obj = constructor.newInstance("d://mynew.txt"); Method method = cls.getMethod("createNewFile"); method.invoke(obj); }

    


11111
微信搜索关注 "安全族" 长期致力于安全研究


下方扫一下扫,即可关注浅谈JAVA反射机制

浅谈JAVA反射机制






原文始发于微信公众号(安全族):浅谈JAVA反射机制

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年3月2日12:51:57
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   浅谈JAVA反射机制https://cn-sec.com/archives/810301.html

发表评论

匿名网友 填写信息