java-deobfuscator / deobfuscator

The real deal
https://javadeobfuscator.com
Apache License 2.0
1.54k stars 288 forks source link

Branchlock invokedynamic transformer request #975

Open Ghost-Kokoro opened 10 months ago

Ghost-Kokoro commented 10 months ago

Method handle code for example: public static java.lang.invoke.MethodHandle a(java.lang.invoke.MethodHandles$Lookup methodHandles$Lookup, java.lang.invoke.MutableCallSite mutableCallSite, java.lang.String string, java.lang.invoke.MethodType methodType, long l, long l2) { char c = string.charAt(0); java.lang.invoke.MethodHandle methodHandle = null; java.lang.reflect.Field field = null; java.lang.reflect.Method method = null; try { if (c == 'ô' || c == 'F' || c == 'Ó' || c == '¤') { field = fr.wykt.protection.client.y.c(l, l2); java.lang.Class clazz = field.getDeclaringClass(); java.lang.String string2 = field.getName(); java.lang.Class clazz2 = field.getType(); methodHandle = c == 'ô' ? methodHandles$Lookup.findGetter(clazz, string2, clazz2) : (c == 'F' ? methodHandles$Lookup.findSetter(clazz, string2, clazz2) : (c == 'Ó' ? methodHandles$Lookup.findStaticGetter(clazz, string2, clazz2) : methodHandles$Lookup.findStaticSetter(clazz, string2, clazz2))); } else { method = fr.wykt.protection.client.y.d(l, l2); java.lang.Class clazz = method.getDeclaringClass(); java.lang.String string3 = method.getName(); java.lang.invoke.MethodType methodType2 = java.lang.invoke.MethodType.methodType((java.lang.Class)method.getReturnType(), (java.lang.Class[])method.getParameterTypes()); methodHandle = c == 'æ' ? methodHandles$Lookup.findVirtual(clazz, string3, methodType2) : (c == 'õ' ? methodHandles$Lookup.findStatic(clazz, string3, methodType2) : methodHandles$Lookup.findSpecial(clazz, string3, methodType2, clazz)); } return java.lang.invoke.MethodHandles.dropArguments((java.lang.invoke.MethodHandle)methodHandle, (int)(methodType.parameterCount() - 2), (java.lang.Class[])new java.lang.Class[]{java.lang.Long.TYPE, java.lang.Long.TYPE}); } catch (java.lang.Exception exception) { java.lang.StringBuilder stringBuilder = new java.lang.StringBuilder(); stringBuilder.append(exception.getClass().getName()).append(" : ").append(field != null ? field.toString() : (method != null ? method.toString() : " null ")).append(" : ").append(exception.toString()); throw new java.lang.RuntimeException(stringBuilder.toString()); } }