假设我们有一个叫com.anbai.sec.unsafe.UnSafeTest的类,因为某种原因我们不能直接通过反射的方式去创建UnSafeTest类实例,那么这个时候使用UnsafeallocateInstance方法就可以绕过这个限制了。
    UnSafeTest代码片段:

    1. public class UnSafeTest {
    2. private UnSafeTest() {
    3. // 假设RASP在这个构造方法中插入了Hook代码,我们可以利用Unsafe来创建类实例
    4. System.out.println("init...");
    5. }
    6. }

    使用Unsafe创建UnSafeTest对象:

    1. // 使用Unsafe创建UnSafeTest类实例
    2. UnSafeTest test = (UnSafeTest) unsafe1.allocateInstance(UnSafeTest.class);

    Google的GSON库在JSON反序列化的时候就使用这个方式来创建类实例,在渗透测试中也会经常遇到这样的限制,比如RASP限制了java.io.FileInputStream类的构造方法导致我们无法读文件或者限制了UNIXProcess/ProcessImpl类的构造方法导致我们无法执行本地命令等。