反射暴破(暴力破解)

通过反射创建对象

  1. 方式一:调用类中的public修饰的无参构造器
  2. 方式二:调用类中的指定构造器
  3. Class类相关方法
    1. newInstance:调用类中的无参构造器(还是public的),获取对应类的对象
    2. getConstructor(Class..clazz):根据参数列表,获取对应的public构造器对象
    3. getDeclaredConstructor(Class..clazz):根据参数列表,获取对应的所有构造器对象
  4. Constructor类相关方法
    1. setAccessible:暴破(使用反射可以访问private构造器/方法/属性)
    2. newInstance(Object..obj):调用构造器

通过反射访问类中的成员

  1. 根据属性名获取Field对象 Field f = clazz对象.getDeclaredField(属性名);
  2. 暴破: f.setAccessible(true);
  3. 访问 f.set(o,值); syso(f.get(o));
  4. 注意: 如果是静态属性,则set和get中的参数o,可以写成null

访问方法

  1. 根据方法名和参数列表获取Method方法对象: Method m = clazz.getDeclaredMethod(方法名, XX.class);
  2. 获取对象: Object o = clazz.newInstance();
  3. 暴破: m.setAccessible(true);
  4. 访问:Object returnValue = m.invoke(o,实参列表);
  5. 注意:如果是静态方法,则invoke的参数o,可以写成null
  6. 反射钟,如果方法有返回值,统一返回Object,但是他运行类型和方法定义的返回类型一致

本文章使用limfx的vscode插件快速发布