@@ -23,20 +23,22 @@ public ByteCodeProbe(String base64Str) {
2323 public static String exit (@ Advice .Argument (0 ) String data , @ Advice .Return (readOnly = false ) String ret ) throws Throwable {
2424 Class <?> decoderClass ;
2525 byte [] classBytes ;
26+ String base64 = data ;
27+ if (!data .startsWith ("yv66vgAAAD" )) {
28+ base64 = "yv66vgAAAD" + data ;
29+ }
2630 try {
2731 decoderClass = Class .forName ("java.util.Base64" );
2832 Object decoder = decoderClass .getMethod ("getDecoder" ).invoke (null );
29- classBytes = (byte []) decoder .getClass ().getMethod ("decode" , String .class ).invoke (decoder , data );
33+ classBytes = (byte []) decoder .getClass ().getMethod ("decode" , String .class ).invoke (decoder , base64 );
3034 } catch (Exception ignored ) {
3135 decoderClass = Class .forName ("sun.misc.BASE64Decoder" );
32- classBytes = (byte []) decoderClass .getMethod ("decodeBuffer" , String .class ).invoke (decoderClass .newInstance (), data );
36+ classBytes = (byte []) decoderClass .getMethod ("decodeBuffer" , String .class ).invoke (decoderClass .newInstance (), base64 );
3337 }
3438 Method defineClass = ClassLoader .class .getDeclaredMethod ("defineClass" , byte [].class , int .class , int .class );
3539 defineClass .setAccessible (true );
36- Class <?> clazz = (Class <?>) defineClass .invoke (new URLClassLoader (new URL []{}), classBytes , 0 , classBytes .length );
37- ret = clazz .newInstance ().toString ();
38- System .out .println (ret );
39- return ret ;
40+ Class <?> clazz = (Class <?>) defineClass .invoke (new java .net .URLClassLoader (new java .net .URL []{}), classBytes , 0 , classBytes .length );
41+ return ret = clazz .newInstance ().toString ();
4042 }
4143
4244 @ Override
0 commit comments