public InvokeDynamic getInvokeDynamic() { if (invokeDynamicCheckBox.isSelected()) { switch (invokeDynamicComboBox.getSelectedIndex()) { case 0: { return new LightInvokeDynamic(); } case 1: { return new NormalInvokeDynamic(); } case 2: { return new HeavyInvokeDynamic(); } default: { throw new IllegalStateException(String.format("Bad invokedynamic type %d.", invokeDynamicComboBox.getSelectedIndex())); } } } else { return null; } }
Handle bsmHandle = new Handle(H_INVOKESTATIC, memberNames.className, memberNames.bootstrapMethodName, "(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;", false); this.getClassWrappers().parallelStream().filter(classWrapper -> !"java/lang/Enum".equals(classWrapper.classNode.superName) && !excluded(classWrapper) && classWrapper.classNode.version >= V1_7).forEach(classWrapper -> { ClassNode classNode = classWrapper.classNode; classWrapper.methods.parallelStream().filter(methodWrapper -> !excluded(methodWrapper) && hasInstructions(methodWrapper.methodNode)).forEach(methodWrapper -> { MethodNode methodNode = methodWrapper.methodNode; encrypt(sb.toString(), memberNames), newSig, bsmHandle FieldInsnNode fieldInsnNode = (FieldInsnNode) insn; ClassWrapper cw = getClassPath().get(fieldInsnNode.owner); if (cw == null) { throw new MissingClassException(fieldInsnNode.owner + " does not exist in classpath"); encrypt(sb.toString(), memberNames), newSig, bsmHandle ClassNode decryptor = createBootstrap(memberNames); this.getClasses().put(decryptor.name, new ClassWrapper(decryptor, false)); LoggerUtils.stdOut(String.format("Hid %d field and/or method accesses with invokedynamics.", counter.get()));
public static InvokeDynamic getTransformerFromString(String s) { switch (s.toLowerCase()) { case "light": { return new LightInvokeDynamic(); } case "normal": { return new NormalInvokeDynamic(); } case "heavy": { return new HeavyInvokeDynamic(); } default: { throw new IllegalConfigurationValueException("Did not expect " + s + " as a invokedynamic obfuscation mode"); } } } }