diff --git a/src/main/java/com/novitechie/FileInputStreamTransformer.java b/src/main/java/com/novitechie/FileInputStreamTransformer.java index e29e3ed..20c557c 100644 --- a/src/main/java/com/novitechie/FileInputStreamTransformer.java +++ b/src/main/java/com/novitechie/FileInputStreamTransformer.java @@ -9,7 +9,7 @@ import static org.objectweb.asm.Opcodes.*; public class FileInputStreamTransformer implements MyTransformer { - private static final String RULE = "com/novitechie/rules/VMOptionsReadRule"; + private static final String RULE = "com/novitechie/rules/VMOptionsRule"; @Override public String getHookClassName() { diff --git a/src/main/java/com/novitechie/FilesTransformer.java b/src/main/java/com/novitechie/FilesTransformer.java index 194ad16..db13fd0 100644 --- a/src/main/java/com/novitechie/FilesTransformer.java +++ b/src/main/java/com/novitechie/FilesTransformer.java @@ -9,7 +9,7 @@ import static org.objectweb.asm.Opcodes.*; public class FilesTransformer implements MyTransformer { - private static final String RULE = "com/novitechie/rules/VMOptionsReadRule"; + private static final String RULE = "com/novitechie/rules/VMOptionsRule"; private static final String PATH_DESC = "(Ljava/nio/file/Path;)Z"; @Override diff --git a/src/main/java/com/novitechie/rules/VMOptionsReadRule.java b/src/main/java/com/novitechie/rules/VMOptionsReadRule.java deleted file mode 100644 index acf8419..0000000 --- a/src/main/java/com/novitechie/rules/VMOptionsReadRule.java +++ /dev/null @@ -1,79 +0,0 @@ -package com.novitechie.rules; - -import com.janetfilter.core.commons.DebugInfo; - -import java.io.*; -import java.nio.file.Path; -import java.util.Collections; -import java.util.List; -import java.util.Locale; - -public class VMOptionsReadRule { - - private static final String VMOPTIONS_SUFFIX = ".vmoptions"; - - public static boolean shouldHide(Path path) { - return isVMOptions(path) && StackTraceRule.check(); - } - - public static File redirectFile(File file) { - if (isVMOptions(file) && StackTraceRule.check()) { - return hookFile(file); - } - return file; - } - - public static String redirectPath(String path) { - if (isVMOptions(path) && StackTraceRule.check()) { - return hookFile(new File(path)).getPath(); - } - return path; - } - - public static byte[] emptyBytes(Path path) { - log(path); - return new byte[0]; - } - - public static String emptyString(Path path) { - log(path); - return ""; - } - - public static List emptyLines(Path path) { - log(path); - return Collections.emptyList(); - } - - public static InputStream emptyInputStream(Path path) { - log(path); - return new ByteArrayInputStream(new byte[0]); - } - - public static BufferedReader emptyBufferedReader(Path path) { - log(path); - return new BufferedReader(new StringReader("")); - } - - private static boolean isVMOptions(Path path) { - return path != null && isVMOptions(path.toString()); - } - - private static boolean isVMOptions(File file) { - return file != null && isVMOptions(file.getPath()); - } - - private static boolean isVMOptions(String path) { - return path != null && path.toLowerCase(Locale.ROOT).endsWith(VMOPTIONS_SUFFIX); - } - - private static File hookFile(File fallback) { - Path path = VMOptionsRule.hook(); - return path == null ? fallback : path.toFile(); - } - - private static void log(Path path) { - DebugInfo.output("======================Hide VMOptions read: " + path); - } - -} diff --git a/src/main/java/com/novitechie/rules/VMOptionsRule.java b/src/main/java/com/novitechie/rules/VMOptionsRule.java index 3405e6c..a8b7572 100644 --- a/src/main/java/com/novitechie/rules/VMOptionsRule.java +++ b/src/main/java/com/novitechie/rules/VMOptionsRule.java @@ -2,16 +2,25 @@ package com.novitechie.rules; import com.janetfilter.core.commons.DebugInfo; +import java.io.BufferedReader; +import java.io.ByteArrayInputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; +import java.io.InputStream; +import java.io.StringReader; import java.nio.file.Path; +import java.util.Collections; +import java.util.List; +import java.util.Locale; /** * @author YeloChick */ public class VMOptionsRule { + private static final String VMOPTIONS_SUFFIX = ".vmoptions"; + public static Path hook() { DebugInfo.output("======================Hide VMOptions"); String tmpdir = System.getProperty("java.io.tmpdir"); @@ -27,4 +36,68 @@ public class VMOptionsRule { return null; } } + + public static boolean shouldHide(Path path) { + return isVMOptions(path) && StackTraceRule.check(); + } + + public static File redirectFile(File file) { + if (isVMOptions(file) && StackTraceRule.check()) { + return hookFile(file); + } + return file; + } + + public static String redirectPath(String path) { + if (isVMOptions(path) && StackTraceRule.check()) { + return hookFile(new File(path)).getPath(); + } + return path; + } + + public static byte[] emptyBytes(Path path) { + log(path); + return new byte[0]; + } + + public static String emptyString(Path path) { + log(path); + return ""; + } + + public static List emptyLines(Path path) { + log(path); + return Collections.emptyList(); + } + + public static InputStream emptyInputStream(Path path) { + log(path); + return new ByteArrayInputStream(new byte[0]); + } + + public static BufferedReader emptyBufferedReader(Path path) { + log(path); + return new BufferedReader(new StringReader("")); + } + + private static boolean isVMOptions(Path path) { + return path != null && isVMOptions(path.toString()); + } + + private static boolean isVMOptions(File file) { + return file != null && isVMOptions(file.getPath()); + } + + private static boolean isVMOptions(String path) { + return path != null && path.toLowerCase(Locale.ROOT).endsWith(VMOPTIONS_SUFFIX); + } + + private static File hookFile(File fallback) { + Path path = hook(); + return path == null ? fallback : path.toFile(); + } + + private static void log(Path path) { + DebugInfo.output("======================Hide VMOptions read: " + path); + } }