diff --git a/ForgeMod/build.gradle b/ForgeMod/build.gradle index 19ee15b..a11cf9b 100644 --- a/ForgeMod/build.gradle +++ b/ForgeMod/build.gradle @@ -18,6 +18,8 @@ repositories { sourceSets { forge1122 forge1710 + launchWrapper + modLauncher } dependencies { @@ -26,7 +28,17 @@ dependencies { implementation "org.apache.logging.log4j:log4j-api:2.8.1" //noinspection GradlePackageUpdate // suppress IDEA implementation "org.apache.logging.log4j:log4j-core:2.8.1" - implementation "net.minecraft:launchwrapper:1.12" + + // launch wrapper dependencies + launchWrapperImplementation "net.minecraft:launchwrapper:1.12" + launchWrapperImplementation sourceSets.main.output + + // launch wrapper dependencies + modLauncherImplementation "cpw.mods:modlauncher:2.1.5" + modLauncherImplementation "net.minecraftforge:forge:1.13.2-25.0.222:universal" + modLauncherImplementation sourceSets.main.output + modLauncherCompileOnly "com.google.auto.service:auto-service-annotations:1.0.1" + modLauncherAnnotationProcessor "com.google.auto.service:auto-service:1.0.1" // the dependency for forge 1.12.2 part forge1122Implementation "net.minecraftforge:forge:1.12.2-14.23.5.2856:universal" @@ -42,10 +54,12 @@ dependencies { jar { from sourceSets.forge1122.output from sourceSets.forge1710.output + from sourceSets.launchWrapper.output + from sourceSets.modLauncher.output manifest { attributes([ - "TweakClass": 'zone.rong.nukejndilookupfromlog4j.tweaker.NukeJndiLookupFromLog4j', + "TweakClass": 'zone.rong.nukejndilookupfromlog4j.tweaker.NukeJndiLookupFromLog4jTweaker', ]) } } diff --git a/ForgeMod/src/forge1122/java/zone/rong/nukejndilookupfromlog4j/supports/Support1122.java b/ForgeMod/src/forge1122/java/zone/rong/nukejndilookupfromlog4j/supports/Support1122.java index 9c86071..0f24e90 100644 --- a/ForgeMod/src/forge1122/java/zone/rong/nukejndilookupfromlog4j/supports/Support1122.java +++ b/ForgeMod/src/forge1122/java/zone/rong/nukejndilookupfromlog4j/supports/Support1122.java @@ -21,6 +21,7 @@ public Container() { meta.description = "Prevents a major vulnerability introduced by log4j from being abused."; meta.version = "1.0.0"; meta.authorList.add("Rongmario"); + meta.authorList.add("anatawa12"); meta.credits = "https://github.com/apache/logging-log4j2/pull/608"; } diff --git a/ForgeMod/src/forge1710/java/zone/rong/nukejndilookupfromlog4j/supports/Support1710.java b/ForgeMod/src/forge1710/java/zone/rong/nukejndilookupfromlog4j/supports/Support1710.java index a217043..f19136d 100644 --- a/ForgeMod/src/forge1710/java/zone/rong/nukejndilookupfromlog4j/supports/Support1710.java +++ b/ForgeMod/src/forge1710/java/zone/rong/nukejndilookupfromlog4j/supports/Support1710.java @@ -21,6 +21,7 @@ public Container() { meta.description = "Prevents a major vulnerability introduced by log4j from being abused."; meta.version = "1.0.0"; meta.authorList.add("Rongmario"); + meta.authorList.add("anatawa12"); meta.credits = "https://github.com/apache/logging-log4j2/pull/608"; } diff --git a/ForgeMod/src/launchWrapper/java/zone/rong/nukejndilookupfromlog4j/tweaker/NukeJndiLookupFromLog4jTweaker.java b/ForgeMod/src/launchWrapper/java/zone/rong/nukejndilookupfromlog4j/tweaker/NukeJndiLookupFromLog4jTweaker.java new file mode 100644 index 0000000..ba045e6 --- /dev/null +++ b/ForgeMod/src/launchWrapper/java/zone/rong/nukejndilookupfromlog4j/tweaker/NukeJndiLookupFromLog4jTweaker.java @@ -0,0 +1,59 @@ +package zone.rong.nukejndilookupfromlog4j.tweaker; + +import net.minecraft.launchwrapper.ITweaker; +import net.minecraft.launchwrapper.LaunchClassLoader; +import zone.rong.nukejndilookupfromlog4j.NukeJndiLookupFromLog4j; + +import java.io.File; +import java.lang.reflect.InvocationTargetException; +import java.util.List; + +@SuppressWarnings("unused") +public class NukeJndiLookupFromLog4jTweaker implements ITweaker { + public NukeJndiLookupFromLog4jTweaker() throws ReflectiveOperationException { + NukeJndiLookupFromLog4j.init(); + } + + @Override + public void acceptOptions(List args, File gameDir, File assetsDir, String profile) { + } + + @Override + public void injectIntoClassLoader(LaunchClassLoader classLoader) { + if (classExists(classLoader, "net.minecraftforge.fml.relauncher.CoreModManager")) { + callSupport(classLoader, "Support1122"); + } else if (classExists(classLoader, "cpw.mods.fml.relauncher.CoreModManager")) { + callSupport(classLoader, "Support1710"); + } else { + throw new IllegalStateException("this version of minecraft is not supported!"); + } + } + + private boolean classExists(LaunchClassLoader classLoader, String name) { + try { + classLoader.findClass(name); + return true; + } catch (ClassNotFoundException e) { + return false; + } + } + + private void callSupport(LaunchClassLoader classLoader, String name) { + try { + Class supportClass = classLoader.findClass("zone.rong.nukejndilookupfromlog4j.supports." + name); + supportClass.getMethod("runSupport").invoke(null); + } catch (ClassNotFoundException | NoSuchMethodException | IllegalAccessException | InvocationTargetException e) { + throw new IllegalStateException(e); + } + } + + @Override + public String getLaunchTarget() { + return null; + } + + @Override + public String[] getLaunchArguments() { + return new String[0]; + } +} diff --git a/ForgeMod/src/main/java/zone/rong/nukejndilookupfromlog4j/tweaker/NukeJndiLookupFromLog4j.java b/ForgeMod/src/main/java/zone/rong/nukejndilookupfromlog4j/NukeJndiLookupFromLog4j.java similarity index 58% rename from ForgeMod/src/main/java/zone/rong/nukejndilookupfromlog4j/tweaker/NukeJndiLookupFromLog4j.java rename to ForgeMod/src/main/java/zone/rong/nukejndilookupfromlog4j/NukeJndiLookupFromLog4j.java index 5039293..4d1225f 100644 --- a/ForgeMod/src/main/java/zone/rong/nukejndilookupfromlog4j/tweaker/NukeJndiLookupFromLog4j.java +++ b/ForgeMod/src/main/java/zone/rong/nukejndilookupfromlog4j/NukeJndiLookupFromLog4j.java @@ -1,29 +1,21 @@ -package zone.rong.nukejndilookupfromlog4j.tweaker; +package zone.rong.nukejndilookupfromlog4j; -import net.minecraft.launchwrapper.ITweaker; -import net.minecraft.launchwrapper.Launch; -import net.minecraft.launchwrapper.LaunchClassLoader; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.core.LoggerContext; import org.apache.logging.log4j.core.impl.Log4jContextFactory; import org.apache.logging.log4j.core.lookup.Interpolator; import org.apache.logging.log4j.core.lookup.StrLookup; -import org.apache.logging.log4j.core.util.ShutdownCallbackRegistry; import org.apache.logging.log4j.spi.LoggerContextFactory; -import java.io.File; import java.lang.invoke.MethodHandle; import java.lang.invoke.MethodHandles; import java.lang.reflect.Field; -import java.lang.reflect.InvocationTargetException; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Proxy; import java.lang.reflect.Type; -import java.util.List; import java.util.Map; -@SuppressWarnings("unused") // used by reflection -public class NukeJndiLookupFromLog4j implements ITweaker { +public class NukeJndiLookupFromLog4j { private static final MethodHandle lookupsGetter; static { @@ -60,7 +52,7 @@ private static void nukeJndiLookup(LoggerContext currentCtx) { } catch (Throwable ignored) { } } - public NukeJndiLookupFromLog4j() throws ReflectiveOperationException { + public static void init() throws ReflectiveOperationException { // Deal with initial LoggerContexts final LoggerContextFactory factory = LogManager.getFactory(); ((Log4jContextFactory) factory).getSelector().getLoggerContexts().forEach(NukeJndiLookupFromLog4j::nukeJndiLookup); @@ -75,47 +67,4 @@ public NukeJndiLookupFromLog4j() throws ReflectiveOperationException { return result; })); } - - @Override - public void acceptOptions(List args, File gameDir, File assetsDir, String profile) { - } - - @Override - public void injectIntoClassLoader(LaunchClassLoader classLoader) { - if (classExists(classLoader, "net.minecraftforge.fml.relauncher.CoreModManager")) { - callSupport(classLoader, "Support1122"); - } else if (classExists(classLoader, "cpw.mods.fml.relauncher.CoreModManager")) { - callSupport(classLoader, "Support1710"); - } else { - throw new IllegalStateException("this version of minecraft is not supported!"); - } - } - - private boolean classExists(LaunchClassLoader classLoader, String name) { - try { - classLoader.findClass(name); - return true; - } catch (ClassNotFoundException e) { - return false; - } - } - - private void callSupport(LaunchClassLoader classLoader, String name) { - try { - Class supportClass = classLoader.findClass("zone.rong.nukejndilookupfromlog4j.supports." + name); - supportClass.getMethod("runSupport").invoke(null); - } catch (ClassNotFoundException | NoSuchMethodException | IllegalAccessException | InvocationTargetException e) { - throw new IllegalStateException(e); - } - } - - @Override - public String getLaunchTarget() { - return null; - } - - @Override - public String[] getLaunchArguments() { - return new String[0]; - } } diff --git a/ForgeMod/src/modLauncher/java/zone/rong/nukejndilookupfromlog4j/modlauncher/NukeJndiLookupFromLog4jTransformationService.java b/ForgeMod/src/modLauncher/java/zone/rong/nukejndilookupfromlog4j/modlauncher/NukeJndiLookupFromLog4jTransformationService.java new file mode 100644 index 0000000..97a63f0 --- /dev/null +++ b/ForgeMod/src/modLauncher/java/zone/rong/nukejndilookupfromlog4j/modlauncher/NukeJndiLookupFromLog4jTransformationService.java @@ -0,0 +1,44 @@ +package zone.rong.nukejndilookupfromlog4j.modlauncher; + +import com.google.auto.service.AutoService; +import cpw.mods.modlauncher.api.IEnvironment; +import cpw.mods.modlauncher.api.ITransformationService; +import cpw.mods.modlauncher.api.ITransformer; +import zone.rong.nukejndilookupfromlog4j.NukeJndiLookupFromLog4j; + +import javax.annotation.Nonnull; +import java.util.Collections; +import java.util.List; +import java.util.Set; + +@SuppressWarnings("unused") +@AutoService(ITransformationService.class) +public class NukeJndiLookupFromLog4jTransformationService implements ITransformationService { + public NukeJndiLookupFromLog4jTransformationService() throws ReflectiveOperationException { + NukeJndiLookupFromLog4j.init(); + } + + @Nonnull + @Override + public String name() { + return "nukejndilookupfromlog4j"; + } + + @Override + public void initialize(IEnvironment environment) { + } + + @Override + public void beginScanning(IEnvironment environment) { + } + + @Override + public void onLoad(IEnvironment env, Set otherServices) { + } + + @Nonnull + @Override + public List transformers() { + return Collections.emptyList(); + } +}