反射暴破(暴力破解)
通过反射创建对象
- 方式一:调用类中的public修饰的无参构造器
- 方式二:调用类中的指定构造器
- Class类相关方法
- newInstance:调用类中的无参构造器(还是public的),获取对应类的对象
- getConstructor(Class..clazz):根据参数列表,获取对应的public构造器对象
- getDeclaredConstructor(Class..clazz):根据参数列表,获取对应的所有构造器对象
- Constructor类相关方法
- setAccessible:暴破(使用反射可以访问private构造器/方法/属性)
- newInstance(Object..obj):调用构造器
通过反射访问类中的成员
- 根据属性名获取Field对象
Field f = clazz对象.getDeclaredField(属性名);
- 暴破: f.setAccessible(true);
- 访问
f.set(o,值);
syso(f.get(o));
- 注意: 如果是静态属性,则set和get中的参数o,可以写成null
访问方法
- 根据方法名和参数列表获取Method方法对象: Method m = clazz.getDeclaredMethod(方法名, XX.class);
- 获取对象: Object o = clazz.newInstance();
- 暴破: m.setAccessible(true);
- 访问:Object returnValue = m.invoke(o,实参列表);
- 注意:如果是静态方法,则invoke的参数o,可以写成null
- 反射钟,如果方法有返回值,统一返回Object,但是他运行类型和方法定义的返回类型一致
本文章使用limfx的vscode插件快速发布