前言
准备入手学习java的安全了,感觉这也是一个大的趋势,想着尽早进入到java安全的探索中,在反序列化链的学习之前,需要先学习反射,不多说了,开干吧
反射
反射定义
对象可以通过反射获取他的类,类可以通过反射拿到所有⽅法(包括私有)
通过java语言中的反射机制可以操作字节码文件,可以读和修改字节码文件
反射的基本运用
1. 获取类对象
a. forName()方法
只需要知道类名,在加载JDBC的时候会采用
实例代码
public class test1 {
public static void main(String[] args) throws ClassNotFoundException {
Class name = Class.forName("java.lang.Runtime");
System.out.println(name);
}
}
b. 直接获取
使用.class
去获取对于的对象
public class test1 {
public static void main(String[] args) throws ClassNotFoundException {
Class<?> name = Runtime.class;
System.out.println(name);
}
}
c. getClass()方法
getClass来获取字节码对象,必须要明确具体的类,然后创建对象
public class test1 {
public static void main(String[] args) throws ClassNotFoundException {
Runtime rt = Runtime.getRuntime();
Class<?> name = rt.getClass();
System.out.println(name);
}
}
d. getSystemClassLoader().loadClass()方法
这个方法和forName类似,只要有类名就可以了,但是区别在于,forName的静态JVM会装载类,并执行static()中的代码
public class getSystemClassLoader {
public static void main(String[] args) throws ClassNotFoundException {
Class<?> name = ClassLoader.getSystemClassLoader()