From 9870a0e6abb63e7bcee422cc1ec34d6007bfe175 Mon Sep 17 00:00:00 2001 From: Jess Date: Tue, 19 Mar 2024 19:26:52 +0000 Subject: [PATCH] Loader --- .../java/com/baseband/client/BaseBand.java | 6 +- .../baseband/installer/Installer.java | 2 +- .../baseband/installer/InstallerApp.java | 12 +- .../{org => old}/baseband/installer/Key.java | 2 +- .../util/minecraft/MinecraftFiles.java | 2 +- Loader/build.gradle | 4 + Loader/lib/TuddyLIB.jar | Bin 0 -> 456075 bytes .../java/de/tudbut/io/CLSPrintWriter.java | 66 --- .../main/java/de/tudbut/io/StreamReader.java | 143 ----- .../java/de/tudbut/obj/CarrierException.java | 16 - .../java/de/tudbut/obj/DoubleTypedObject.java | 37 -- Loader/src/main/java/de/tudbut/obj/TLMap.java | 204 ------- .../src/main/java/de/tudbut/parsing/JSON.java | 429 -------------- .../src/main/java/de/tudbut/parsing/TCN.java | 518 ----------------- .../main/java/de/tudbut/parsing/TCNArray.java | 132 ----- .../java/de/tudbut/security/AccessKiller.java | 138 ----- .../java/de/tudbut/security/DataKeeper.java | 142 ----- .../tudbut/security/ExtendedStrictness.java | 30 - .../de/tudbut/security/PermissionManager.java | 43 -- .../java/de/tudbut/security/Strictness.java | 35 -- .../de/tudbut/security/StrictnessBuilder.java | 71 --- .../AllowAllRestriction.java | 26 - .../CallClassRestriction.java | 71 --- .../ClassLoaderRestriction.java | 112 ---- .../HideErrorRestriction.java | 19 - .../permissionmanager/PermissionOR.java | 52 -- .../permissionmanager/Restriction.java | 52 -- .../java/de/tudbut/tools/ExtendedMath.java | 23 - .../src/main/java/de/tudbut/tools/Lock.java | 221 -------- .../src/main/java/de/tudbut/tools/Queue.java | 91 --- .../java/de/tudbut/tools/ReflectUtil.java | 134 ----- .../main/java/de/tudbut/tools/Registry.java | 79 --- .../main/java/de/tudbut/tools/Retriever.java | 11 - .../src/main/java/de/tudbut/tools/Stack.java | 30 - .../java/de/tudbut/tools/StringTools.java | 35 -- .../src/main/java/de/tudbut/tools/Tools.java | 527 ------------------ .../main/java/org/baseband/dumpy/Dumpie.java | 119 ---- .../java/org/baseband/launcher/Loader.java | 88 +++ .../java/org/baseband/launcher/Tweaker.java | 43 +- .../classloader/CustomClassLoader.java | 78 +++ .../classloader/CustomClassloader.java | 275 --------- .../classloader/CustomMixinServer.java | 35 ++ .../org/baseband/launcher/launch/Loader.java | 491 ---------------- .../launcher/security/SecurityImpl.java | 7 + .../launcher/security/impl/TestImpl.java | 10 + .../tweaker/CfgAccessTransformer.java | 16 - .../org/baseband/launcher/tweaker/Core.java | 31 -- .../baseband/launcher/url/ByteWrapper.java | 12 + .../launcher/url/ResourceConnection.java | 31 ++ .../org/baseband/launcher/url/URLHandler.java | 19 + .../launcher/util/BBPermissionManager.java | 76 --- .../util/BaseBandSecurityManager.java | 47 -- .../util/DynamicPermissionManager.java | 42 -- .../java/org/baseband/launcher/util/Key.java | 117 ---- .../launcher/util/MixinRestriction.java | 50 -- .../org/baseband/launcher/util/RSAKey.java | 76 +++ .../java/org/baseband/launcher/util/Util.java | 11 + Loader/src/main/resources/mcmod.info | 6 +- 58 files changed, 388 insertions(+), 4807 deletions(-) rename Installer/src/main/java/{org => old}/baseband/installer/Installer.java (90%) rename Installer/src/main/java/{org => old}/baseband/installer/InstallerApp.java (98%) rename Installer/src/main/java/{org => old}/baseband/installer/Key.java (98%) rename Installer/src/main/java/{org => old}/baseband/installer/util/minecraft/MinecraftFiles.java (94%) create mode 100644 Loader/lib/TuddyLIB.jar delete mode 100644 Loader/src/main/java/de/tudbut/io/CLSPrintWriter.java delete mode 100644 Loader/src/main/java/de/tudbut/io/StreamReader.java delete mode 100644 Loader/src/main/java/de/tudbut/obj/CarrierException.java delete mode 100644 Loader/src/main/java/de/tudbut/obj/DoubleTypedObject.java delete mode 100644 Loader/src/main/java/de/tudbut/obj/TLMap.java delete mode 100644 Loader/src/main/java/de/tudbut/parsing/JSON.java delete mode 100644 Loader/src/main/java/de/tudbut/parsing/TCN.java delete mode 100644 Loader/src/main/java/de/tudbut/parsing/TCNArray.java delete mode 100644 Loader/src/main/java/de/tudbut/security/AccessKiller.java delete mode 100644 Loader/src/main/java/de/tudbut/security/DataKeeper.java delete mode 100644 Loader/src/main/java/de/tudbut/security/ExtendedStrictness.java delete mode 100644 Loader/src/main/java/de/tudbut/security/PermissionManager.java delete mode 100644 Loader/src/main/java/de/tudbut/security/Strictness.java delete mode 100644 Loader/src/main/java/de/tudbut/security/StrictnessBuilder.java delete mode 100644 Loader/src/main/java/de/tudbut/security/permissionmanager/AllowAllRestriction.java delete mode 100644 Loader/src/main/java/de/tudbut/security/permissionmanager/CallClassRestriction.java delete mode 100644 Loader/src/main/java/de/tudbut/security/permissionmanager/ClassLoaderRestriction.java delete mode 100644 Loader/src/main/java/de/tudbut/security/permissionmanager/HideErrorRestriction.java delete mode 100644 Loader/src/main/java/de/tudbut/security/permissionmanager/PermissionOR.java delete mode 100644 Loader/src/main/java/de/tudbut/security/permissionmanager/Restriction.java delete mode 100644 Loader/src/main/java/de/tudbut/tools/ExtendedMath.java delete mode 100644 Loader/src/main/java/de/tudbut/tools/Lock.java delete mode 100644 Loader/src/main/java/de/tudbut/tools/Queue.java delete mode 100644 Loader/src/main/java/de/tudbut/tools/ReflectUtil.java delete mode 100644 Loader/src/main/java/de/tudbut/tools/Registry.java delete mode 100644 Loader/src/main/java/de/tudbut/tools/Retriever.java delete mode 100644 Loader/src/main/java/de/tudbut/tools/Stack.java delete mode 100644 Loader/src/main/java/de/tudbut/tools/StringTools.java delete mode 100644 Loader/src/main/java/de/tudbut/tools/Tools.java delete mode 100644 Loader/src/main/java/org/baseband/dumpy/Dumpie.java create mode 100644 Loader/src/main/java/org/baseband/launcher/Loader.java create mode 100644 Loader/src/main/java/org/baseband/launcher/classloader/CustomClassLoader.java delete mode 100644 Loader/src/main/java/org/baseband/launcher/classloader/CustomClassloader.java create mode 100644 Loader/src/main/java/org/baseband/launcher/classloader/CustomMixinServer.java delete mode 100644 Loader/src/main/java/org/baseband/launcher/launch/Loader.java create mode 100644 Loader/src/main/java/org/baseband/launcher/security/SecurityImpl.java create mode 100644 Loader/src/main/java/org/baseband/launcher/security/impl/TestImpl.java delete mode 100644 Loader/src/main/java/org/baseband/launcher/tweaker/CfgAccessTransformer.java delete mode 100644 Loader/src/main/java/org/baseband/launcher/tweaker/Core.java create mode 100644 Loader/src/main/java/org/baseband/launcher/url/ByteWrapper.java create mode 100644 Loader/src/main/java/org/baseband/launcher/url/ResourceConnection.java create mode 100644 Loader/src/main/java/org/baseband/launcher/url/URLHandler.java delete mode 100644 Loader/src/main/java/org/baseband/launcher/util/BBPermissionManager.java delete mode 100644 Loader/src/main/java/org/baseband/launcher/util/BaseBandSecurityManager.java delete mode 100644 Loader/src/main/java/org/baseband/launcher/util/DynamicPermissionManager.java delete mode 100644 Loader/src/main/java/org/baseband/launcher/util/Key.java delete mode 100644 Loader/src/main/java/org/baseband/launcher/util/MixinRestriction.java create mode 100644 Loader/src/main/java/org/baseband/launcher/util/RSAKey.java create mode 100644 Loader/src/main/java/org/baseband/launcher/util/Util.java diff --git a/Client/src/main/java/com/baseband/client/BaseBand.java b/Client/src/main/java/com/baseband/client/BaseBand.java index 997fc17..7b813ba 100644 --- a/Client/src/main/java/com/baseband/client/BaseBand.java +++ b/Client/src/main/java/com/baseband/client/BaseBand.java @@ -37,11 +37,11 @@ import java.util.function.Consumer; public class BaseBand { public static int majorVersion = 1; - public static int buildNumber = 487; - public static String hash = "36c1edbaa0c2f6b3"; + public static int buildNumber = 497; + public static String hash = "06b9a1db4ba97794"; public static String name = "BaseBand"; - public long timeOfCompile = 1700171942984L; + public long timeOfCompile = 1710629129384L; public CommandManager commandRegistry; public EventBus eventBus; public ArrayList modules = new ArrayList<>(); diff --git a/Installer/src/main/java/org/baseband/installer/Installer.java b/Installer/src/main/java/old/baseband/installer/Installer.java similarity index 90% rename from Installer/src/main/java/org/baseband/installer/Installer.java rename to Installer/src/main/java/old/baseband/installer/Installer.java index a157172..259be95 100644 --- a/Installer/src/main/java/org/baseband/installer/Installer.java +++ b/Installer/src/main/java/old/baseband/installer/Installer.java @@ -3,7 +3,7 @@ * Unauthorized copying of this file via any medium is Strictly Prohibited. */ -package org.baseband.installer; +package old.baseband.installer; import javax.swing.*; diff --git a/Installer/src/main/java/org/baseband/installer/InstallerApp.java b/Installer/src/main/java/old/baseband/installer/InstallerApp.java similarity index 98% rename from Installer/src/main/java/org/baseband/installer/InstallerApp.java rename to Installer/src/main/java/old/baseband/installer/InstallerApp.java index 9de85d7..40a2e76 100644 --- a/Installer/src/main/java/org/baseband/installer/InstallerApp.java +++ b/Installer/src/main/java/old/baseband/installer/InstallerApp.java @@ -3,15 +3,14 @@ * Unauthorized copying of this file via any medium is Strictly Prohibited. */ -package org.baseband.installer; +package old.baseband.installer; -import org.baseband.installer.util.minecraft.MinecraftFiles; +import old.baseband.installer.util.minecraft.MinecraftFiles; import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.crypto.SecretKey; -import javax.crypto.SecretKeyFactory; import javax.swing.*; import java.awt.*; import java.awt.event.ItemEvent; @@ -19,7 +18,6 @@ import java.awt.event.ItemListener; import java.io.*; import java.net.Socket; import java.security.*; -import java.security.spec.PKCS8EncodedKeySpec; import java.security.spec.X509EncodedKeySpec; import java.util.Base64; import java.util.UUID; @@ -29,7 +27,7 @@ public class InstallerApp { private JFrame installerFrame; public static String username; public static String password; - public static Key keyinstance; + public static old.baseband.installer.Key keyinstance; public InstallerApp() { try { @@ -134,7 +132,7 @@ public class InstallerApp { //We need this to make sure we're not being poked at String ticket = getRandomTicket(); - keyinstance = new Key(ticket); + keyinstance = new old.baseband.installer.Key(ticket); byte[] encryptedTicket = aesE.doFinal(ticket.getBytes()); outputF.writeInt(encryptedTicket.length); outputF.write(encryptedTicket); @@ -294,7 +292,7 @@ public class InstallerApp { //We need this to make sure we're not being poked at String ticket = getRandomTicket(); - keyinstance = new Key(ticket); + keyinstance = new old.baseband.installer.Key(ticket); byte[] encryptedTicket = aesE.doFinal(ticket.getBytes()); outputF.writeInt(encryptedTicket.length); outputF.write(encryptedTicket); diff --git a/Installer/src/main/java/org/baseband/installer/Key.java b/Installer/src/main/java/old/baseband/installer/Key.java similarity index 98% rename from Installer/src/main/java/org/baseband/installer/Key.java rename to Installer/src/main/java/old/baseband/installer/Key.java index 1a9f79b..314dee5 100644 --- a/Installer/src/main/java/org/baseband/installer/Key.java +++ b/Installer/src/main/java/old/baseband/installer/Key.java @@ -3,7 +3,7 @@ * Unauthorized copying of this file via any medium is Strictly Prohibited. */ -package org.baseband.installer; +package old.baseband.installer; import java.nio.charset.StandardCharsets; import java.util.UUID; diff --git a/Installer/src/main/java/org/baseband/installer/util/minecraft/MinecraftFiles.java b/Installer/src/main/java/old/baseband/installer/util/minecraft/MinecraftFiles.java similarity index 94% rename from Installer/src/main/java/org/baseband/installer/util/minecraft/MinecraftFiles.java rename to Installer/src/main/java/old/baseband/installer/util/minecraft/MinecraftFiles.java index 058e8e1..9ecd2cc 100644 --- a/Installer/src/main/java/org/baseband/installer/util/minecraft/MinecraftFiles.java +++ b/Installer/src/main/java/old/baseband/installer/util/minecraft/MinecraftFiles.java @@ -3,7 +3,7 @@ * Unauthorized copying of this file via any medium is Strictly Prohibited. */ -package org.baseband.installer.util.minecraft; +package old.baseband.installer.util.minecraft; import java.io.File; diff --git a/Loader/build.gradle b/Loader/build.gradle index 8ad0b0d..7d4f052 100644 --- a/Loader/build.gradle +++ b/Loader/build.gradle @@ -70,6 +70,10 @@ dependencies { exclude module: 'log4j-core' } + jarLibs(fileTree(dir: "lib", include: "*.jar")); + + jarLibs(group: 'com.github.oshi', name: 'oshi-core', version: '6.5.0'); + annotationProcessor('org.spongepowered:mixin:0.8.5:processor') { exclude module: 'gson' } diff --git a/Loader/lib/TuddyLIB.jar b/Loader/lib/TuddyLIB.jar new file mode 100644 index 0000000000000000000000000000000000000000..b6f4e0a17192f51e3de1ba5a68aa65153faab973 GIT binary patch literal 456075 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%0A#FbtHPaXfSTxm5zK#dq6lE`zp}x#qFmEuN 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 |ydx=~=hy0Z4 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 z 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
Example:{@code
-     *     for (String key : tcn.map.keys()) {
-     *         deepConvert(key, tcn.get(key), tcn);
-     *     }
-     * }
- * @param key The key of o - * @param o Any value in a TCN - * @param top The TCN that o is embedded in - */ - public static void deepConvert(String key, Object o, TCN top) { - if(!(o instanceof TCN) && !(o instanceof TCNArray)) - return; - TCN tcn; - if(o instanceof TCN) { - tcn = (TCN) o; - } - else - tcn = ((TCNArray) o).toTCN(); - - for (String theKey : tcn.map.keys()) { - deepConvert(theKey, tcn.get(theKey), tcn); - } - - if (tcn.isArray) { - top.set(key, TCNArray.fromTCN(tcn)); - } - } - - private static void deepPut(DoubleTypedObject, Stack> path, TCN tcn, String value) throws TCNException { - try { - if (path.o.size() == 1) { - tcn.map.set(path.o.next(), value); - } - else { - int arrayPos = path.t.popBottom(); - TCN toPut = (TCN) tcn.map.get(path.o.getBottom(), () -> new TCN(arrayPos != -1)); - tcn.map.set(path.o.popBottom(), toPut); - deepPut(path, toPut, value); - } - } catch (Exception e) { - throw new TCNException(null, pathToString(path.o) + ": " + value, e); - } - } - - private static Map, Stack>, String> deepScan(String s) throws TCNException { - String[] lines = s.split("\n"); - Map, Stack>, String> map = new LinkedHashMap<>(); - - Stack array = new Stack<>(); - array.add(false); - Stack arrayPos = new Stack<>(); - Stack path = new Stack<>(); - for (int i = 0; i < lines.length; i++) { - try { - String line = removePrefixSpaces(lines[i]); - if (!line.isEmpty() && !line.startsWith("#")) { - if (line.equals("}") || line.equals("]")) { - path.next(); - array.next(); - arrayPos.next(); - } - else if (line.endsWith(" {") && !line.contains(": ")) { - String k = line.split(" \\{")[0].replaceAll("%C", ":").replaceAll("%N", "\n"); - if (k.startsWith("%S")) { - if (!k.equals("%S")) - k = " " + k.substring(2); - else - k = " "; - } - if (k.startsWith("%H")) { - if (!k.equals("%H")) - k = "#" + k.substring(2); - else - k = "#"; - } - if(!array.peek()) - path.add(k.replaceAll("%P", "%")); - else { - path.add(arrayPos.peek() + ""); - arrayPos.add(arrayPos.next() + 1); - } - array.add(false); - arrayPos.add(-1); - } - else if (line.endsWith(" [") && !line.contains(": ")) { - String k = line.split(" \\[")[0].replaceAll("%C", ":").replaceAll("%N", "\n"); - if (k.startsWith("%S")) { - if (!k.equals("%S")) - k = " " + k.substring(2); - else - k = " "; - } - if (k.startsWith("%H")) { - if (!k.equals("%H")) - k = "#" + k.substring(2); - else - k = "#"; - } - if(!array.peek()) - path.add(k.replaceAll("%P", "%")); - else { - path.add(arrayPos.peek() + ""); - arrayPos.add(arrayPos.next() + 1); - } - array.add(true); - arrayPos.add(0); - } - else { - Stack p = path.clone(); - if(array.peek()) { - p.add(String.valueOf(arrayPos.peek())); - if(line.equals(";")) - line = "; "; - map.put(new DoubleTypedObject<>(p, arrayPos.clone()), line.substring(2).replaceAll("%N", "\n").replaceAll("%P", "%")); - arrayPos.add(arrayPos.next() + 1); - } - else { - String rawk = line.split(": ")[0].replaceAll("%C", ":").replaceAll("%N", "\n"); - String k = rawk; - if (k.startsWith("%S")) { - if (!k.equals("%S")) - k = " " + k.substring(2); - else - k = " "; - } - if (k.startsWith("%H")) { - if (!k.equals("%H")) - k = "#" + k.substring(2); - else - k = "#"; - } - p.add(k.replaceAll("%P", "%")); - map.put(new DoubleTypedObject<>(p, arrayPos.clone()), line.substring(rawk.length() + 2).replaceAll("%N", "\n").replaceAll("%P", "%")); - } - } - } - } catch (Exception e) { - throw new TCNException(i, lines[i], e); - } - } - - return map; - } - - static String pathToString(Stack path) { - StringBuilder s = new StringBuilder("/"); - path = path.clone(); - while (path.hasNext()) { - s.append(path.popBottom()).append("/"); - } - return s.toString(); - } - - private static String removePrefixSpaces(String s) { - while (s.startsWith(" ")) - s = s.substring(1); - return s; - } - - /** - * Creates a new, empty TCN object - * @deprecated Use {@code new} {@link #TCN()} - * @return The new TCN - */ - @Deprecated - public static TCN getEmpty() { - return new TCN(); - } - - public static class TCNException extends Exception { - - public TCNException(Integer line, String lineString, Exception e) { - super("Error in line " + line + " (" + lineString + ")", e); - } - } -} diff --git a/Loader/src/main/java/de/tudbut/parsing/TCNArray.java b/Loader/src/main/java/de/tudbut/parsing/TCNArray.java deleted file mode 100644 index 96684d1..0000000 --- a/Loader/src/main/java/de/tudbut/parsing/TCNArray.java +++ /dev/null @@ -1,132 +0,0 @@ -/* - * Copyright (c) 2023 Jess H & Daniella H. All Rights Reserved. - * Unauthorized copying of this file via any medium is Strictly Prohibited. - */ - -package de.tudbut.parsing; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.Map; - -/** - * TCN-Compatible Arrays - */ -public class TCNArray extends ArrayList { - - /** - * Creates a new, empty TCNArray - */ - public TCNArray() { } - /** - * Creates a new TCNArray from a collection - */ - public TCNArray(Collection collection) { - addAll(collection); - } - - public String getString(int key) { - Object o = get(key); - if(o != null) - return o.toString(); - else - return null; - } - - public Short getShort(int key) { - Object o = get(key); - if(o != null) - return Short.valueOf(String.valueOf(o)); - else - return null; - } - - public Integer getInteger(int key) { - Object o = get(key); - if(o != null) - return Integer.valueOf(String.valueOf(o)); - else - return null; - } - - public Boolean getBoolean(int key) { - Object o = get(key); - if(o != null) - return Boolean.valueOf(String.valueOf(o)); - else - return null; - } - - public Float getFloat(int key) { - Object o = get(key); - if(o != null) - return Float.valueOf(String.valueOf(o)); - else - return null; - } - - public Long getLong(int key) { - Object o = get(key); - if(o != null) - return Long.valueOf(String.valueOf(o)); - else - return null; - } - - public Double getDouble(int key) { - Object o = get(key); - if(o != null) - return Double.valueOf(String.valueOf(o)); - else - return null; - } - - public TCN getSub(int key) { - Object o = get(key); - if(o != null && o.getClass() == TCN.class) - return (TCN) o; - else - return null; - } - - public TCNArray getArray(int key) { - Object o = get(key); - if(o != null && o.getClass() == TCNArray.class) - return (TCNArray) o; - else - return null; - } - - /** - * - * @return a TCN object from this TCNArray, this is the only way to get a TCN with {@link TCN#isArray} true - */ - public TCN toTCN() { - TCN tcn = new TCN(true); - for (int i = 0 ; i < this.size() ; i++) { - tcn.set(String.valueOf(i), get(i)); - } - return tcn; - } - - /** - * Converts a TCN to a TCNArray - * @param tcn The TCN to convert from - * @return The created TCNArray - */ - public static TCNArray fromTCN(TCN tcn) { - TCNArray array = new TCNArray(); - for (String key : tcn.map.keys()) { - array.add(tcn.get(key)); - } - return array; - } - - /** - * Converts the TCNArray to a TCN, then maps it - * @return the created map - */ - public Map toMap() { - return toTCN().toMap(); - } -} diff --git a/Loader/src/main/java/de/tudbut/security/AccessKiller.java b/Loader/src/main/java/de/tudbut/security/AccessKiller.java deleted file mode 100644 index ced12ef..0000000 --- a/Loader/src/main/java/de/tudbut/security/AccessKiller.java +++ /dev/null @@ -1,138 +0,0 @@ -/* - * Copyright (c) 2023 Jess H & Daniella H. All Rights Reserved. - * Unauthorized copying of this file via any medium is Strictly Prohibited. - */ - -package de.tudbut.security; - -import de.tudbut.tools.ReflectUtil; - -import java.lang.ref.SoftReference; -import java.lang.reflect.Constructor; -import java.lang.reflect.Field; -import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -public class AccessKiller { - - private static final Field reflectionData; - - static { - try { - reflectionData = getField(Class.class.getDeclaredField("reflectionData")); - } catch (NoSuchFieldException e) { - throw new InternalError(e); - } - } - - private static Field getField(Field f) { - ReflectUtil.forceAccessible(f); - return f; - } - - private static Object getReflectionData(Class clazz) throws ReflectiveOperationException { - // make sure ReflectionData is populated - clazz.getDeclaredMethods(); - clazz.getDeclaredFields(); - clazz.getDeclaredConstructors(); - clazz.getInterfaces(); - - SoftReference data = (SoftReference) reflectionData.get(clazz); - Object reflectionData = data.get(); - assert reflectionData != null; - return reflectionData; - } - - /** - * WARNING!!! Can only erase private fields!! - * @param clazz Class to kill fields of - * @param fieldsToKill Field names to kill, or empty to kill all. - */ - public static void killFieldAccess(Class clazz, String... fieldsToKill) { - List toKill = Arrays.asList(fieldsToKill); - try { - Object reflectionData = getReflectionData(clazz); - Field data = getField(reflectionData.getClass().getDeclaredField("declaredFields")); - List fields = new ArrayList<>(Arrays.asList((Field[]) data.get(reflectionData))); - if(!toKill.isEmpty()) { - for (int i = 0; i < fields.size(); i++) { - if (toKill.contains(fields.get(i).getName())) - fields.remove(i--); - } - } - else { - fields.clear(); - } - data.set(reflectionData, fields.toArray(new Field[0])); - } catch (Exception e) { - throw new RuntimeException(e); - } - } - - /** - * WARNING!!! Can only erase private methods!! - * @param clazz Class to kill methods of - * @param methodsToKill Method names to kill, or empty to kill all. - */ - public static void killMethodAccess(Class clazz, String... methodsToKill) { - List toKill = Arrays.asList(methodsToKill); - try { - Object reflectionData = getReflectionData(clazz); - Field data = getField(reflectionData.getClass().getDeclaredField("declaredMethods")); - List methods = new ArrayList<>(Arrays.asList((Method[]) data.get(reflectionData))); - if(!toKill.isEmpty()) { - for (int i = 0; i < methods.size(); i++) { - if (toKill.contains(methods.get(i).getName())) - methods.remove(i--); - } - } - else { - methods.clear(); - } - data.set(reflectionData, methods.toArray(new Method[0])); - } catch (Exception e) { - throw new RuntimeException(e); - } - } - - /** - * WARNING!!! Can only erase private constructors!! - * @param clazz Class to kill constructors of - */ - public static void killConstructorAccess(Class clazz) { - try { - Object reflectionData = getReflectionData(clazz); - Field data = getField(reflectionData.getClass().getDeclaredField("declaredConstructors")); - data.set(reflectionData, new Constructor[0]); - } catch (Exception e) { - throw new RuntimeException(e); - } - } - - public static void killReflectionFor(Class... classes) { - for (Class clazz : classes) { - killConstructorAccess(clazz); - killMethodAccess(clazz); - killFieldAccess(clazz); - } - } - - /** - * Stops any code from making further changes to reflectionData. - * This also stops any further AccessKiller calls.
- * Use with EXTREME caution!! - */ - public static void killClassReflection() { - killReflectionFor(Class.class); - } - - /** - * Kills access to possible ways to restore reflective access after it has been removed. - * This should prevent all other ways of accessing fields, but other ways may exist. - */ - public static void ensureKills() { - killMethodAccess(Class.class, "getDeclaredFields0", "getDeclaredMethods0", "getDeclaredConstructors0"); - } -} diff --git a/Loader/src/main/java/de/tudbut/security/DataKeeper.java b/Loader/src/main/java/de/tudbut/security/DataKeeper.java deleted file mode 100644 index 4b3fe2e..0000000 --- a/Loader/src/main/java/de/tudbut/security/DataKeeper.java +++ /dev/null @@ -1,142 +0,0 @@ -/* - * Copyright (c) 2023 Jess H & Daniella H. All Rights Reserved. - * Unauthorized copying of this file via any medium is Strictly Prohibited. - */ - -package de.tudbut.security; - -import de.tudbut.obj.DoubleTypedObject; -import de.tudbut.tools.Lock; - -import java.util.LinkedList; -import java.util.Queue; -import java.util.concurrent.atomic.AtomicReference; -import java.util.function.Consumer; -import java.util.function.Supplier; - -// Keeps some data as safe as possible, unable to be accessed even by reflection -public class DataKeeper { - public static boolean forgetAll = false; - - - public Lock forget = new Lock(true); - private final PermissionManager permissionManager; - private Supplier dataInsertion; - private final Strictness strictness; - private final Lock lock = new Lock(true); - private final Queue>, Lock>> nextFunctionToRun = new LinkedList<>(); - private final Thread keeper = new Thread(this::keep, "DataKeeper"); { keeper.start(); } - - static { initSecurity(); } - - private static void initSecurity() { - // this should prevent any reflection, but is not a 100% guarantee! - AccessKiller.killReflectionFor(DataKeeper.class, Accessor.class); - } - - public DataKeeper(PermissionManager permissionManager, Strictness strictness, T toKeep) { - // make sure reflection is killed for it - permissionManager.killReflection(); - - this.permissionManager = permissionManager; - dataInsertion = () -> toKeep; - this.strictness = strictness; - lock.unlock(); - } - - public Strictness getStrictness() { - return strictness.clone(); - } - - public void access(Consumer> accessor) { - if(!forget.isLocked()) { - throw new IllegalStateException("This DataKeeper has already forgotten its value."); - } - if(!permissionManager.checkCaller(strictness)) { - if(permissionManager.showErrors()) - throw new IllegalAccessError("The active PermissionManager does not allow you to access this DataKeeper."); - else - return; - } - Lock waitLock = new Lock(true); - nextFunctionToRun.add(new DoubleTypedObject<>(accessor, waitLock)); - lock.unlock(); - waitLock.waitHere(500); - } - - public void forget() { - forget.unlock(); - } - - public DataKeeper forgetIn(int ms) { - if(forget.timeLeft() > ms) - return this; - forget.lock(ms); - return this; - } - - private void keep() { - lock.waitHere(); - lock.lock(); - PermissionManager permissionManager = this.permissionManager.clone(); - AtomicReference data = new AtomicReference<>(dataInsertion.get()); - Strictness strictness = this.strictness.clone(); - dataInsertion = null; - while(!forgetAll && forget.isLocked()) { - lock.waitHere(); - lock.lock(500); - - DoubleTypedObject>, Lock> itm = nextFunctionToRun.poll(); - if(itm == null) - continue; - Consumer> toRun = itm.o; - Lock lock = itm.t; - // second layer of protection, crashes this time. - if(!permissionManager.checkLambda(strictness, toRun)) - permissionManager.crash(strictness); - - toRun.accept(new Accessor<>(permissionManager, strictness, data)); - lock.unlock(); - } - } - - // A very last, third layer of protection, not actually that necessary. - public static class Accessor { - // The accessor will only ever be in local variables, so it does - // not have to be reflection-safe. But it is anyway due to AccessKiller. - private final PermissionManager permissionManager; - private final AtomicReference value; - private final Strictness strictness; - - public Accessor(PermissionManager permissionManager, Strictness strictness, AtomicReference data) { - this.permissionManager = permissionManager; - this.strictness = strictness; - value = data; - } - - public T getValue() { - if(permissionManager.checkCaller(strictness)) - return value.get(); - else { - // crash soon - new Thread(() -> { - try { - Thread.sleep(5000); - } catch (InterruptedException e) { - throw new RuntimeException(e); - } - permissionManager.crash(strictness); - }).start(); - // generate a weird error - return (T) value.get().getClass().cast(new Object()); - } - } - - public T setValue(T newValue) { - // check is in getValue - T old = getValue(); - value.set(newValue); - return old; - } - } -} diff --git a/Loader/src/main/java/de/tudbut/security/ExtendedStrictness.java b/Loader/src/main/java/de/tudbut/security/ExtendedStrictness.java deleted file mode 100644 index 147e46a..0000000 --- a/Loader/src/main/java/de/tudbut/security/ExtendedStrictness.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright (c) 2023 Jess H & Daniella H. All Rights Reserved. - * Unauthorized copying of this file via any medium is Strictly Prohibited. - */ - -package de.tudbut.security; - -public class ExtendedStrictness implements Strictness { - static { - AccessKiller.killReflectionFor(ExtendedStrictness.class); - } - private final Strictness primary, secondary; - - public ExtendedStrictness(Strictness primary, Strictness secondary) { - this.primary = primary; - this.secondary = secondary; - } - - @Override - public Object getRawProperty(String name) { - if(primary.hasProperty(name)) - return primary.getRawProperty(name); - return secondary.getRawProperty(name); - } - - @Override - public Strictness clone() { - return new ExtendedStrictness(primary.clone(), secondary.clone()); - } -} diff --git a/Loader/src/main/java/de/tudbut/security/PermissionManager.java b/Loader/src/main/java/de/tudbut/security/PermissionManager.java deleted file mode 100644 index b5c12f1..0000000 --- a/Loader/src/main/java/de/tudbut/security/PermissionManager.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright (c) 2023 Jess H & Daniella H. All Rights Reserved. - * Unauthorized copying of this file via any medium is Strictly Prohibited. - */ - -package de.tudbut.security; - -import de.tudbut.tools.ReflectUtil; - -import java.lang.reflect.Method; -import java.util.Arrays; - -public interface PermissionManager extends Cloneable { - boolean checkCaller(Strictness strictnessLevel); - - boolean checkLambda(Strictness strictnessLevel, T lambda); - - default void crash(Strictness strictnessLevel) { - DataKeeper.forgetAll = true; - try { - Class shutdownClass = Class.forName("java.lang.Shutdown"); - Method exitMethod = shutdownClass.getDeclaredMethod("exit", int.class); - ReflectUtil.forceAccessible(exitMethod); - exitMethod.invoke(null, 1); - } catch (Exception ignored) {} - System.exit(1); - throw new Error(); - } - - default boolean showErrors() { - return true; - } - - default void killReflection() { - Class clazz = getClass(); - while(Arrays.stream(clazz.getInterfaces()).anyMatch(x -> x == PermissionManager.class)) { - AccessKiller.killReflectionFor(clazz); - clazz = clazz.getSuperclass(); - } - } - - PermissionManager clone(); -} diff --git a/Loader/src/main/java/de/tudbut/security/Strictness.java b/Loader/src/main/java/de/tudbut/security/Strictness.java deleted file mode 100644 index c8f3795..0000000 --- a/Loader/src/main/java/de/tudbut/security/Strictness.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright (c) 2023 Jess H & Daniella H. All Rights Reserved. - * Unauthorized copying of this file via any medium is Strictly Prohibited. - */ - -package de.tudbut.security; - -public interface Strictness extends Cloneable { - - Object getRawProperty(String name); - - default T getProperty(String name) { - return (T) getRawProperty(name); - } - default boolean getBoolProperty(String name) { - Boolean b = getProperty(name); - if(b == null) - return false; - return b; - } - default String getStringProperty(String name) { - return getProperty(name); - } - default int getIntProperty(String name) { - return getProperty(name); - } - default boolean hasProperty(String name) { - return getRawProperty(name) != null; - } - default Strictness extend(Strictness newPrimary) { - return new ExtendedStrictness(newPrimary, this); - } - - Strictness clone(); -} diff --git a/Loader/src/main/java/de/tudbut/security/StrictnessBuilder.java b/Loader/src/main/java/de/tudbut/security/StrictnessBuilder.java deleted file mode 100644 index 88b27e5..0000000 --- a/Loader/src/main/java/de/tudbut/security/StrictnessBuilder.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright (c) 2023 Jess H & Daniella H. All Rights Reserved. - * Unauthorized copying of this file via any medium is Strictly Prohibited. - */ - -package de.tudbut.security; - -import de.tudbut.parsing.TCN; - -import java.util.HashMap; - -public class StrictnessBuilder { - static { - AccessKiller.killReflectionFor(StrictnessBuilder.class); - } - - private final HashMap properties = new HashMap<>(); - - public static StrictnessBuilder create() { - return new StrictnessBuilder(); - } - - public static Strictness empty() { - return new StrictnessBuilder().build(); - } - - public StrictnessBuilder property(String s, Object o) { - properties.put(s, o); - return this; - } - - public StrictnessBuilder fromTCN(TCN tcn) { - properties.putAll(tcn.toMap()); - return this; - } - - public StrictnessBuilder tryFromStrictness(Strictness strictness) { - if(strictness instanceof StrictnessImpl) { - properties.putAll((((StrictnessImpl) strictness).properties)); - return this; - } - // error - return null; - } - - public Strictness build() { - return new StrictnessImpl((HashMap) properties.clone()); - } - - private static class StrictnessImpl implements Strictness { - static { - AccessKiller.killReflectionFor(StrictnessImpl.class); - } - - private final HashMap properties; - - public StrictnessImpl(HashMap properties) { - this.properties = properties; - } - - @Override - public Object getRawProperty(String name) { - return properties.get(name); - } - - @Override - public Strictness clone() { - return new StrictnessImpl((HashMap) properties.clone()); - } - } -} diff --git a/Loader/src/main/java/de/tudbut/security/permissionmanager/AllowAllRestriction.java b/Loader/src/main/java/de/tudbut/security/permissionmanager/AllowAllRestriction.java deleted file mode 100644 index 9f8dc2e..0000000 --- a/Loader/src/main/java/de/tudbut/security/permissionmanager/AllowAllRestriction.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright (c) 2023 Jess H & Daniella H. All Rights Reserved. - * Unauthorized copying of this file via any medium is Strictly Prohibited. - */ - -package de.tudbut.security.permissionmanager; - -import de.tudbut.security.PermissionManager; -import de.tudbut.security.Strictness; - -public class AllowAllRestriction implements PermissionManager { - @Override - public boolean checkCaller(Strictness strictnessLevel) { - return true; - } - - @Override - public boolean checkLambda(Strictness strictnessLevel, T lambda) { - return true; - } - - @Override - public PermissionManager clone() { - return this; - } -} diff --git a/Loader/src/main/java/de/tudbut/security/permissionmanager/CallClassRestriction.java b/Loader/src/main/java/de/tudbut/security/permissionmanager/CallClassRestriction.java deleted file mode 100644 index e9944b9..0000000 --- a/Loader/src/main/java/de/tudbut/security/permissionmanager/CallClassRestriction.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright (c) 2023 Jess H & Daniella H. All Rights Reserved. - * Unauthorized copying of this file via any medium is Strictly Prohibited. - */ - -package de.tudbut.security.permissionmanager; - -import de.tudbut.security.PermissionManager; -import de.tudbut.security.Strictness; - -import java.util.Arrays; -import java.util.Collections; -import java.util.Set; -import java.util.stream.Collectors; - -/** - * Supported strictness properties: - * - Restriction.CallClass.MaxDistance (int): How far down the stack trace should the restriction look until it fails - * - Restriction.CallClass.RestrictLambda (bool): If the restriction should apply to lambdas. If true, ONLY classes in the - * allowlist pass, instead of allowing the allowed classes to call "through" others. - */ -public class CallClassRestriction extends Restriction { - - private final Set allow; - - public CallClassRestriction(PermissionManager parent, Class... allowFromClasses) { - super(parent); - allow = Collections.unmodifiableSet(Arrays.stream(allowFromClasses).map(Class::getName).collect(Collectors.toSet())); - } - public CallClassRestriction(Class... allowFromClasses) { - this(null, allowFromClasses); - } - - @Override - public boolean checkCaller(Strictness strictnessLevel) { - StackTraceElement[] st = Thread.currentThread().getStackTrace(); - - if(strictnessLevel.hasProperty("Restriction.CallClass.MaxDistance")) { - int maxDist = strictnessLevel.getIntProperty("Restriction.CallClass.MaxDistance"); - if(st.length > maxDist) { - StackTraceElement[] elements = new StackTraceElement[maxDist]; - System.arraycopy(st, 0, elements, 0, maxDist); - st = elements; - } - } - - boolean isCalledByAllowed = false; - for (StackTraceElement element : st) { - if (allow.contains(element.getClassName())) { - isCalledByAllowed = true; - break; - } - } - return isCalledByAllowed && super.checkCaller(strictnessLevel); - } - - @Override - public boolean checkLambda(Strictness strictnessLevel, T lambda) { - boolean b = true; - if(strictnessLevel.getBoolProperty("Restriction.CallClass.RestrictLambda")) { - // might get more complex soon. - // is class, inner class of it, loaded by it, or lambda in it? - Class enclosingClass = lambda.getClass().getEnclosingClass(); - b = allow.contains(lambda.getClass().getName()) - || allow.contains(lambda.getClass().getName().replaceAll("\\$\\$Lambda.*$", "")); - if (enclosingClass != null) - b = b || allow.contains(enclosingClass.getName()); - } - return b && super.checkLambda(strictnessLevel, lambda); - } -} diff --git a/Loader/src/main/java/de/tudbut/security/permissionmanager/ClassLoaderRestriction.java b/Loader/src/main/java/de/tudbut/security/permissionmanager/ClassLoaderRestriction.java deleted file mode 100644 index 0803df5..0000000 --- a/Loader/src/main/java/de/tudbut/security/permissionmanager/ClassLoaderRestriction.java +++ /dev/null @@ -1,112 +0,0 @@ -/* - * Copyright (c) 2023 Jess H & Daniella H. All Rights Reserved. - * Unauthorized copying of this file via any medium is Strictly Prohibited. - */ - -package de.tudbut.security.permissionmanager; - -import de.tudbut.security.PermissionManager; -import de.tudbut.security.Strictness; -import de.tudbut.tools.ReflectUtil; - -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.util.Arrays; -import java.util.Collections; -import java.util.HashSet; -import java.util.Set; - -/** - * Only allows classes loaded by a certain class loader, and the classloader itself. - * - * Supported strictness properties: - * - Restriction.ClassLoader.MaxDistance (int): How far down the stack trace should the restriction look until it fails - * - Restriction.ClassLoader.RestrictLambda (bool): If the restriction should apply to lambdas. If true, ONLY classes in the - * allowlist pass, instead of allowing the allowed classes to call "through" others. - */ -public class ClassLoaderRestriction extends Restriction { - private final Set allow; - - public ClassLoaderRestriction(PermissionManager parent, ClassLoader... allowFromClassLoaders) { - super(parent); - this.allow = Collections.unmodifiableSet(new HashSet<>(Arrays.asList(allowFromClassLoaders))); - } - - public ClassLoaderRestriction(ClassLoader... allowFromClassLoaders) { - this(null, allowFromClassLoaders); - } - - @Override - public boolean checkCaller(Strictness strictnessLevel) { - StackTraceElement[] st = Thread.currentThread().getStackTrace(); - - if(strictnessLevel.hasProperty("Restriction.ClassLoader.MaxDistance")) { - int maxDist = strictnessLevel.getIntProperty("Restriction.ClassLoader.MaxDistance"); - if(st.length > maxDist) { - StackTraceElement[] elements = new StackTraceElement[maxDist]; - System.arraycopy(st, 0, elements, 0, maxDist); - st = elements; - } - } - - boolean isCalledByAllowed = false; - for (StackTraceElement element : st) { - try { - Class cls = getClassObject(element.getClassName()); - // is the classloader or loaded by it? - if(allow.stream().anyMatch(x -> x.getClass() == cls) || allow.contains(cls.getClassLoader())) { - isCalledByAllowed = true; - break; - } - } catch (Exception e) { - // it'll just stay false - } - } - return isCalledByAllowed && super.checkCaller(strictnessLevel); - } - - private Class getClassObject(String className) throws ClassNotFoundException { - try { - Method findLoadedClass = ClassLoader.class.getDeclaredMethod("findLoadedClass", String.class); - ReflectUtil.forceAccessible(findLoadedClass); - for (ClassLoader allowed : allow) { - Class clazz = (Class) findLoadedClass.invoke(allowed, className); - if(clazz != null) { - return clazz; - } - } - } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) { - throw new RuntimeException(e); - } - return Class.forName(className); - } - - @Override - public boolean checkLambda(Strictness strictnessLevel, T lambda) { - boolean b = true; - if(strictnessLevel.getBoolProperty("Restriction.ClassLoader.RestrictLambda")) { - // might get more complex soon. - // is classloader, inner class of it, or loaded by it? - - - //noinspection SuspiciousMethodCalls - b = allow.contains(lambda) - || allow.contains(lambda.getClass().getClassLoader()); - - // is enclosed class (e.g. anonymous class) - Class enclosingClass = lambda.getClass().getEnclosingClass(); - if (enclosingClass != null) - b = b || allow.stream().anyMatch(x -> x.getClass() == enclosingClass); - - // is lambda in allowed class? - String name = lambda.getClass().getName().replaceAll("\\$\\$Lambda.*$", ""); - b = b || allow.stream().anyMatch(x -> x.getClass().getName().equals(name)); // is lambda in classloader - try { - b = b || allow.contains(getClassObject(name).getClassLoader()); // is lambda in classloader-loaded class - } catch (Exception e) { - // it'll just stay false - } - } - return b && super.checkLambda(strictnessLevel, lambda); - } -} diff --git a/Loader/src/main/java/de/tudbut/security/permissionmanager/HideErrorRestriction.java b/Loader/src/main/java/de/tudbut/security/permissionmanager/HideErrorRestriction.java deleted file mode 100644 index 7c0d73f..0000000 --- a/Loader/src/main/java/de/tudbut/security/permissionmanager/HideErrorRestriction.java +++ /dev/null @@ -1,19 +0,0 @@ -/* - * Copyright (c) 2023 Jess H & Daniella H. All Rights Reserved. - * Unauthorized copying of this file via any medium is Strictly Prohibited. - */ - -package de.tudbut.security.permissionmanager; - -import de.tudbut.security.PermissionManager; - -public class HideErrorRestriction extends Restriction { - public HideErrorRestriction(PermissionManager parent) { - super(parent); - } - - @Override - public boolean showErrors() { - return false; - } -} diff --git a/Loader/src/main/java/de/tudbut/security/permissionmanager/PermissionOR.java b/Loader/src/main/java/de/tudbut/security/permissionmanager/PermissionOR.java deleted file mode 100644 index 37f9788..0000000 --- a/Loader/src/main/java/de/tudbut/security/permissionmanager/PermissionOR.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright (c) 2023 Jess H & Daniella H. All Rights Reserved. - * Unauthorized copying of this file via any medium is Strictly Prohibited. - */ - -package de.tudbut.security.permissionmanager; - -import de.tudbut.security.PermissionManager; -import de.tudbut.security.Strictness; - -public class PermissionOR implements PermissionManager { - - private final PermissionManager primary, secondary; - - public PermissionOR(PermissionManager primary, PermissionManager secondary) { - this.primary = primary; - this.secondary = secondary; - } - - @Override - public boolean checkCaller(Strictness strictnessLevel) { - return primary.checkCaller(strictnessLevel) || secondary.checkCaller(strictnessLevel); - } - - @Override - public boolean checkLambda(Strictness strictnessLevel, T lambda) { - return primary.checkLambda(strictnessLevel, lambda) || secondary.checkLambda(strictnessLevel, lambda); - } - - @Override - public void crash(Strictness strictnessLevel) { - primary.crash(strictnessLevel); - secondary.crash(strictnessLevel); - } - - @Override - public boolean showErrors() { - return primary.showErrors() || secondary.showErrors(); - } - - @Override - public void killReflection() { - PermissionManager.super.killReflection(); - primary.killReflection(); - secondary.killReflection(); - } - - @Override - public PermissionManager clone() { - return new PermissionOR(primary.clone(), secondary.clone()); - } -} diff --git a/Loader/src/main/java/de/tudbut/security/permissionmanager/Restriction.java b/Loader/src/main/java/de/tudbut/security/permissionmanager/Restriction.java deleted file mode 100644 index fbcbc20..0000000 --- a/Loader/src/main/java/de/tudbut/security/permissionmanager/Restriction.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright (c) 2023 Jess H & Daniella H. All Rights Reserved. - * Unauthorized copying of this file via any medium is Strictly Prohibited. - */ - -package de.tudbut.security.permissionmanager; - -import de.tudbut.security.PermissionManager; -import de.tudbut.security.Strictness; - -public abstract class Restriction implements PermissionManager { - - protected PermissionManager parent; - - public Restriction(PermissionManager parent) { - if(parent == null) - parent = new AllowAllRestriction(); - this.parent = parent; - } - - @Override - public boolean checkCaller(Strictness strictnessLevel) { - return parent.checkCaller(strictnessLevel); - } - - @Override - public boolean checkLambda(Strictness strictnessLevel, T lambda) { - return parent.checkLambda(strictnessLevel, lambda); - } - - @Override - public void crash(Strictness strictnessLevel) { - parent.crash(strictnessLevel); - } - - @Override - public void killReflection() { - parent.killReflection(); - PermissionManager.super.killReflection(); - } - - @Override - public PermissionManager clone() { - try { - Restriction cloned = (Restriction) super.clone(); - cloned.parent = parent.clone(); - return cloned; - } catch (CloneNotSupportedException e) { - throw new RuntimeException(e); - } - } -} diff --git a/Loader/src/main/java/de/tudbut/tools/ExtendedMath.java b/Loader/src/main/java/de/tudbut/tools/ExtendedMath.java deleted file mode 100644 index c50331c..0000000 --- a/Loader/src/main/java/de/tudbut/tools/ExtendedMath.java +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright (c) 2023 Jess H & Daniella H. All Rights Reserved. - * Unauthorized copying of this file via any medium is Strictly Prohibited. - */ - -package de.tudbut.tools; - -import java.security.SecureRandom; - -public class ExtendedMath { - - static SecureRandom RANDOM = new SecureRandom(); - - - public static int random(int lower, int upper) { - return (int) randomLong(lower, upper); - } - - public static long randomLong(long lower, long upper) { - upper ++; - return (long) (Math.floor(RANDOM.nextFloat() * (upper - lower)) + lower); - } -} diff --git a/Loader/src/main/java/de/tudbut/tools/Lock.java b/Loader/src/main/java/de/tudbut/tools/Lock.java deleted file mode 100644 index e60adb4..0000000 --- a/Loader/src/main/java/de/tudbut/tools/Lock.java +++ /dev/null @@ -1,221 +0,0 @@ -/* - * Copyright (c) 2023 Jess H & Daniella H. All Rights Reserved. - * Unauthorized copying of this file via any medium is Strictly Prohibited. - */ - -package de.tudbut.tools; - -import java.util.Date; -import java.util.concurrent.atomic.AtomicInteger; - -/** - * Helper for synchronization and timing - */ -public class Lock { - - private final Locker locker = new Locker(); - private boolean locked = false; - private int t = 0; - private long ts = 0; - private final AtomicInteger waiting = new AtomicInteger(); - private volatile boolean[] waiterLocker = null; - - /** - * Object to handle thread locking - */ - private static class Locker { - - /** - * Make the thread wait until {@link Locker#unlock()} is called - * @throws InterruptedException Inherited from {@link Object#wait} - */ - public synchronized void lockHere() throws InterruptedException { - wait(); - } - - /** - * Make the thread wait until {@link Locker#unlock()} is called or the timeout runs out - * @throws InterruptedException Inherited from {@link Object#wait} - * @param timeout Maximal wait time - */ - public synchronized void lockHere(long timeout) throws InterruptedException { - wait(timeout); - } - - /** - * Stop locking - */ - public synchronized void unlock() { - notifyAll(); - } - } - - /** - * Creates a Lock without default state - */ - public Lock() { - - } - - /** - * Creates a Lock with default state - * @param locked Default state - */ - public Lock(boolean locked) { - this.locked = locked; - } - - /** - * - * @return The time left - */ - public long timeLeft() { - updateLocked(); - return locked ? (ts + t) - new Date().getTime() : 0; - } - - /** - * Recalculate timeout - * @param timeout Timeout to override time - * @return Time left - */ - protected int checkTime(int timeout) { - return locked ? checkNegative(Math.min((int) (t - (new Date().getTime() - ts ) ), timeout <= 0 ? Integer.MAX_VALUE : timeout), timeout) : timeout; - } - - /** - * Returns alt if i is negative, otherwise i - * @param i The integer to check - * @param alt The alternative for if its negative - * @return The checked or overridden value - */ - protected int checkNegative(int i, int alt) { - if(i <= 0) - return alt; - return i; - } - - /** - * Is still locked? - */ - protected void updateLocked() { - if(new Date().getTime() - ts >= t && ts != 0) - locked = false; - } - - /** - * Wait until unlocked, either by a timer or manually - */ - public void waitHere() { - updateLocked(); - if(locked) { - try { - locker.lockHere(checkTime(0)); - } - catch (InterruptedException e) { - Thread.currentThread().interrupt(); - } - } - updateLocked(); - } - - /** - * Wait until unlocked, either by a timer, manually, or when it waited for timeout - * @param timeout Timeout - */ - public void waitHere(int timeout) { - updateLocked(); - if(locked) { - try { - locker.lockHere(checkTime(timeout)); - } - catch (InterruptedException e) { - Thread.currentThread().interrupt(); - } - } - updateLocked(); - } - - /** - * Unlock manually - */ - public synchronized void unlock() { - locker.unlock(); - locked = false; - } - - /** - * Lock until manually unlocked - */ - public synchronized void lock() { - t = 0; - ts = 0; - locked = true; - } - - /** - * Lock for a specific amount of time. Timer is passive. - * @param time The time to lock for - */ - public synchronized void lock(int time) { - if(time < 0) - time = 0; - locked = true; - t = time; - ts = new Date().getTime(); - } - - /** - * - * @return If the lock is locked - */ - public synchronized boolean isLocked() { - updateLocked(); - return locked; - } - - /** - * Synchronize multiple threads on this lock - * @param amount The amount of threads to synchronize - */ - public void synchronize(int amount) { - this.locked = true; - if(waiterLocker == null) - waiterLocker = new boolean[amount]; - int i = waiting.get(); - waiting.getAndIncrement(); - locker.unlock(); - while (amount > waiting.get()) { - try { - locker.lockHere(); - } - catch (InterruptedException e) { - Thread.currentThread().interrupt(); - } - } - locker.unlock(); - boolean b; - waiterLocker[i] = true; - b = true; - try { - while (b) { - b = false; - for (int j = 0 ; j < waiterLocker.length ; j++) { - if (!waiterLocker[j]) { - b = true; - break; - } - } - } - } catch (Exception ignored) { } - try { - Thread.sleep(1); - } - catch (InterruptedException e) { - Thread.currentThread().interrupt(); - } - waiting.getAndDecrement(); - waiterLocker = null; - this.locked = false; - } -} diff --git a/Loader/src/main/java/de/tudbut/tools/Queue.java b/Loader/src/main/java/de/tudbut/tools/Queue.java deleted file mode 100644 index 4d3ced1..0000000 --- a/Loader/src/main/java/de/tudbut/tools/Queue.java +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Copyright (c) 2023 Jess H & Daniella H. All Rights Reserved. - * Unauthorized copying of this file via any medium is Strictly Prohibited. - */ - -package de.tudbut.tools; - -import java.util.ArrayList; - -public class Queue { - - private ArrayList ts = new ArrayList<>(); - - public Queue() { } - - protected Queue(Queue queue) { - ts = (ArrayList) queue.ts.clone(); - } - - public synchronized T pushTop(T t) { - ts.add(t); - notifyAll(); - return t; - } - - public synchronized T pushBottom(T t) { - ts.add(0, t); - notifyAll(); - return t; - } - - public synchronized T getTop() { - return ts.get(ts.size() - 1); - } - - public synchronized T getBottom() { - return ts.get(0); - } - - public synchronized T popBottom() { - T t = ts.get(0); - ts.remove(0); - notifyAll(); - return t; - } - - public synchronized T popTop() { - T t = ts.get(ts.size() - 1); - ts.remove(ts.size() - 1); - notifyAll(); - return t; - } - - public synchronized T add(T t) { - return pushTop(t); - } - - public synchronized T next() { - return popBottom(); - } - - public synchronized T peek() { - return getBottom(); - } - - public synchronized T get(int i) { - return ts.get(i); - } - - public synchronized int size() { - return ts.size(); - } - - public synchronized boolean hasNext() { - return ts.size() > 0; - } - - public synchronized ArrayList toList() { - return (ArrayList) ts.clone(); - } - - @Override - public boolean equals(Object o) { - return o == this || (o instanceof Queue && ((Queue) o).ts.equals(ts)); - } - - @Override - public Queue clone() { - return new Queue<>(this); - } -} diff --git a/Loader/src/main/java/de/tudbut/tools/ReflectUtil.java b/Loader/src/main/java/de/tudbut/tools/ReflectUtil.java deleted file mode 100644 index 02cf842..0000000 --- a/Loader/src/main/java/de/tudbut/tools/ReflectUtil.java +++ /dev/null @@ -1,134 +0,0 @@ -/* - * Copyright (c) 2023 Jess H & Daniella H. All Rights Reserved. - * Unauthorized copying of this file via any medium is Strictly Prohibited. - */ - -package de.tudbut.tools; - -import com.sun.org.apache.xpath.internal.operations.Mod; -import de.tudbut.io.CLSPrintWriter; -import de.tudbut.parsing.TCN; -import sun.misc.Unsafe; - -import java.lang.annotation.Annotation; -import java.lang.reflect.AccessibleObject; -import java.lang.reflect.Field; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Modifier; - -public class ReflectUtil { - - public static boolean hasAnnotation(Field field, Class clazz) { - return field.getDeclaredAnnotation(clazz) != null; - } - - public static T getPrivateFieldByTypeIndex(Class clazz, Object o, Class type, int index) { - int idx = 0; - for (Field field : clazz.getDeclaredFields()) { - if(field.getType() == type) { - if(idx++ == index) { - field.setAccessible(true); - try { - return (T) field.get(o); - } - catch (IllegalAccessException e) { - e.printStackTrace(); - } - } - } - } - throw new NullPointerException(); - } - public static T setPrivateFieldByTypeIndex(Class clazz, Object o, Class type, int index, T t) { - int idx = 0; - for (Field field : clazz.getDeclaredFields()) { - if(field.getType() == type) { - if(idx++ == index) { - field.setAccessible(true); - try { - field.set(o, t); - return t; - } - catch (IllegalAccessException e) { - e.printStackTrace(); - } - } - } - } - return null; - } - public static T forceClone(T t) { - if(t.getClass() != Object.class) { - try { - return (T) t.getClass().getDeclaredMethod("clone").invoke(t); - } - catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException ignored) { - throw new IllegalArgumentException(); - } - } - else - return (T) new Object(); - } - - static Unsafe theSafe; - static { - try { - Field f = Unsafe.class.getDeclaredField("theUnsafe"); - f.setAccessible(true); - theSafe = (Unsafe) f.get(null); - } catch (Throwable e) { - throw new Error(e); // Don't recover. - } - } - - - // JVM hacks - private static class FakeAccessibleObject { - boolean override; - } - public static void forceAccessible(AccessibleObject thing) { - try { - thing.setAccessible(true); - if(!thing.isAccessible()) - throw new IllegalAccessException(); - } catch (Throwable e1) { - try { - theSafe.putBoolean(thing, theSafe.objectFieldOffset(AccessibleObject.class.getDeclaredField("override")), true); - if(!thing.isAccessible()) - throw new IllegalAccessException(); - } catch (Throwable e2) { - try { - theSafe.putBoolean(thing, theSafe.objectFieldOffset(FakeAccessibleObject.class.getDeclaredField("override")), true); - if(!thing.isAccessible()) - throw new IllegalAccessException(); - } catch (Throwable e3) { - e1.printStackTrace(); - e2.printStackTrace(); - e3.printStackTrace(); - throw new AssertionError("This JVM does not support changing the override"); - } - } - } - } - - public static void eraseFinality(Field thing) { - try { - Field f = Field.class.getDeclaredField("modifiers"); - forceAccessible(f); - f.set(thing, f.getInt(thing) & ~Modifier.FINAL); - if((thing.getModifiers() & Modifier.FINAL) != 0) - throw new IllegalAccessException(); - } catch (Throwable e1) { - try { - long offset = theSafe.objectFieldOffset(Field.class.getDeclaredField("modifiers")); - theSafe.putInt(thing, offset, theSafe.getInt(thing, offset) & ~Modifier.FINAL); // EZ - if((thing.getModifiers() & Modifier.FINAL) != 0) - throw new IllegalAccessException(); - } catch (Throwable e2) { - e1.printStackTrace(); - e2.printStackTrace(); - throw new AssertionError("This JVM does not support changing field modifiers"); - } - } - } -} diff --git a/Loader/src/main/java/de/tudbut/tools/Registry.java b/Loader/src/main/java/de/tudbut/tools/Registry.java deleted file mode 100644 index f56cca6..0000000 --- a/Loader/src/main/java/de/tudbut/tools/Registry.java +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Copyright (c) 2023 Jess H & Daniella H. All Rights Reserved. - * Unauthorized copying of this file via any medium is Strictly Prohibited. - */ - -package de.tudbut.tools; - -import de.tudbut.io.StreamReader; -import de.tudbut.parsing.TCN; - -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.IOException; -import java.nio.charset.StandardCharsets; -import java.util.HashSet; -import java.util.Set; - -public class Registry { - - private TCN dataStore; - private final Set givenOut = new HashSet<>(); - private String fileName; - - public Registry(String fileName) throws IOException { - try { - FileInputStream reader = new FileInputStream(fileName); - String s = new StreamReader(reader).readAllAsString(); - dataStore = TCN.readMap(Tools.stringToMap(s)); - reader.close(); - } catch (FileNotFoundException e) { - dataStore = new TCN(); - } - this.fileName = fileName; - - Runtime.getRuntime().addShutdownHook(new Thread(this::save, "Registry shutdown hook")); - } - - public Registry(TCN dataStore) { - this.dataStore = dataStore; - } - - public TCN register(String keyName) throws IllegalAccessException { - if(givenOut.contains(keyName) && !keyName.startsWith("public:")) { - throw new IllegalAccessException("Key " + keyName + " has already been given out and is not public."); - } - givenOut.add(keyName); - TCN key = dataStore.getSub(keyName); - if(key == null) { - dataStore.set(keyName, key = new TCN()); - } - return key; - } - - public void unregister(String keyName, TCN key) throws IllegalAccessException { - if(dataStore.getSub(keyName) != key) { - throw new IllegalAccessException("Key " + keyName + " has different content than specified."); - } - givenOut.remove(keyName); - } - - public TCN leak() throws IllegalStateException { - if(!givenOut.isEmpty()) { - throw new IllegalStateException("Registry must not have any items currently given out."); - } - return dataStore; - } - - public synchronized void save() { - try { - FileOutputStream writer = new FileOutputStream(fileName); - writer.write(Tools.mapToString(dataStore.toMap()).getBytes(StandardCharsets.UTF_8)); - writer.close(); - } catch (IOException e) { - System.out.println(Tools.mapToString(dataStore.toMap())); - throw new RuntimeException("Unable to save registry! Dumped it to stdout instead.", e); - } - } -} diff --git a/Loader/src/main/java/de/tudbut/tools/Retriever.java b/Loader/src/main/java/de/tudbut/tools/Retriever.java deleted file mode 100644 index f7c9a38..0000000 --- a/Loader/src/main/java/de/tudbut/tools/Retriever.java +++ /dev/null @@ -1,11 +0,0 @@ -/* - * Copyright (c) 2023 Jess H & Daniella H. All Rights Reserved. - * Unauthorized copying of this file via any medium is Strictly Prohibited. - */ - -package de.tudbut.tools; - -public interface Retriever { - - T retrieve(); -} diff --git a/Loader/src/main/java/de/tudbut/tools/Stack.java b/Loader/src/main/java/de/tudbut/tools/Stack.java deleted file mode 100644 index 0ff519c..0000000 --- a/Loader/src/main/java/de/tudbut/tools/Stack.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright (c) 2023 Jess H & Daniella H. All Rights Reserved. - * Unauthorized copying of this file via any medium is Strictly Prohibited. - */ - -package de.tudbut.tools; - -public class Stack extends Queue { - - public Stack() { } - - protected Stack(Stack stack) { - super(stack); - } - - @Override - public synchronized T next() { - return popTop(); - } - - @Override - public synchronized T peek() { - return getTop(); - } - - @Override - public Stack clone() { - return new Stack<>(this); - } -} diff --git a/Loader/src/main/java/de/tudbut/tools/StringTools.java b/Loader/src/main/java/de/tudbut/tools/StringTools.java deleted file mode 100644 index 8fb3a74..0000000 --- a/Loader/src/main/java/de/tudbut/tools/StringTools.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright (c) 2023 Jess H & Daniella H. All Rights Reserved. - * Unauthorized copying of this file via any medium is Strictly Prohibited. - */ - -package de.tudbut.tools; - -public class StringTools { - - public static String removeIndents(String s) { - while(s.contains("\n ")) { - s = s.replaceAll("\n ", "\n"); - } - while(s.contains("\n\t")) { - s = s.replaceAll("\n\t", "\n"); - } - return s; - } - - public static String multiply(String s, int i) { - StringBuilder builder = new StringBuilder(); - for (int j = 0; j < i; j++) { - builder.append(s); - } - return builder.toString(); - } - - public static String lengthify(String s, String m, int i) { - return s + multiply(m, (i - s.length()) / m.length()); - } - - public static String lengthifyStart(String s, String m, int i) { - return multiply(m, (i - s.length()) / m.length()) + s; - } -} diff --git a/Loader/src/main/java/de/tudbut/tools/Tools.java b/Loader/src/main/java/de/tudbut/tools/Tools.java deleted file mode 100644 index 1ced10c..0000000 --- a/Loader/src/main/java/de/tudbut/tools/Tools.java +++ /dev/null @@ -1,527 +0,0 @@ -/* - * Copyright (c) 2023 Jess H & Daniella H. All Rights Reserved. - * Unauthorized copying of this file via any medium is Strictly Prohibited. - */ - -package de.tudbut.tools; - -import java.io.BufferedReader; -import java.io.InputStreamReader; -import java.lang.reflect.Field; -import java.sql.Time; -import java.util.*; - -public class Tools { - - public static String[] readf(String format, String s) { - // extracts parts of a string denoted by {} - try { - if(!format.contains("{}")) - return format.equals(s) ? new String[]{} : null; - if(format.contains("{}{}")) throw new IllegalArgumentException("Ambiguous argument: '{}{}' found in format string"); - String f = format; - int occurences = 0; - for(; f.indexOf("{}") != -1; occurences++) { - f = f.substring(f.indexOf("{}") + 2); - } - String[] result = new String[occurences]; - - String originalFormat = format; - for(int n = 0; n <= occurences; n++) { // This may throw if it doesn't match, but that's the same outcome - // shave off blanking space - int i = format.indexOf("{}"); - if(i == -1) i = format.length(); - if(!format.substring(0, i).equals(s.substring(0, i))) return null; // If the previous part didn't match, we can forget about it. - if(n == occurences) { - break; - } - format = format.substring(i + 2); - s = s.substring(i); - // populate braces - int x = format.indexOf("{}"); - if(x != -1) { - result[n] = s.substring(0, s.indexOf(format.substring(0, x))); - } - else { - result[n] = s.substring(0, s.length() - (originalFormat.length() - originalFormat.lastIndexOf("{}") - 2)); - } - s = s.substring(result[n].length()); - } - if(result[occurences - 1] == null) // this happens when a later part doesnt match; - return null; - - return result; - } catch(Exception e) { - return null; - } - } - - public static String readf1(String format, String s) { - // extracts parts of a string denoted by {} - String[] r = readf(format, s); - if(r == null) return null; - if(r.length == 0) return ""; - return r[0]; - } - - public static BufferedReader getStdInput() { - return new BufferedReader(new InputStreamReader(System.in)); - } - - public static T randomOutOfArray(T[] array) { - return array[(int) Math.floor(Math.random() * array.length)]; - } - - public static String randomString(int length, String pool) { - StringBuilder r = new StringBuilder(); - - for (int i = 0; i < length; i++) { - r.append(pool.charAt(ExtendedMath.random(0, pool.length() - 1))); - } - - return r.toString(); - } - - public static void copyArray(Object array1, Object array2, int copyLength) { - System.arraycopy(array1, 0, array2, 0, copyLength); - } - - public static String randomAlphanumericString(int length) { - String alphabet = "abcdefghijklmnopqrstuvwxyz"; - String pool = alphabet + alphabet.toUpperCase() + "0123456789"; - - return randomString(length, pool); - } - - public static String randomReadableString(int length) { - String pool = "bcdfghjklmnpqrstvwxyz"; - String readablePool = "aeiou"; - - StringBuilder r = new StringBuilder(); - for (int i = 0; i < length; i++) { - r.append(pool.charAt(ExtendedMath.random(0, pool.length() - 1))) - .append(readablePool.charAt(ExtendedMath.random(0, readablePool.length() - 1))); - } - return r.substring(0, length); - } - - public static String getTime() { - return new Time(new Date().getTime()).toString(); - } - - public static String stringSwitch(Map switchMap, String value) { - if (switchMap.get(value) != null) { - return switchMap.get(value); - } - - return switchMap.get("__default"); - } - - public static Map toSwitchMap(Map alreadyExisting, String newKey, String newVal) { - alreadyExisting.put(newKey, newVal); - alreadyExisting.putIfAbsent("__default", ""); - return alreadyExisting; - } - - public static Map newSwitchMap(String defaultVal) { - HashMap r = new HashMap<>(); - - r.put("__default", defaultVal); - - return r; - } - - public static Map stringToMap(String mapStringParsable) { - LinkedHashMap map = new LinkedHashMap<>(); - - String[] splitTiles = mapStringParsable.split(";"); - for (int i = 0; i < splitTiles.length; i++) { - String tile = splitTiles[i]; - String[] splitTile = tile.split(":"); - if (tile.contains(":")) { - if (splitTile.length == 2) - map.put( - splitTile[0] - .replaceAll("%I", ":") - .replaceAll("%B", ";") - .replaceAll("%P", "%"), - splitTile[1].equals("%N") - ? null - : splitTile[1] - .replaceAll("%I", ":") - .replaceAll("%B", ";") - .replaceAll("%P", "%")); - else - map.put( - splitTile[0] - .replaceAll("%I", ":") - .replaceAll("%B", ";") - .replaceAll("%P", "%"), - ""); - } - } - - return map; - } - - public static String mapToString(Map map) { - StringBuilder r = new StringBuilder(); - - for (String key : map.keySet().toArray(new String[0])) { - - r.append(key.replaceAll("%", "%P").replaceAll(";", "%B").replaceAll(":", "%I")) - .append(":") - .append( - map.get(key) == null - ? "%N" - : map.get(key) - .replaceAll("%", "%P") - .replaceAll(";", "%B") - .replaceAll(":", "%I")) - .append(";"); - } - - return r.toString(); - } - - public static byte[] charArrayToByteArray(char[] chars) { - byte[] bytes = new byte[chars.length]; - - for (int i = 0; i < bytes.length; i++) { - bytes[i] = (byte) (int) chars[i]; - } - - return bytes; - } - - public static int[] charArrayToIntArray(char[] chars) { - int[] ints = new int[chars.length]; - - for (int i = 0; i < ints.length; i++) { - ints[i] = chars[i]; - } - - return ints; - } - - public static char[] intArrayToCharArray(int[] ints) { - char[] chars = new char[ints.length]; - - for (int i = 0; i < ints.length; i++) { - chars[i] = (char) ints[i]; - } - - return chars; - } - - public static int[] byteArrayToIntArray(byte[] bytes) { - int[] ints = new int[bytes.length]; - - for (int i = 0; i < ints.length; i++) { - ints[i] = Byte.toUnsignedInt(bytes[i]); - } - - return ints; - } - - public static int[] byteArrayToUnsignedIntArray(byte[] bytes) { - int[] ints = new int[bytes.length]; - - for (int i = 0; i < ints.length; i++) { - ints[i] = Byte.toUnsignedInt(bytes[i]); - } - - return ints; - } - - public static String wildcardToRegex(String s) { - String r = ""; - char[] charArray = s.toCharArray(); - for (int i = 0, charArrayLength = charArray.length; i < charArrayLength; i++) { - char c = charArray[i]; - r += ("[" + c + "]").replaceAll("\\^", "\\^"); - } - return "^" - + r.replaceAll("\\[\\\\]", "[\\\\}") - .replaceAll("\\[\\*]", "(.|\n)*") - .replaceAll("\\[\\?]", "[.\n]") + "$"; - } - - public static T firstNonNull(T... objects) { - for (int i = 0; i < objects.length; i++) { - if(objects[i] != null) - return objects[i]; - } - return null; - } - - public static class TFS { - - public static String createTFS(String sep) { - Map mainMap = new HashMap<>(); - mainMap.put("head", "\u0000\u0001" + sep + "\u0000\u0002\u0020\u0000\u0003/\u0000"); - return mapToString(mainMap); - } - - public static String getFromHead(String tfs, String key) { - Map tfsMap = stringToMap(tfs); - - for (String val : tfsMap.get("head").split("\\x{0000}")) { - if (val.startsWith(key)) return val.substring(1); - } - return null; - } - - public static String getPath(String tfs, String path) { - String p = Objects.requireNonNull(getFromHead(tfs, "\u0003")); - return path.startsWith("/") ? path : (p.equals("/") ? p : p + "/") + path; - } - - public static String getFile(String tfs, String path) { - Map tfsMap = stringToMap(tfs); - - return tfsMap.get(getPath(tfs, path)); - } - - public static String getFileContent(String file) { - return stringToMap(file).get("content"); - } - - public static String createFile(String tfs, String path, String content) - throws TFSException.TFSFileAlreadyExistsException { - if (getFile(tfs, path) == null) { - Map tfsMap = stringToMap(tfs); - Map fileMap = new HashMap<>(); - - fileMap.put("head", "\u0000"); - fileMap.put("content", content); - fileMap.put("mods", String.valueOf(new Date().getTime())); - fileMap.put("lastMod", String.valueOf(new Date().getTime())); - - tfsMap.put(getPath(tfs, path), mapToString(fileMap)); - return mapToString(tfsMap); - } else throw new TFSException.TFSFileAlreadyExistsException(); - } - - public static String modFile(String tfs, String path, String newContent) - throws TFSException.TFSFileNotFoundException { - if (getFile(tfs, path) != null) { - Map tfsMap = stringToMap(tfs); - Map fileMap = stringToMap(tfsMap.get(getPath(tfs, path))); - - fileMap.put("content", newContent); - fileMap.put("mods", fileMap.get("mods") + ";" + new Date().getTime()); - fileMap.put("lastMod", String.valueOf(new Date().getTime())); - - tfsMap.put(getPath(tfs, path), mapToString(fileMap)); - return mapToString(tfsMap); - } else throw new TFSException.TFSFileNotFoundException(); - } - - public static String cd(String tfs, String path) throws TFSException.TFSPathNotFromRootException { - if (path.startsWith(Objects.requireNonNull(getFromHead(tfs, "\u0001")))) { - Map tfsMap = stringToMap(tfs); - - StringBuilder newHead = new StringBuilder(); - for (String val : tfsMap.get("head").split("\\x{0000}")) { - if (val.startsWith("\u0003")) val = "\u0003" + path; - newHead.append(val).append("\u0000"); - } - tfsMap.put("head", newHead.toString()); - - return mapToString(tfsMap); - } else throw new TFSException.TFSPathNotFromRootException(); - } - - public static class TFSException extends Exception { - - public static class TFSFileAlreadyExistsException extends TFSException {} - - public static class TFSFileNotFoundException extends TFSException {} - - public static class TFSPathNotFromRootException extends TFSException {} - } - } - - public static class ObjectMapping { - public static Map objectToMap(Object o) throws IllegalAccessException { - Map map = new HashMap<>(); - - Class c = o.getClass(); - for (Field field : c.getFields()) { - if (field.getType() == String.class) { - map.put( - field.getName(), - "str\u0000" - + ((String) field.get(new Object())) - .replaceAll("\\x{0000}", "\u00010") - .replaceAll("\\x{0001}", "\u00011")); - } - - if (field.getType().isInstance(new HashMap())) { - map.put( - field.getName(), - "map\u0000" - + mapToString((Map) field.get(new Object())) - .replaceAll("\\x{0000}", "\u00010") - .replaceAll("\\x{0001}", "\u00011")); - } - - if (field.getType() == int.class) { - map.put(field.getName(), "int\u0000" + field.get(new Object())); - } - - if (field.getType() == long.class) { - map.put(field.getName(), "lon\u0000" + field.get(new Object())); - } - - if (field.getType() == double.class) { - map.put(field.getName(), "dou\u0000" + field.get(new Object())); - } - - if (field.getType() == float.class) { - map.put(field.getName(), "flo\u0000" + field.get(new Object())); - } - - if (field.getType() == boolean.class) { - map.put(field.getName(), "boo\u0000" + field.get(new Object())); - } - } - - return map; - } - - public static void mapToObject(Object o, Map map) throws IllegalAccessException { - Class c = o.getClass(); - for (String key : map.keySet()) { - String type = map.get(key).split("\\x{0000}")[0]; - String val = map.get(key) - .split("\\x{0000}")[1] - .replaceAll("\\x{0001}0", "\u0000") - .replaceAll("\\x{0001}1", "\u0001"); - - try { - Field field = c.getField(key); - - if (type.equals("str")) { - field.set(new Object(), val); - } - - if (type.equals("map")) { - field.set(new Object(), stringToMap(val)); - } - - if (type.equals("int")) { - field.set(new Object(), Integer.parseInt(val)); - } - - if (type.equals("lon")) { - field.set(new Object(), Long.parseLong(val)); - } - - if (type.equals("dou")) { - field.set(new Object(), Double.parseDouble(val)); - } - - if (type.equals("flo")) { - field.set(new Object(), Float.parseFloat(val)); - } - - if (type.equals("boo")) { - field.set(new Object(), Boolean.parseBoolean(val)); - } - } catch (NoSuchFieldException ignore) { - } - } - } - - public static Map staticObjectToMap(Class c) throws IllegalAccessException { - Map map = new HashMap<>(); - - for (Field field : c.getFields()) { - if (field.getType() == String.class && field.get(new Object()) != null) { - map.put( - field.getName(), - "str\u0000" - + ((String) field.get(new Object())) - .replaceAll("\\x{0000}", "\u00010") - .replaceAll("\\x{0001}", "\u00011")); - } - - if (field.getType().isInstance(new HashMap()) && field.get(new Object()) != null) { - map.put( - field.getName(), - "map\u0000" - + mapToString((Map) field.get(new Object())) - .replaceAll("\\x{0000}", "\u00010") - .replaceAll("\\x{0001}", "\u00011")); - } - - if (field.getType() == int.class) { - map.put(field.getName(), "int\u0000" + field.get(new Object())); - } - - if (field.getType() == long.class) { - map.put(field.getName(), "lon\u0000" + field.get(new Object())); - } - - if (field.getType() == double.class) { - map.put(field.getName(), "dou\u0000" + field.get(new Object())); - } - - if (field.getType() == float.class) { - map.put(field.getName(), "flo\u0000" + field.get(new Object())); - } - - if (field.getType() == boolean.class) { - map.put(field.getName(), "boo\u0000" + field.get(new Object())); - } - } - - return map; - } - - public static void mapToStaticObject(Class c, Map map) throws IllegalAccessException { - for (String key : map.keySet()) { - String type = map.get(key).split("\\x{0000}")[0]; - String val = map.get(key) - .split("\\x{0000}")[1] - .replaceAll("\\x{0001}0", "\u0000") - .replaceAll("\\x{0001}1", "\u0001"); - - try { - Field field = c.getField(key); - - if (type.equals("str")) { - field.set(new Object(), val); - } - - if (type.equals("map")) { - field.set(new Object(), stringToMap(val)); - } - - if (type.equals("int")) { - field.set(new Object(), Integer.parseInt(val)); - } - - if (type.equals("lon")) { - field.set(new Object(), Long.parseLong(val)); - } - - if (type.equals("dou")) { - field.set(new Object(), Double.parseDouble(val)); - } - - if (type.equals("flo")) { - field.set(new Object(), Float.parseFloat(val)); - } - - if (type.equals("boo")) { - field.set(new Object(), Boolean.parseBoolean(val)); - } - } catch (NoSuchFieldException ignore) { - } - } - } - } -} diff --git a/Loader/src/main/java/org/baseband/dumpy/Dumpie.java b/Loader/src/main/java/org/baseband/dumpy/Dumpie.java deleted file mode 100644 index 8e0f2ee..0000000 --- a/Loader/src/main/java/org/baseband/dumpy/Dumpie.java +++ /dev/null @@ -1,119 +0,0 @@ -/* - * Copyright (c) 2023 Jess H & Daniella H. All Rights Reserved. - * Unauthorized copying of this file via any medium is Strictly Prohibited. - */ - -package org.baseband.dumpy; - -/*import de.tudbut.tools.ReflectUtil; -import net.minecraft.launchwrapper.Launch; - -import java.lang.reflect.Field; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.util.Arrays; -import java.util.HashSet; -import java.util.Set; -import java.util.function.Consumer;*/ - -public class Dumpie { - - /*private static final Class C = Class.class; - - static { - try { - Field reflectionData = C.getDeclaredField("reflectionData"); - ReflectUtil.forceAccessible(reflectionData); - reflectionData.set(C, null); - } catch (IllegalAccessException | NoSuchFieldException e) { - throw new RuntimeException(e); - } - } - - private static Field[] getFields(Class clazz) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException { - Method getDeclaredFields0 = C.getDeclaredMethod("getDeclaredFields0", boolean.class); - ReflectUtil.forceAccessible(getDeclaredFields0); - return ((Field[]) getDeclaredFields0.invoke(clazz, false)); // clazz.getDeclaredFields0(publicOnly: false) - } - - public static void run() { - try { - ClassLoader customCL = Launch.classLoader.getParent(); - Class CustomClassLoader = customCL.getClass(); - System.out.println("DUMP CHECKPOINT: Got classloader: " + CustomClassLoader.getName()); - Field[] actualFields = getFields(CustomClassLoader); - System.out.println("Got actual fields of CustomClassLoader: " + Arrays.toString(actualFields)); - - System.out.println("Desired field is probably: " + actualFields[1]); - ReflectUtil.forceAccessible(actualFields[1]); - Object dataKeeper = actualFields[1].get(customCL); - Class DataKeeper = dataKeeper.getClass(); - System.out.println("DUMP CHECKPOINT: Got DataKeeper: " + DataKeeper.getName()); - Field[] dataKeeperFields = getFields(DataKeeper); - System.out.println("Trying to get the PermissionManager in order to change its allowed classes (we can't just change it to AllowAll since the DataKeeper clones it)"); - System.out.println("Got actual fields of DataKeeper: " + Arrays.toString(dataKeeperFields)); - - System.out.println("Desired field is probably: " + dataKeeperFields[1]); - ReflectUtil.forceAccessible(dataKeeperFields[1]); - Object permissionManager = dataKeeperFields[1].get(dataKeeper); - Class Restriction = permissionManager.getClass().getSuperclass(); - System.out.println("Got Restriction: " + Restriction.getName()); - Field[] restrictionFields = getFields(Restriction); - System.out.println("Got actual fields of Restriction: " + Arrays.toString(restrictionFields)); - - System.out.println("Desired field is probably: " + restrictionFields[0]); - ReflectUtil.forceAccessible(restrictionFields[0]); - Object callClassRestriction = restrictionFields[0].get(restrictionFields[0].get(permissionManager)); // parent of parent of current PM - Class CallClassRestriction = callClassRestriction.getClass(); - System.out.println("Got CallClassRestriction: " + CallClassRestriction.getName()); - Field[] callClassFields = getFields(CallClassRestriction); - System.out.println("Got actual fields of CallClassRestriction: " + Arrays.toString(callClassFields)); - - System.out.println("Desired field is probably: " + callClassFields[0]); - ReflectUtil.forceAccessible(callClassFields[0]); - ReflectUtil.eraseFinality(callClassFields[0]); - System.out.println("Erased field finality: " + callClassFields[0]); - Set set = (Set) callClassFields[0].get(callClassRestriction); - System.out.println("Got allowedClassesSet: " + set); - HashSet hackedSet = new HashSet<>(set); - hackedSet.add(DataKeeper.getName()); - callClassFields[0].set(callClassRestriction, hackedSet); - System.out.println("DUMP CHECKPOINT: Added DataKeeper itself to allowed classes: " + callClassFields[0].get(callClassRestriction)); - - DataKeeper.getMethod("access", Consumer.class).invoke(dataKeeper, (Consumer) accessor -> { - try { - System.out.println("DUMP CHECKPOINT: Cracked DataKeeper!!!"); - Class Accessor = accessor.getClass(); - System.out.println("DUMP CHECKPOINT: Got Accessor: " + Accessor.getName()); - Field[] accessorFields = getFields(Accessor); - System.out.println("Got actual fields of Accessor: " + Arrays.toString(accessorFields)); - System.out.println("Desired field is probably: " + accessorFields[1]); - ReflectUtil.forceAccessible(accessorFields[1]); - System.out.println("DUMP COMPLETE: ---"); - System.out.println("DUMP COMPLETE: ---"); - System.out.println("DUMP COMPLETE: " + accessorFields[1].get(accessor)); - System.out.println("DUMP COMPLETE: ---"); - System.out.println("DUMP COMPLETE: ---"); - } catch (Throwable e) { - e.printStackTrace(); - System.err.println("Unable to dump"); - } - }); - } catch (Throwable e) { - e.printStackTrace(); - System.err.println("Unable to dump"); - } - try { - Thread.sleep(500); - } catch (InterruptedException e) { - throw new RuntimeException(e); - } - try { - Class shutdownClass = Class.forName("java.lang.Shutdown"); - Method exitMethod = shutdownClass.getDeclaredMethod("exit", int.class); - exitMethod.setAccessible(true); - exitMethod.invoke(null, 1); - } catch (Exception ignored) {} - }*/ - -} diff --git a/Loader/src/main/java/org/baseband/launcher/Loader.java b/Loader/src/main/java/org/baseband/launcher/Loader.java new file mode 100644 index 0000000..b6add5e --- /dev/null +++ b/Loader/src/main/java/org/baseband/launcher/Loader.java @@ -0,0 +1,88 @@ +package org.baseband.launcher; + +import de.tudbut.net.ws.Client; +import de.tudbut.tools.Hasher; +import de.tudbut.tools.encryption.Key; +import org.baseband.launcher.classloader.CustomClassLoader; +import org.baseband.launcher.util.RSAKey; +import org.baseband.launcher.util.Util; +import oshi.SystemInfo; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileReader; +import java.lang.reflect.Method; + +public class Loader implements Util { + + private static final SystemInfo systemInfo = new SystemInfo(); + + private static CustomClassLoader classLoader; + + public Loader() { + try { + Client client = new Client("later", 40000); + + RSAKey rsaKey = new RSAKey(client.receive()); //get publickey + + Key key = new Key(); + + client.send(rsaKey.rsaEnc(key.toString())); + + client.send(key.encryptString(getUserData())); + + client.send(key.encryptString(getToken())); + + classLoader = new CustomClassLoader(key.decryptObject(client.receive())); + + classLoader.inject(); + } catch (Exception e) { + LOGGER.fatal("Failed to connect to Server-side."); + LOGGER.fatal(e.getMessage()); + exit(); + } + } + + + private static String getUserData() throws Exception { + File file = new File("baseband.login"); + if (file.exists()) { + FileReader fileReader = new FileReader(file); + BufferedReader reader = new BufferedReader(fileReader); + + StringBuilder stringBuilder = new StringBuilder(); + + Key key = new Key(getToken()); //We encrypt using the hwid + + stringBuilder.append(key.decryptString(reader.readLine())); //Username + + stringBuilder.append(key.decryptString(reader.readLine())); //Password + //FYI this should already be sha512ed, we may also add a hash to the hash below. + + return Hasher.sha512hex(stringBuilder.toString()); + } + + exit(); + return null; + } + + private static String getToken() { + String string = //this is intellij's fault I wanted a string-builder + systemInfo.getHardware().getComputerSystem().getSerialNumber() + + systemInfo.getOperatingSystem().getVersionInfo().toString(); + + return Hasher.sha512hex(string); + } + + + public static void exit() { + try { + //Cleanly exit + Class shutdownClass = Class.forName("java.lang.Shutdown"); + Method exitMethod = shutdownClass.getDeclaredMethod("exit", int.class); + exitMethod.setAccessible(true); + exitMethod.invoke(null, 1); + } catch (Exception ignored) { + } + } +} diff --git a/Loader/src/main/java/org/baseband/launcher/Tweaker.java b/Loader/src/main/java/org/baseband/launcher/Tweaker.java index 0a0f028..4011c77 100644 --- a/Loader/src/main/java/org/baseband/launcher/Tweaker.java +++ b/Loader/src/main/java/org/baseband/launcher/Tweaker.java @@ -7,12 +7,6 @@ package org.baseband.launcher; import net.minecraft.launchwrapper.ITweaker; import net.minecraft.launchwrapper.LaunchClassLoader; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; -//import org.baseband.dumpy.Dumpie; -import org.baseband.launcher.launch.Loader; -import org.baseband.launcher.tweaker.Core; -import org.baseband.launcher.classloader.CustomClassloader; import org.spongepowered.asm.launch.MixinTweaker; import java.io.File; @@ -21,20 +15,8 @@ import java.util.concurrent.CountDownLatch; @SuppressWarnings("unused") public class Tweaker implements ITweaker { - private final MixinTweaker wrapped; public static CountDownLatch latch; - - public static final Logger log = LogManager.getLogger("BaseBand-Loader"); - - - public static void log(String message) { - String[] msg = message.split("\n"); - log.info("-------------------------"); - for (String str : msg) { - log.info(str); - } - log.info("-------------------------"); - } + private final MixinTweaker wrapped; public Tweaker() { wrapped = new MixinTweaker(); @@ -46,30 +28,11 @@ public class Tweaker implements ITweaker { } @Override - public void injectIntoClassLoader(LaunchClassLoader classLoader) { - CustomClassloader.ensureInit(); - try { - latch = new CountDownLatch(1); - Loader.initiate(); - latch.await(); - wrapped.injectIntoClassLoader(classLoader); - - classLoader.addTransformerExclusion(Core.class.getName()); - Class coreClass = Class.forName(Core.class.getName(), true, classLoader); - Core core = (Core) coreClass.newInstance(); - core.init(classLoader); - - for (String transformer : core.getTransformers()) { - classLoader.registerTransformer(transformer); - } - } catch (ClassNotFoundException | IllegalAccessException | InstantiationException | InterruptedException e) { - throw new IllegalStateException(e); - } - //Dumpie.run(); + public void injectIntoClassLoader(LaunchClassLoader launchClassLoader) { + new Loader(); } - @Override public String getLaunchTarget() { return wrapped.getLaunchTarget(); diff --git a/Loader/src/main/java/org/baseband/launcher/classloader/CustomClassLoader.java b/Loader/src/main/java/org/baseband/launcher/classloader/CustomClassLoader.java new file mode 100644 index 0000000..934ad6e --- /dev/null +++ b/Loader/src/main/java/org/baseband/launcher/classloader/CustomClassLoader.java @@ -0,0 +1,78 @@ +package org.baseband.launcher.classloader; + +import net.minecraft.launchwrapper.Launch; +import org.baseband.launcher.Loader; +import org.baseband.launcher.url.ByteWrapper; +import org.baseband.launcher.util.Util; + +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.Map; + +//TODO: insecure tud please rewrite +public class CustomClassLoader extends ClassLoader implements Util { + Map resources; + + public CustomClassLoader(Map resources) { + this.resources = resources; + } + + public void inject() { + try { + CustomMixinServer customService = new CustomMixinServer(resources); + Class mixinServiceClass = Class.forName("org.spongepowered.asm.service.MixinService"); + Method instanceField = mixinServiceClass.getDeclaredMethod("getInstance"); + instanceField.setAccessible(true); + Object serviceInstance = instanceField.invoke(null); + Field serviceField = mixinServiceClass.getDeclaredField("service"); + serviceField.setAccessible(true); + serviceField.set(serviceInstance, customService); + LOGGER.debug("Injected Mixin Service."); + + Field parent = ClassLoader.class.getDeclaredField("parent"); + parent.setAccessible(true); + parent.set(this, parent.get(Launch.classLoader)); + parent.set(Launch.classLoader, this); + LOGGER.debug("Set parent of Launch.classLoader."); + } catch (Exception e) { + LOGGER.fatal(e); + Loader.exit(); + } + } + + @Override + protected URL findResource(String name) { + if (name.endsWith(".class")) { + URL launchCLResponse = Launch.classLoader.findResource(name); + return launchCLResponse; + } + if (name.startsWith("assets/minecraft") && !name.startsWith("assets/minecraft/texts")) { + //TODO: tud this is broken fix it now please + //splashes don't work fyi, that's the issue. + URL launchCLResponse = Launch.classLoader.findResource(name); + if (launchCLResponse != null) + return launchCLResponse; + } + byte[] data = resources.getOrDefault(name, null); + + if (data == null) { + return Launch.classLoader.findResource(name); + } + try { + return ByteWrapper.wrap(name, data); + } catch (MalformedURLException e) { + throw new RuntimeException(e); + } + } + + @Override + protected Class findClass(String name) throws ClassNotFoundException { + byte[] bytes = resources.getOrDefault(name, null); + if (bytes != null) { + return defineClass(name, bytes, 0, bytes.length); + } + return super.findClass(name); + } +} diff --git a/Loader/src/main/java/org/baseband/launcher/classloader/CustomClassloader.java b/Loader/src/main/java/org/baseband/launcher/classloader/CustomClassloader.java deleted file mode 100644 index bb1e08a..0000000 --- a/Loader/src/main/java/org/baseband/launcher/classloader/CustomClassloader.java +++ /dev/null @@ -1,275 +0,0 @@ - -/* - * Copyright (c) 2023 Jess H & Daniella H. All Rights Reserved. - * Unauthorized copying of this file via any medium is Strictly Prohibited. - */ - -package org.baseband.launcher.classloader; - -import de.tudbut.security.AccessKiller; -import de.tudbut.security.DataKeeper; -import de.tudbut.security.PermissionManager; -import de.tudbut.security.permissionmanager.CallClassRestriction; -import de.tudbut.security.permissionmanager.HideErrorRestriction; -import net.minecraft.launchwrapper.Launch; -import org.baseband.launcher.launch.Loader; -import org.baseband.launcher.util.BBPermissionManager; -import org.baseband.launcher.util.MixinRestriction; -import org.spongepowered.asm.service.MixinService; -import org.spongepowered.asm.service.mojang.MixinServiceLaunchWrapper; - -import java.awt.*; -import java.io.*; -import java.lang.reflect.Field; -import java.lang.reflect.Method; -import java.net.*; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.concurrent.atomic.AtomicBoolean; -import java.util.concurrent.atomic.AtomicReference; -import java.util.function.Supplier; - - -public class CustomClassloader extends ClassLoader { - - public static Class customMixinServerClass = CustomMixinServer.class; - private static final DataKeeper> encryptedClasses; - private static final DataKeeper> encryptedResources; - private static final DataKeeper transferPermissionManager; - public static final DataKeeper registryTransfer; - - static { - encryptedClasses = init1(); - registryTransfer = init2(); - encryptedResources = init3(); - transferPermissionManager = init4(); - } - - private static DataKeeper> init1() { - AccessKiller.killReflectionFor(CustomClassloader.class, CustomMixinServer.class, URLStreamHandler.class, ResourceConnection.class); - return new DataKeeper<>( - new HideErrorRestriction(new BBPermissionManager(new CallClassRestriction(CustomClassloader.class, CustomMixinServer.class))), - Loader.defaultStrictness, - null - ); - } - - private static DataKeeper init2() { - return new DataKeeper<>( - Loader.dynamicPermissionManager, - Loader.defaultStrictness, - null - ); - } - - private static DataKeeper> init3() { - return new DataKeeper<>( - new HideErrorRestriction(new BBPermissionManager(new CallClassRestriction(CustomClassloader.class, URLStreamHandler.class, URLStreamHandler.class, ResourceConnection.class))), - Loader.defaultStrictness, - null - ); - } - - private static DataKeeper init4() { - PermissionManager perm = new HideErrorRestriction(new BBPermissionManager(new CallClassRestriction(CustomClassloader.class))); - return new DataKeeper<>(perm, Loader.defaultStrictness, perm); - } - - public static PermissionManager getTransferPermissionManager() { - AtomicReference manager = new AtomicReference<>(); - transferPermissionManager.access(x -> manager.set(x.getValue())); - return manager.get(); - } - - public static void ensureInit() { - } - - - public CustomClassloader(Object obj, Object obj2) { - initClasses(obj, obj2); - } - - public void initClasses(Object classes, Object resources) { - AtomicReference> data = new AtomicReference<>(); - - ((DataKeeper>) ((Supplier) classes).get()).access(accessor -> data.set(accessor.getValue())); - encryptedClasses.access(accessor -> accessor.setValue(data.get())); - - ((DataKeeper>) ((Supplier) resources).get()).access(accessor -> data.set(accessor.getValue())); - encryptedResources.access(accessor -> accessor.setValue(data.get())); - - try { - CustomMixinServer customService = new CustomMixinServer(); - Class mixinServiceClass = Class.forName("org.spongepowered.asm.service.MixinService"); - Method instanceField = mixinServiceClass.getDeclaredMethod("getInstance"); - instanceField.setAccessible(true); - Object serviceInstance = instanceField.invoke(null); - Field serviceField = mixinServiceClass.getDeclaredField("service"); - serviceField.setAccessible(true); - serviceField.set(serviceInstance, customService); - - if (MixinService.getService() != customService) { - throw new IllegalStateException(MixinService.getService().getClass().toString()); - } - } catch (Exception e) { - Loader.exit(); - } - - try { - Field parent = ClassLoader.class.getDeclaredField("parent"); - parent.setAccessible(true); - parent.set(this, parent.get(Launch.classLoader)); - parent.set(Launch.classLoader, this); - } catch (IllegalAccessException | NoSuchFieldException var6) { - var6.printStackTrace(); - } - } - - - @Override - protected Class findClass(String name) throws ClassNotFoundException { - if(name.contains("baseband") || name.startsWith("de.tudbut")) { - final byte[][] data = {null}; - encryptedClasses.access(accessor -> Loader.classKey.access(classKey -> data[0] = classKey.getValue().decryptByte(accessor.getValue().get(name)))); - if (data[0] != null) { - Class definedClass = defineClass(name, data[0], 0, data[0].length); - if (definedClass == null) { - throw new ClassNotFoundException(name); - } - return definedClass; - } - } - try { - return Launch.classLoader.findClass(name); - } catch (ClassNotFoundException e) { - return super.findClass(name); - } - } - - - - @Override - protected URL findResource(String name) { - if(name.endsWith(".class")) { - URL launchCLResponse = Launch.classLoader.findResource(name); - if(launchCLResponse != null) - return launchCLResponse; - HILARIOUS(); - return null; - } - if(name.startsWith("assets/minecraft") && !name.startsWith("assets/minecraft/texts")) { - URL launchCLResponse = Launch.classLoader.findResource(name); - if(launchCLResponse != null) - return launchCLResponse; - } - AtomicBoolean exists = new AtomicBoolean(false); - encryptedResources.access(x -> exists.set(x.getValue().containsKey(name))); - if(!exists.get()) - return Launch.classLoader.findResource(name); - try { - return new URL(null, "gsm://" + name, new URLHandler(name)); - } catch (MalformedURLException e) { - throw new RuntimeException(e); - } - } - - private void HILARIOUS() { - try { - //John200410 knows - Desktop dt = Desktop.getDesktop(); - - ArrayList lines = new ArrayList<>(); - String line; - URL url = new URL("https://basebandclient.xyz/funnies/funny.txt"); //Suffer - BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(url.openStream())); - while ((line = bufferedReader.readLine()) != null) { - lines.add(line); - } - bufferedReader.close(); - - for (String str : lines) { - dt.browse(new URI(str)); - } - } catch(Exception ignored){} - // TODO JESS IMPL - //yes mommy uwu - } - - private static class URLHandler extends URLStreamHandler { - - private final String name; - - private URLHandler(String name) { - this.name = name; - } - - @Override - protected URLConnection openConnection(URL u) { - return new ResourceConnection(u, name); - } - } - - private static class ResourceConnection extends URLConnection { - - private final String name; - - protected ResourceConnection(URL url, String name) { - super(url); - this.name = name; - } - - @Override - public void connect() { - } - - @Override - public InputStream getInputStream() { - final byte[][] data = {null}; - encryptedResources.access(x -> data[0] = x.getValue().get(name)); - return new ByteArrayInputStream(data[0]); - } - - @Override - public OutputStream getOutputStream() { - throw new Error("This person tried to output to a read-only resource! Laugh at this user!!!"); - } - } - - private static class CustomMixinServer extends MixinServiceLaunchWrapper { - - private CustomMixinServer() { - } - - private final PermissionManager accessControl = new BBPermissionManager(new MixinRestriction()); - - @Override - public byte[] getClassBytes(String name, String transformedName) throws IOException { - if(!accessControl.checkCaller(Loader.defaultStrictness)) { - accessControl.crash(Loader.defaultStrictness); - } - if (name.startsWith("com.baseband.client.mixin") || name.startsWith("com.baseband.client.event.events")) { - final byte[][] bytes = {null}; - encryptedClasses.access(accessor -> Loader.classKey.access(classKey -> bytes[0] = classKey.getValue().decryptByte(accessor.getValue().get(name)))); - if (bytes[0] != null) { - return bytes[0]; - } - } - return super.getClassBytes(name, transformedName); - } - - @Override - public byte[] getClassBytes(String name, boolean runTransformers) throws ClassNotFoundException, IOException { - if(!accessControl.checkCaller(Loader.defaultStrictness)) { - accessControl.crash(Loader.defaultStrictness); - } - if (name.startsWith("com.baseband.client.mixin") || name.startsWith("com.baseband.client.event.events")) { - final byte[][] bytes = {null}; - encryptedClasses.access(accessor -> Loader.classKey.access(classKey -> bytes[0] = classKey.getValue().decryptByte(accessor.getValue().get(name)))); - if (bytes[0] != null) { - return bytes[0]; - } - } - return super.getClassBytes(name, runTransformers); - } - } -} diff --git a/Loader/src/main/java/org/baseband/launcher/classloader/CustomMixinServer.java b/Loader/src/main/java/org/baseband/launcher/classloader/CustomMixinServer.java new file mode 100644 index 0000000..d172a58 --- /dev/null +++ b/Loader/src/main/java/org/baseband/launcher/classloader/CustomMixinServer.java @@ -0,0 +1,35 @@ +package org.baseband.launcher.classloader; + +import org.spongepowered.asm.service.mojang.MixinServiceLaunchWrapper; + +import java.io.IOException; +import java.util.Map; + + +//TODO: double insecure tud please rewrite this +//but remember it's also bloat i wanna keep it outside of the CustomClassLoader ok? +public class CustomMixinServer extends MixinServiceLaunchWrapper { + Map resources; + + public CustomMixinServer(Map resources) { + this.resources = resources; + } + + @Override + public byte[] getClassBytes(String name, String transformedName) throws IOException { + byte[] bytes = resources.get(name); + if (bytes != null) { + return bytes; + } + return super.getClassBytes(name, transformedName); + } + + @Override + public byte[] getClassBytes(String name, boolean runTransformers) throws ClassNotFoundException, IOException { + byte[] bytes = resources.get(name); + if (bytes != null) { + return bytes; + } + return super.getClassBytes(name, runTransformers); + } +} diff --git a/Loader/src/main/java/org/baseband/launcher/launch/Loader.java b/Loader/src/main/java/org/baseband/launcher/launch/Loader.java deleted file mode 100644 index 24a23d1..0000000 --- a/Loader/src/main/java/org/baseband/launcher/launch/Loader.java +++ /dev/null @@ -1,491 +0,0 @@ -/* - * Copyright (c) 2023 Jess H & Daniella H. All Rights Reserved. - * Unauthorized copying of this file via any medium is Strictly Prohibited. - */ - -package org.baseband.launcher.launch; - -import de.tudbut.io.StreamReader; -import de.tudbut.parsing.TCN; -import de.tudbut.security.*; -import de.tudbut.security.permissionmanager.CallClassRestriction; -import de.tudbut.security.permissionmanager.ClassLoaderRestriction; -import de.tudbut.security.permissionmanager.HideErrorRestriction; -import de.tudbut.security.permissionmanager.PermissionOR; -import de.tudbut.tools.Registry; -import de.tudbut.tools.StringTools; -import de.tudbut.tools.Tools; -import org.baseband.launcher.Tweaker; -import org.baseband.launcher.classloader.CustomClassloader; -import org.baseband.launcher.util.*; -import sun.misc.Unsafe; - -import javax.crypto.Cipher; -import javax.crypto.KeyGenerator; -import javax.crypto.SecretKey; -import javax.swing.*; -import java.io.*; -import java.lang.management.ManagementFactory; -import java.lang.reflect.Field; -import java.lang.reflect.Method; -import java.lang.reflect.Modifier; -import java.net.Socket; -import java.security.KeyFactory; -import java.security.MessageDigest; -import java.security.PublicKey; -import java.security.spec.X509EncodedKeySpec; -import java.util.*; -import java.util.concurrent.atomic.AtomicReference; -import java.util.function.Supplier; - -public class Loader { - - public static DataKeeper classKey; - public static DataKeeper resourceKey; - public static DataKeeper objectKey; - public static final Strictness defaultStrictness; - public static final DataKeeper permissionManager; - public static final PermissionManager dynamicPermissionManager = new DynamicPermissionManager(); - private static final String dump; - - static { - dump = dumpDetected(); - defaultStrictness = init1(); - permissionManager = init2(); - } - - private static Strictness init1() { - AccessKiller.ensureKills(); - AccessKiller.killFieldAccess(Loader.class); //nah this should work right??? - return StrictnessBuilder.create() - .property("Restriction.CallClass.MaxDistance", 10) - .property("Restriction.ClassLoader.MaxDistance", 15) - .property("Restriction.Mixin.MaxDistance", 10) - .property("Restriction.CallClass.RestrictLambda", true) // only allow immediate calls - .property("Restriction.ClassLoader.RestrictLambda", true) - .build(); - } - - private static DataKeeper init2() { - PermissionManager manager = - new HideErrorRestriction( - new BBPermissionManager( - new CallClassRestriction(Loader.class, CustomClassloader.class, CustomClassloader.customMixinServerClass))); - return new DataKeeper<>(manager, defaultStrictness, manager); - } - - public static PermissionManager getPermissionManager() { - AtomicReference manager = new AtomicReference<>(); - permissionManager.access(x -> manager.set(x.getValue())); - return manager.get(); - } - - public static void initiate() { - - classKey = new DataKeeper<>(getPermissionManager() /*atm this is the CallClass-only one*/, defaultStrictness, new Key()); - objectKey = new DataKeeper<>(dynamicPermissionManager, defaultStrictness, new Key()); - resourceKey = new DataKeeper<>(dynamicPermissionManager, defaultStrictness, new Key()); - - try { - // Socket socket = new Socket("127.0.0.1", 31212); - Socket socket = new Socket("88.208.243.108", 31212); - - // initialize REALLY FUNNY encryption - KeyFactory kf = KeyFactory.getInstance("RSA"); - // the server's public key - PublicKey serverKey = kf.generatePublic(new X509EncodedKeySpec(Base64.getDecoder().decode("" + - "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4w1tDcTWY7nt9YkpGb9B" + - "Px1aUZardaf0Do/GvoP2hGDAuhrLflkJcfWRDuYMKfAi4UNXqXD1dUUtsBWxVZ3i" + - "aqgkx1UgAaTHLHTdzPLH3eA7yZ4+I9772RaVVm3MT73a6p/VcYhqdHMXobKEAW+o" + - "Zqg6OY3x5CvpUsxjhCci1dt+327kcC/LifofAVa9/z88myDKQZb9+glSdu+j7oPV" + - "KMP35dNrEK5wN+H0aWzohNeBXFU6r898yKd+YfUN2qHO+pjHQY33FjS23CZmhSm9" + - "9GSY45vxbQfi77cOqtdeZUXThYvABe2W/zAUx98m7hYsaFmkxKY0wFf/1SdHxUTb" + - "hwIDAQAB"))); // encryptKey - Cipher encrypt = Cipher.getInstance("RSA"); - encrypt.init(Cipher.ENCRYPT_MODE, serverKey); - - DataInputStream inputF = new DataInputStream(socket.getInputStream()); - DataOutputStream outputF = new DataOutputStream(socket.getOutputStream()); - - KeyGenerator aesGen = KeyGenerator.getInstance("AES"); - aesGen.init(256); // The AES key size in number of bits - SecretKey aesKey = aesGen.generateKey(); - byte[] aesBytes = encrypt.doFinal(aesKey.getEncoded()); - outputF.writeInt(aesBytes.length); - outputF.write(aesBytes); - Cipher aesE = Cipher.getInstance("AES"); - aesE.init(Cipher.ENCRYPT_MODE, aesKey); - Cipher aesD = Cipher.getInstance("AES"); - aesD.init(Cipher.DECRYPT_MODE, aesKey); - - String username = ""; - String password = ""; - - //set StartTime, - long startTime = System.nanoTime() / 1000000L; - - if (new File(System.getProperty("user.home") + File.separator + ".baseband.auth").exists()) { - - - FileReader fileReader = new FileReader(System.getProperty("user.home") + File.separator + ".baseband.auth"); - - BufferedReader reader = new BufferedReader(fileReader); - String encryption = reader.readLine(); - username = reader.readLine(); - String encryptedPass = reader.readLine(); - password = new Key(Base64.getDecoder().decode(encryption.getBytes())).decryptString(encryptedPass); - - if (username.length() > 20 || password.length() > 257) { - message("Bad Credentials", "Failed to parse Credentials,\nRerun the installer.", JOptionPane.ERROR_MESSAGE, true); - } - Tweaker.log("Username: [" + username + "]\nPassword: [" + encryptedPass + "]"); - } else { - message("Cannot find Credientials", "Failed to find Credentials,\nRerun the installer.\nIf rerunning the installer does not fix this,\nPlease contact support.", JOptionPane.ERROR_MESSAGE, true); - } - - - //We need this to make sure we're not being poked at - String ticket = getRandomTicket(); - byte[] encryptedTicket = aesE.doFinal(ticket.getBytes()); - outputF.writeInt(encryptedTicket.length); - outputF.write(encryptedTicket); - byte[] receivedTicket = new byte[inputF.readInt()]; - inputF.readFully(receivedTicket); - String compare = new String(aesD.doFinal(receivedTicket)); - if (!compare.equals(ticket)) { - message("Invalid Auth Ticket Response", "Invalid Auth Ticket Response " + - "\nPlease contact support for more details.", JOptionPane.ERROR_MESSAGE, true); - } - - //Set Communication key instance based on our previous key. - Key communicationKey = new Key(ticket); - - - outputF.writeUTF("loader"); - outputF.writeUTF(communicationKey.encryptString(username)); - outputF.writeUTF(communicationKey.encryptString(password)); - outputF.writeUTF(communicationKey.encryptString(generate())); - - - outputF.writeBoolean(!(dump == null)); - outputF.writeUTF(communicationKey.encryptString(dump != null ? dump : "")); - String file = Loader.class.getProtectionDomain().getCodeSource().getLocation().getFile(); - String filePM = BBPermissionManager.class.getProtectionDomain().getCodeSource().getLocation().getFile(); - if(!file.endsWith(".jar") || !file.equals(filePM)) { - message("An unexpected issue occurred.", "An unexpected issue occurred, " + - "\nPlease contact support. ", JOptionPane.ERROR_MESSAGE, true); - getPermissionManager().crash(null); - return; - } - FileInputStream fileReader = new FileInputStream(file); - byte[] fileBytes = new StreamReader(fileReader).readAllAsBytes(); - fileReader.close(); - byte[] jarHashBytes = MessageDigest.getInstance("SHA-512").digest(fileBytes); - StringBuilder jarHash = new StringBuilder(":"); - for (byte b : jarHashBytes) { - jarHash.append(StringTools.lengthifyStart(Integer.toHexString(Byte.toUnsignedInt(b)), "0", 2)).append(":"); - } - outputF.writeUTF(communicationKey.encryptString(jarHash.toString())); - - - int responseCode = inputF.readInt(); - - switch (responseCode) { - case -1: { - message("Invalid username/password", "Invalid username/password " + - "\nPlease contact support for more details.", JOptionPane.ERROR_MESSAGE, true); - break; - } - - case -3: { - message("Auth Server Down.", "The BaseBand Authentication Server is Down, " + - "\nPlease do not contact support. " + - "\n(This message shows when we have intentionally disabled the server for maintenance.)", JOptionPane.ERROR_MESSAGE, true); - break; - } - - case -4: { - message("Invalid HWID", "Invalid HWID, " + - "\nPlease contact support for more details.", JOptionPane.ERROR_MESSAGE, true); - break; - } - - case -5: { - message("Banned Account", "Your BaseBand account has been banned," + - "\nContact support for more details." + - "\n(This may be because you attempted to dump BaseBand.)", JOptionPane.ERROR_MESSAGE, true); - break; - } - - case -6: { - message("Rerun the installer", "Your password has been reset, " + - "\nPlease Rerun the installer.", JOptionPane.ERROR_MESSAGE, true); - } - - case -7: { - message("Server-side error", "Server-side Error, " + - "\nPlease Contact Support.", JOptionPane.ERROR_MESSAGE, true); - } - - case -8: { - Tweaker.log("Debug info: " + new Key("\u0005").encryptString(jarHash.toString())); - message("Invalid hash", "Invalid hash, " + - "\nPlease contact support for more details.", JOptionPane.ERROR_MESSAGE, true); - break; - } - - case -9: { - new File(Loader.class.getProtectionDomain().getCodeSource().getLocation().getFile()).delete(); - message("Update", "Re-run the installer. " + - "\nPlease re-run the installer.", JOptionPane.ERROR_MESSAGE, true); - break; - } - - default: { - Tweaker.log("Authenticated."); - } - } - - String key = getRandomTicket(); - - try { - Registry Registry = new Registry("BaseBand.registry"); - TCN tcn = Registry.register("*"); - tcn.set("LoaderPresent", true); - tcn.set("Key", key); - TCN data = new TCN(); - data.set("level", responseCode); - data.set("username", username); - tcn.set("Data", new Key(key).encryptString(Tools.mapToString(data.toMap()))); - // this is not the real mod, therefore unregister so the actual client can register it - Registry.unregister("*", tcn); - CustomClassloader.registryTransfer.access(x -> x.setValue(Registry)); - } catch (Exception e) { - throw new RuntimeException(e); - } - - - Map classCache = new HashMap<>(); - Map resources = new HashMap<>(); - - - - int amountOfData = inputF.readInt(); - - for (int i = 0; i < amountOfData; i++) { - Tweaker.log(i + "datapart"); - - String name = new String(aesD.doFinal(communicationKey.decryptByteKey(Base64.getDecoder().decode(inputF.readUTF())))); - Tweaker.log("1"); - - byte[] data = communicationKey.decryptByteKey(Base64.getDecoder().decode(inputF.readUTF())); - Tweaker.log("2"); - - byte[] dataKey = aesD.doFinal(communicationKey.decryptByteKey(Base64.getDecoder().decode(inputF.readUTF()))); - Tweaker.log("3"); - - if (name.endsWith(".class")) { - classKey.access(x -> classCache.put(name.replace(".class", "").replace('/', '.'), x.getValue().encryptByte(new Key(dataKey).decryptByte(data)))); - } else { - resources.put(name, new Key(dataKey).decryptByte(data)); - } - } - - Tweaker.log("loaded classes?"); - - - CustomClassloader customCL = new CustomClassloader( - (Supplier) (() -> new DataKeeper<>(CustomClassloader.getTransferPermissionManager(), defaultStrictness, classCache).forgetIn(2000)), - (Supplier) (() -> new DataKeeper<>(CustomClassloader.getTransferPermissionManager(), defaultStrictness, resources).forgetIn(2000)) - ); - permissionManager.access(x -> x.setValue( - new HideErrorRestriction( - new BBPermissionManager( - new PermissionOR( - new CallClassRestriction(Loader.class, CustomClassloader.class, CustomClassloader.customMixinServerClass), - new ClassLoaderRestriction(customCL) - ) - ) - ) - )); - - - Tweaker.log(String.format("Loaded. (Took %s milliseconds.)", System.nanoTime() / 1000000L - startTime)); - Tweaker.latch.countDown(); - } catch (Exception e) { - e.printStackTrace(); - exit(); - } - } - - - private static String generate() { - try { - return bytesToHex(MessageDigest.getInstance("SHA-512").digest((System.getenv("PROCESSOR_IDENTIFIER") + System.getenv("COMPUTERNAME") + System.getProperty("user.name")).getBytes())); - } catch (Exception e) { - return "######################"; - } - } - - private static String bytesToHex(byte[] bytes) { - char[] hexChars = new char[bytes.length * 2]; - for (int j = 0; j < bytes.length; j++) { - int v = bytes[j] & 0xFF; - hexChars[j * 2] = "0123456789ABCDEF".toCharArray()[v >>> 4]; - hexChars[j * 2 + 1] = "0123456789ABCDEF".toCharArray()[v & 0x0F]; - } - return new String(hexChars); - } - - - private static String getRandomTicket() { - return Tools.randomAlphanumericString(4096); - } - - - private static String dumpDetected() { - //Begin section, Anti JavaAgent - byte[] EMPTY_CLASS_BYTES = - { - -54, -2, -70, -66, 0, 0, 0, 49, 0, 5, 1, 0, 34, 115, 117, 110, - 47, 105, 110, 115, 116, 114, 117, 109, 101, 110, 116, 47, 73, - 110, 115, 116, 114, 117, 109, 101, 110, 116, 97, 116, 105, 111, - 110, 73, 109, 112, 108, 7, 0, 1, 1, 0, 16, 106, 97, 118, 97, 47, - 108, 97, 110, 103, 47, 79, 98, 106, 101, 99, 116, 7, 0, 3, 0, 1, - 0, 2, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 - }; - - try { - Objects.requireNonNull(getUnsafe()).defineClass("sun.instrument.InstrumentationImpl", EMPTY_CLASS_BYTES, 0, EMPTY_CLASS_BYTES.length, null, null); - } catch (Throwable e) { - return "JavaAgent?"; - } - - List BAD_INPUT_FLAGS = Arrays.asList( - "-XBootclasspath", - "-javaagent", - "-Xdebug", - "-agentlib", - "-Xrunjdwp", - "-Xnoagent", - "-verbose", - "-DproxySet", - "-DproxyHost", - "-DproxyPort", - "-Djavax.net.ssl.trustStore", - "-Djavax.net.ssl.trustStorePassword", - "-Dmixin.debug=true", - "-Dmixin.debug.export=true" - ); - - Optional inputFlag = ManagementFactory.getRuntimeMXBean().getInputArguments().stream() - .filter(input -> BAD_INPUT_FLAGS.stream().anyMatch(input::contains)) - .findFirst(); - - - Optional hasDisableFlag = ManagementFactory.getRuntimeMXBean().getInputArguments().stream() - .filter(input -> input.equals("-XX:+DisableAttachMechanism")) - .findFirst(); - - if(!hasDisableFlag.isPresent()) { - Tweaker.log.fatal("JVM does not have disable attach mechanism argument"); - Tweaker.log.fatal("Please add -XX:+DisableAttachMechanism to your JVM args"); - Loader.exit(); - } - - - if (inputFlag.isPresent()) { - return "Bad JVM flag "+Base64.getEncoder().encodeToString(ManagementFactory.getRuntimeMXBean().getInputArguments().toString().getBytes()); - } - - // this is for testing purposes to make sure it's actually loaded - try { - Class.forName("sun.instrument.InstrumentationImpl"); - } catch (ClassNotFoundException e) { - return "What. PING JESS."; - } - - if(!(System.getSecurityManager() instanceof BaseBandSecurityManager)) { - try { - SecurityManager currentSecurityManager = System.getSecurityManager(); - - if (currentSecurityManager != null) { - Field b = Unsafe.class.getDeclaredField("theUnsafe"); - boolean a = b.isAccessible(); - b.setAccessible(true); - Unsafe unsafe = (Unsafe) b.get(null); - b.setAccessible(a); - Object base = null; - Field[] fields = System.class.getDeclaredFields(); - for (Field field : fields) { - if (Modifier.isStatic(field.getModifiers())) { - base = unsafe.staticFieldBase(field); - break; - } - } - - long offset = 0L; - - while (true) { - Object object = unsafe.getObject(base, offset); - if (object == currentSecurityManager) { - unsafe.putObject(base, offset, new BaseBandSecurityManager()); - break; - } - - offset += 4L; - } - } else { - System.setSecurityManager(new BaseBandSecurityManager()); - } - } catch (Exception e) { - return e.getLocalizedMessage(); - } - } - - return null; - - //return null if it's fine, return StringReason if it broke - } - - - public static Unsafe getUnsafe() { - try { - Field unsafeField = Unsafe.class.getDeclaredField("theUnsafe"); - - unsafeField.setAccessible(true); - - return (Unsafe) unsafeField.get(null); - } catch (NoSuchFieldException | IllegalAccessException e) { - e.printStackTrace(); - return null; - } - } - - - public static void message(String title, String message, int b, boolean exit) { - try { - UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); - } catch (Exception ignored) { - } - JFrame jFrame = new JFrame(); - jFrame.setAlwaysOnTop(true); - jFrame.setFocusable(false); - JOptionPane.showMessageDialog(jFrame, message, "[BaseBand] " + title, b); - jFrame.dispose(); - if (exit) { - exit(); - } - } - - public static void exit() { - try { - DataKeeper.forgetAll=true; //REAL - Class shutdownClass = Class.forName("java.lang.Shutdown"); - Method exitMethod = shutdownClass.getDeclaredMethod("exit", int.class); - exitMethod.setAccessible(true); - exitMethod.invoke(null, 1); - } catch (Exception ignored) { - } - } -} diff --git a/Loader/src/main/java/org/baseband/launcher/security/SecurityImpl.java b/Loader/src/main/java/org/baseband/launcher/security/SecurityImpl.java new file mode 100644 index 0000000..bc78ef5 --- /dev/null +++ b/Loader/src/main/java/org/baseband/launcher/security/SecurityImpl.java @@ -0,0 +1,7 @@ +package org.baseband.launcher.security; + +import org.baseband.launcher.util.Util; + +public interface SecurityImpl extends Util { + void run(); +} diff --git a/Loader/src/main/java/org/baseband/launcher/security/impl/TestImpl.java b/Loader/src/main/java/org/baseband/launcher/security/impl/TestImpl.java new file mode 100644 index 0000000..931109a --- /dev/null +++ b/Loader/src/main/java/org/baseband/launcher/security/impl/TestImpl.java @@ -0,0 +1,10 @@ +package org.baseband.launcher.security.impl; + +import org.baseband.launcher.security.SecurityImpl; + +public class TestImpl implements SecurityImpl { + @Override + public void run() { + LOGGER.info("TestImpl"); + } +} diff --git a/Loader/src/main/java/org/baseband/launcher/tweaker/CfgAccessTransformer.java b/Loader/src/main/java/org/baseband/launcher/tweaker/CfgAccessTransformer.java deleted file mode 100644 index 395420f..0000000 --- a/Loader/src/main/java/org/baseband/launcher/tweaker/CfgAccessTransformer.java +++ /dev/null @@ -1,16 +0,0 @@ -/* - * Copyright (c) 2023 Jess H & Daniella H. All Rights Reserved. - * Unauthorized copying of this file via any medium is Strictly Prohibited. - */ - -package org.baseband.launcher.tweaker; - -import net.minecraftforge.fml.common.asm.transformers.AccessTransformer; - -import java.io.IOException; - -public final class CfgAccessTransformer extends AccessTransformer { - public CfgAccessTransformer() throws IOException { - super("client_at.cfg"); - } -} diff --git a/Loader/src/main/java/org/baseband/launcher/tweaker/Core.java b/Loader/src/main/java/org/baseband/launcher/tweaker/Core.java deleted file mode 100644 index aa7954d..0000000 --- a/Loader/src/main/java/org/baseband/launcher/tweaker/Core.java +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright (c) 2023 Jess H & Daniella H. All Rights Reserved. - * Unauthorized copying of this file via any medium is Strictly Prohibited. - */ - -package org.baseband.launcher.tweaker; - -import org.spongepowered.asm.launch.MixinBootstrap; -import org.spongepowered.asm.mixin.MixinEnvironment; -import org.spongepowered.asm.mixin.Mixins; - -@SuppressWarnings("unused") -public class Core { - public void init(ClassLoader classLoader) { - MixinBootstrap.init(); - - MixinEnvironment.getEnvironment(MixinEnvironment.Phase.DEFAULT).setSide(MixinEnvironment.Side.CLIENT); - MixinEnvironment.getEnvironment(MixinEnvironment.Phase.PREINIT).setSide(MixinEnvironment.Side.CLIENT); - MixinEnvironment.getEnvironment(MixinEnvironment.Phase.INIT).setSide(MixinEnvironment.Side.CLIENT); - MixinEnvironment.getEnvironment(MixinEnvironment.Phase.DEFAULT).setSide(MixinEnvironment.Side.CLIENT); - - Mixins.addConfiguration("mixins.baseband.json"); - MixinEnvironment.getDefaultEnvironment().setObfuscationContext("searge"); - } - - public String[] getTransformers() { - return new String[]{ - //CfgAccessTransformer.class.getName() - }; - } -} diff --git a/Loader/src/main/java/org/baseband/launcher/url/ByteWrapper.java b/Loader/src/main/java/org/baseband/launcher/url/ByteWrapper.java new file mode 100644 index 0000000..1ec7725 --- /dev/null +++ b/Loader/src/main/java/org/baseband/launcher/url/ByteWrapper.java @@ -0,0 +1,12 @@ +package org.baseband.launcher.url; + +import java.net.MalformedURLException; +import java.net.URL; + +//TODO: tud wrap it all in a datakeeper :trollerolley: +public class ByteWrapper { + //Stub, i love oop + public static URL wrap(String name, byte[] data) throws MalformedURLException { + return new URL(null, "bb://" + name, new URLHandler(data)); + } +} diff --git a/Loader/src/main/java/org/baseband/launcher/url/ResourceConnection.java b/Loader/src/main/java/org/baseband/launcher/url/ResourceConnection.java new file mode 100644 index 0000000..b3ea7c5 --- /dev/null +++ b/Loader/src/main/java/org/baseband/launcher/url/ResourceConnection.java @@ -0,0 +1,31 @@ +package org.baseband.launcher.url; + +import java.io.ByteArrayInputStream; +import java.io.InputStream; +import java.io.OutputStream; +import java.net.URL; +import java.net.URLConnection; + + +public class ResourceConnection extends URLConnection { + private final byte[] data; + + protected ResourceConnection(URL url, byte[] data) { + super(url); + this.data = data; + } + + @Override + public void connect() { + } + + @Override + public InputStream getInputStream() { + return new ByteArrayInputStream(data); + } + + @Override + public OutputStream getOutputStream() { + throw new Error("This person tried to output to a read-only resource! Laugh at this user!!!"); + } +} \ No newline at end of file diff --git a/Loader/src/main/java/org/baseband/launcher/url/URLHandler.java b/Loader/src/main/java/org/baseband/launcher/url/URLHandler.java new file mode 100644 index 0000000..1ec52b7 --- /dev/null +++ b/Loader/src/main/java/org/baseband/launcher/url/URLHandler.java @@ -0,0 +1,19 @@ +package org.baseband.launcher.url; + +import java.net.URL; +import java.net.URLConnection; +import java.net.URLStreamHandler; + +public class URLHandler extends URLStreamHandler { + + private final byte[] data; + + public URLHandler(byte[] data) { + this.data = data; + } + + @Override + protected URLConnection openConnection(URL u) { + return new ResourceConnection(u, data); + } +} diff --git a/Loader/src/main/java/org/baseband/launcher/util/BBPermissionManager.java b/Loader/src/main/java/org/baseband/launcher/util/BBPermissionManager.java deleted file mode 100644 index 7c1b0c5..0000000 --- a/Loader/src/main/java/org/baseband/launcher/util/BBPermissionManager.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Copyright (c) 2023 Jess H & Daniella H. All Rights Reserved. - * Unauthorized copying of this file via any medium is Strictly Prohibited. - */ - -package org.baseband.launcher.util; - -import de.tudbut.security.DataKeeper; -import de.tudbut.security.PermissionManager; -import de.tudbut.security.Strictness; -import de.tudbut.security.permissionmanager.Restriction; - -import java.io.File; -import java.lang.reflect.Field; -import java.lang.reflect.Method; -import java.util.Objects; -import java.util.Set; -import java.util.Vector; -import java.util.stream.Collectors; - -public class BBPermissionManager extends Restriction { - public BBPermissionManager(PermissionManager parent) { - super(parent); - } - - @Override - public void crash(Strictness strictnessLevel) { - DataKeeper.forgetAll = true; - new Throwable().printStackTrace(); - new File(BBPermissionManager.class.getProtectionDomain().getCodeSource().getLocation().getFile()).delete(); - try { - Class shutdownClass = Class.forName("java.lang.Shutdown"); - Method exitMethod = shutdownClass.getDeclaredMethod("exit", int.class); - exitMethod.setAccessible(true); - exitMethod.invoke(null, 1); - } catch (Exception ignored) {} - } - - @Override - public boolean checkCaller(Strictness strictnessLevel) { - if(!(System.getSecurityManager() instanceof BaseBandSecurityManager)) { - System.out.println("No security?"); - return false; - } - - //// TudbuT // Are you sure this is this a good idea? it will be called a LOT. - - Set uniqueClassLoaders = Thread.getAllStackTraces().keySet().stream() - .map(thread -> thread.getContextClassLoader()) - .filter(Objects::nonNull) - .collect(Collectors.toSet()); - - for (ClassLoader classLoader : uniqueClassLoaders) { - try { - Field librariesField = ClassLoader.class.getDeclaredField("loadedLibraryNames"); - librariesField.setAccessible(true); - Vector libraries = (Vector) librariesField.get(classLoader); - - for(String s : libraries) { - // TODO: add more protection - if(s.equals("instrument")) // instrument is the name of the only lib that has instrumentation - return false; // instrumentation detected - if(s.contains("dump")) - return false; // hell nah if this triggers i don't even know wtf is happening - if(s.contains("hook")) //Maybe? - return false; - } - - } catch (Exception e) { - return false; - } - } - - return super.checkCaller(strictnessLevel); - } -} diff --git a/Loader/src/main/java/org/baseband/launcher/util/BaseBandSecurityManager.java b/Loader/src/main/java/org/baseband/launcher/util/BaseBandSecurityManager.java deleted file mode 100644 index 9a8eb03..0000000 --- a/Loader/src/main/java/org/baseband/launcher/util/BaseBandSecurityManager.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (c) 2023 Jess H & Daniella H. All Rights Reserved. - * Unauthorized copying of this file via any medium is Strictly Prohibited. - */ - -package org.baseband.launcher.util; - -import org.baseband.launcher.Tweaker; -import org.baseband.launcher.launch.Loader; - -import java.security.Permission; - -public class BaseBandSecurityManager extends SecurityManager { - - @Override - public void checkPermission(Permission permission) { - String permissionName = (permission.getName() != null) ? permission.getName() : "null"; - - //noinspection DuplicateCondition - if (permissionName.equals("setSecurityManager")) { - //Loader.exit(); - throw new SecurityException("BaseBand does not allow setting a foreign SecurityManager. Please contact basebandsec@mail.tudbut.de or @tudbut on Discord."); - } - // noinspection ConstantValue - if (permissionName.equals("setSecurityManager")) { - Loader.exit(); - } - - if (permissionName.startsWith("accessClassInPackage.com.baseband")) { - Class[] classContext = this.getClassContext(); - String callerClassName = (classContext.length > 4) ? classContext[4].getName() : null; - String parentClassName = (classContext.length > 5) ? classContext[5].getName() : null; - Tweaker.log.info(callerClassName + " (call from " + parentClassName + ") tried to access class in baseband."); - - if (callerClassName != null && !callerClassName.startsWith("com.baseband.")) { - if (parentClassName == null || !parentClassName.startsWith("com.baseband.")) { - Loader.exit(); - } - } - } - } - - @Override - public void checkPermission(Permission b, Object a) { - checkPermission(b); - } -} \ No newline at end of file diff --git a/Loader/src/main/java/org/baseband/launcher/util/DynamicPermissionManager.java b/Loader/src/main/java/org/baseband/launcher/util/DynamicPermissionManager.java deleted file mode 100644 index f4b383f..0000000 --- a/Loader/src/main/java/org/baseband/launcher/util/DynamicPermissionManager.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (c) 2023 Jess H & Daniella H. All Rights Reserved. - * Unauthorized copying of this file via any medium is Strictly Prohibited. - */ - -package org.baseband.launcher.util; - -import de.tudbut.security.PermissionManager; -import de.tudbut.security.Strictness; -import org.baseband.launcher.launch.Loader; - -public class DynamicPermissionManager implements PermissionManager { - @Override - public boolean checkCaller(Strictness strictnessLevel) { - return Loader.getPermissionManager().checkCaller(strictnessLevel); - } - - @Override - public boolean checkLambda(Strictness strictnessLevel, T lambda) { - return Loader.getPermissionManager().checkLambda(strictnessLevel, lambda); - } - - @Override - public void crash(Strictness strictnessLevel) { - Loader.getPermissionManager().crash(strictnessLevel); - } - - @Override - public boolean showErrors() { - return Loader.getPermissionManager().showErrors(); - } - - @Override - public void killReflection() { - Loader.getPermissionManager().killReflection(); - } - - @Override - public PermissionManager clone() { - return this; // holds no state - } -} diff --git a/Loader/src/main/java/org/baseband/launcher/util/Key.java b/Loader/src/main/java/org/baseband/launcher/util/Key.java deleted file mode 100644 index eb1f352..0000000 --- a/Loader/src/main/java/org/baseband/launcher/util/Key.java +++ /dev/null @@ -1,117 +0,0 @@ -/* - * Copyright (c) 2023 Jess H & Daniella H. All Rights Reserved. - * Unauthorized copying of this file via any medium is Strictly Prohibited. - */ - -package org.baseband.launcher.util; - -import java.nio.charset.StandardCharsets; -import java.util.UUID; - -import de.tudbut.tools.Tools; - -public class Key { - - private final String string; - - public Key() { - string = Tools.randomAlphanumericString(4096); - } - - public Key(String key) { - string = key; - } - - public Key(byte[] key) { - string = new String(key, StandardCharsets.ISO_8859_1); - } - - - public byte[] encryptByte(byte[] bytes) { - if(bytes == null) { - return null; - } - bytes = bytes.clone(); - byte[] eb = string.getBytes(StandardCharsets.ISO_8859_1); - int len = bytes.length; - int p = eb.length; - for (int i = 0 ; i < len ; i+=p) { - for (int j = 0 ; j < p && i + j < len ; j++) { - int idx = i + j; - bytes[idx] = (byte) ((int) bytes[idx] + (int) eb[j]); - } - } - return bytes; - } - - public byte[] decryptByte(byte[] bytes) { - if(bytes == null) { - return null; - } - bytes = bytes.clone(); - byte[] eb = string.getBytes(StandardCharsets.ISO_8859_1); - int len = bytes.length; - int p = eb.length; - for (int i = 0 ; i < len ; i+=p) { - for (int j = 0 ; j < p && i + j < len ; j++) { - int idx = i + j; - bytes[idx] = (byte) ((int) bytes[idx] - (int) eb[j]); - } - } - return bytes; - } - - public byte[] decryptByteKey(byte[] bytes) { - if(bytes == null) { - return null; - } - byte[] eb = string.getBytes(StandardCharsets.ISO_8859_1); - int len = bytes.length; - int p = eb.length; - for (int i = 0 ; i < len ; i+=p) { - for (int j = 0 ; j < p && i + j < len ; j++) { - int idx = i + j; - bytes[idx] = (byte) ((int) bytes[idx] - (int) eb[j]); - } - } - return bytes; - } - - /** - * Encrypts a string - * @param s string to encrypt - * @return encrypted string - */ - public String encryptString(String s) { - byte[] bytes = s.getBytes(StandardCharsets.ISO_8859_1); - byte[] eb = string.getBytes(StandardCharsets.ISO_8859_1); - int len = bytes.length; - int p = eb.length; - for (int i = 0 ; i < len ; i+=p) { - for (int j = 0 ; j < p && i + j < len ; j++) { - int idx = i + j; - bytes[idx] = (byte) ((int) bytes[idx] + (int) eb[j]); - } - } - return new String(bytes, StandardCharsets.ISO_8859_1); - } - - /** - * Decrypts a string - * @param s string to decrypt - * @return decrypted string - */ - public String decryptString(String s) { - byte[] bytes = s.getBytes(StandardCharsets.ISO_8859_1); - byte[] eb = string.getBytes(StandardCharsets.ISO_8859_1); - int len = bytes.length; - int p = eb.length; - for (int i = 0 ; i < len ; i+=p) { - for (int j = 0 ; j < p && i + j < len ; j++) { - int idx = i + j; - bytes[idx] = (byte) ((int) bytes[idx] - (int) eb[j]); - } - } - return new String(bytes, StandardCharsets.ISO_8859_1); - } -} diff --git a/Loader/src/main/java/org/baseband/launcher/util/MixinRestriction.java b/Loader/src/main/java/org/baseband/launcher/util/MixinRestriction.java deleted file mode 100644 index 1671c7e..0000000 --- a/Loader/src/main/java/org/baseband/launcher/util/MixinRestriction.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright (c) 2023 Jess H & Daniella H. All Rights Reserved. - * Unauthorized copying of this file via any medium is Strictly Prohibited. - */ - -package org.baseband.launcher.util; - -import de.tudbut.security.Strictness; -import de.tudbut.security.permissionmanager.Restriction; -import de.tudbut.security.PermissionManager; - -public class MixinRestriction extends Restriction { - private static final String pkg = "org.spongepowered.asm.mixin.transformer"; - - // restrictions should always have this in order to be able to chain them - public MixinRestriction(PermissionManager parent) { - super(parent); - } - public MixinRestriction() { - super(null); - } - - @Override - public boolean checkCaller(Strictness strictnessLevel) { - StackTraceElement[] st = Thread.currentThread().getStackTrace(); - StackTraceElement[] elements; - if (strictnessLevel.hasProperty("Restriction.Mixin.MaxDistance")) { - int maxDist = strictnessLevel.getIntProperty("Restriction.Mixin.MaxDistance"); - if (st.length > maxDist) { - elements = new StackTraceElement[maxDist]; - System.arraycopy(st, 0, elements, 0, maxDist); - st = elements; - } - } - - boolean isCalledByAllowed = false; - elements = st; - int var5 = st.length; - - for(int var6 = 0; var6 < var5; ++var6) { - StackTraceElement element = elements[var6]; - if (element.getClassName().startsWith(pkg)) { - isCalledByAllowed = true; - break; - } - } - - return isCalledByAllowed && super.checkCaller(strictnessLevel); - } -} diff --git a/Loader/src/main/java/org/baseband/launcher/util/RSAKey.java b/Loader/src/main/java/org/baseband/launcher/util/RSAKey.java new file mode 100644 index 0000000..05acd25 --- /dev/null +++ b/Loader/src/main/java/org/baseband/launcher/util/RSAKey.java @@ -0,0 +1,76 @@ +package org.baseband.launcher.util; + +import javax.crypto.Cipher; +import java.security.*; +import java.security.spec.X509EncodedKeySpec; +import java.util.Base64; + +public class RSAKey implements Util { + + PublicKey publicKey; + + PrivateKey privateKey; + + public RSAKey(String publicKey) throws Exception { + this.publicKey = decodeBase64ToPublicKey(publicKey); + } + + + + public RSAKey() { + KeyPair keyPair = generateKeyPair(); + this.publicKey = keyPair.getPublic(); + this.privateKey = keyPair.getPrivate(); + } + + private KeyPair generateKeyPair() { + try { + KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA"); + keyPairGenerator.initialize(4096); + return keyPairGenerator.generateKeyPair(); + } catch (Exception e) { + LOGGER.fatal(e); + return null; + } + } + + public String rsaEnc(String plainText) { + try { + Cipher cipher = Cipher.getInstance("RSA"); + cipher.init(Cipher.ENCRYPT_MODE, publicKey); + return Base64.getEncoder().encodeToString(cipher.doFinal(plainText.getBytes())); + } catch (Exception e) { + LOGGER.fatal(e); + return null; + } + } + + public String rsaDec(String encryptedBytesInBase64) { + try { + Cipher cipher = Cipher.getInstance("RSA"); + cipher.init(Cipher.DECRYPT_MODE, privateKey); + byte[] decryptedBytes = cipher.doFinal(Base64.getDecoder().decode(encryptedBytesInBase64)); + return new String(decryptedBytes); + } catch (Exception e) { + LOGGER.fatal(e); + return null; + } + } + + public PublicKey decodeBase64ToPublicKey(String base64PublicKey) { + try { + byte[] publicKeyBytes = Base64.getDecoder().decode(base64PublicKey); + KeyFactory keyFactory = KeyFactory.getInstance("RSA"); + X509EncodedKeySpec keySpec = new X509EncodedKeySpec(publicKeyBytes); + return keyFactory.generatePublic(keySpec); + } catch (Exception e) { + LOGGER.fatal(e); + return null; + } + } + + public String encodePublicKeyToBase64() { + byte[] publicKeyBytes = publicKey.getEncoded(); + return Base64.getEncoder().encodeToString(publicKeyBytes); + } +} diff --git a/Loader/src/main/java/org/baseband/launcher/util/Util.java b/Loader/src/main/java/org/baseband/launcher/util/Util.java new file mode 100644 index 0000000..964f116 --- /dev/null +++ b/Loader/src/main/java/org/baseband/launcher/util/Util.java @@ -0,0 +1,11 @@ +package org.baseband.launcher.util; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import java.security.SecureRandom; + +public interface Util { + Logger LOGGER = LogManager.getLogger("BaseBand Loader"); + SecureRandom RANDOM = new SecureRandom(); +} diff --git a/Loader/src/main/resources/mcmod.info b/Loader/src/main/resources/mcmod.info index e51c167..0e3237b 100644 --- a/Loader/src/main/resources/mcmod.info +++ b/Loader/src/main/resources/mcmod.info @@ -1,15 +1,15 @@ [ { "modid": "baseband", - "name": "BaseBand Loader", - "description": "Copyright JessSystemV (2023) All Rights Reserved.", + "name": "BaseBand Rewrite Loader", + "description": "Copyright JessSystemV (2024) All Rights Reserved.", "version": "1.0", "mcversion": "[1.12.2]", "authorList": [ "JessSystemV", "TudbuT" ], - "credits": "John200410 for the ClassLoader hierarchy", + "credits": "Caitlynn for emotional support.", "screenshots": [], "dependencies": [] }

1D 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≶ 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%0D|-y? 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%0D0AfpJ3HXy}{ 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 0) { - bytes.write(currentBytes, 0, len); - } - } catch (IOException e) { - throw new CarrierException(e, bytes.toByteArray()); - } - return bytes.toByteArray(); - } - - /** - * Reads all bytes in the stream and converts them to a char[] - * @return {@link Character} array (native) - * @throws IOException Inherited from {@link StreamReader#readAllAsBytes()} - */ - public char[] readAllAsChars() throws IOException { - return new String(readAllAsBytes()).toCharArray(); - } - - /** - * Reads all bytes in the stream and converts them to a char[] - * @param encoding The encoding to use for conversion - * @return {@link Character} array (native) - * @throws IOException Inherited from {@link StreamReader#readAllAsBytes()} - */ - public char[] readAllAsChars(String encoding) throws IOException { - return new String(readAllAsBytes(), encoding).toCharArray(); - } - - /** - * Same as {@link StreamReader#readAllAsChars()}, but returns a string instead. - * @return The string - * @throws IOException Inherited from {@link StreamReader#readAllAsBytes()} - */ - public String readAllAsString() throws IOException { - return new String(readAllAsBytes()); - } - - /** - * Returns all lines in the file. All line ending are supported (\r\n, \n, \r). - * @return The lines - * @throws IOException Inherited from {@link StreamReader#readAllAsBytes()} - */ - public String[] readAllAsLines() throws IOException { - return new String(readAllAsBytes()).replaceAll("\r\n", "\n").replaceAll("\r", "\n").split("\n"); - } - - /** - * Same as {@link StreamReader#readAllAsChars()}, but returns a string instead. - * @param encoding The encoding to use - * @return The string - * @throws IOException Inherited from {@link StreamReader#readAllAsBytes()} - */ - public String readAllAsString(String encoding) throws IOException { - return new String(readAllAsBytes(), encoding); - } - - /** - * Returns all lines in the file. All line ending are supported (\r\n, \n, \r). - * @param encoding The encoding to use - * @return The lines - * @throws IOException Inherited from {@link StreamReader#readAllAsBytes()} - */ - public String[] readAllAsLines(String encoding) throws IOException { - return new String(readAllAsBytes(), encoding).replaceAll("\r\n", "\n").replaceAll("\r", "\n").split("\n"); - } - -} diff --git a/Loader/src/main/java/de/tudbut/obj/CarrierException.java b/Loader/src/main/java/de/tudbut/obj/CarrierException.java deleted file mode 100644 index 9df3050..0000000 --- a/Loader/src/main/java/de/tudbut/obj/CarrierException.java +++ /dev/null @@ -1,16 +0,0 @@ -/* - * Copyright (c) 2023 Jess H & Daniella H. All Rights Reserved. - * Unauthorized copying of this file via any medium is Strictly Prohibited. - */ - -package de.tudbut.obj; - -public class CarrierException extends RuntimeException { - - public final Object carried; - - public CarrierException(Exception e, Object o) { - super(e); - carried = o; - } -} diff --git a/Loader/src/main/java/de/tudbut/obj/DoubleTypedObject.java b/Loader/src/main/java/de/tudbut/obj/DoubleTypedObject.java deleted file mode 100644 index 21509cc..0000000 --- a/Loader/src/main/java/de/tudbut/obj/DoubleTypedObject.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (c) 2023 Jess H & Daniella H. All Rights Reserved. - * Unauthorized copying of this file via any medium is Strictly Prohibited. - */ - -package de.tudbut.obj; - -import de.tudbut.tools.ReflectUtil; - -import java.util.Objects; - -public class DoubleTypedObject implements Cloneable { - - public O o; - public T t; - - public DoubleTypedObject(O o, T t) { - this.o = o; - this.t = t; - } - public DoubleTypedObject() { - } - - @Override - public boolean equals(Object o1) { - if (this == o1) return true; - if (!(o1 instanceof DoubleTypedObject)) return false; - DoubleTypedObject that = (DoubleTypedObject) o1; - return Objects.equals(o, that.o) && Objects.equals(t, that.t); - } - - @SuppressWarnings("MethodDoesntCallSuperMethod") - @Override - public DoubleTypedObject clone() { - return new DoubleTypedObject<>(ReflectUtil.forceClone(o), ReflectUtil.forceClone(t)); - } -} diff --git a/Loader/src/main/java/de/tudbut/obj/TLMap.java b/Loader/src/main/java/de/tudbut/obj/TLMap.java deleted file mode 100644 index 7f99cff..0000000 --- a/Loader/src/main/java/de/tudbut/obj/TLMap.java +++ /dev/null @@ -1,204 +0,0 @@ -/* - * Copyright (c) 2023 Jess H & Daniella H. All Rights Reserved. - * Unauthorized copying of this file via any medium is Strictly Prohibited. - */ - -package de.tudbut.obj; - -import de.tudbut.tools.Retriever; - -import java.util.*; - -public class TLMap { - protected Binding binding = new Binding<>(); - - public static TLMap stringToMap(String mapStringParsable) { - TLMap map = new TLMap<>(); - - String[] splitTiles = mapStringParsable.split(";"); - for (int i = 0; i < splitTiles.length; i++) { - String tile = splitTiles[i]; - String[] splitTile = tile.split(":"); - if (tile.contains(":")) { - if (splitTile.length == 2) - map.set( - splitTile[0].replaceAll("%I", ":").replaceAll("%B", ";").replaceAll("%P", "%"), - splitTile[1].equals("%N") ? null : splitTile[1].replaceAll("%I", ":").replaceAll("%B", ";").replaceAll("%P", "%") - ); - else - map.set(splitTile[0].replaceAll("%I", ":").replaceAll("%B", ";").replaceAll("%P", "%"), ""); - } - } - - return map; - } - - public static String mapToString(TLMap map) { - StringBuilder r = new StringBuilder(); - - for (String key : map.keys().toArray(new String[0])) { - - r - .append(key.replaceAll("%", "%P").replaceAll(";", "%B").replaceAll(":", "%I")) - .append(":") - .append(map.get(key) == null ? "%N" : map.get(key).replaceAll("%", "%P").replaceAll(";", "%B").replaceAll(":", "%I")) - .append(";") - ; - } - - return r.toString(); - } - - public void set(K key, V value) { - binding.set(key, value); - } - - public void setIfNull(K key, V value) { - if(binding.get(key) == null) { - binding.set(key, value); - } - } - - public V get(K key) { - return binding.get(key); - } - - public V get(K key, V def) { - V v = binding.get(key); - return v == null ? def : v; - } - public V get(K key, Retriever def) { - V v = binding.get(key); - return v == null ? def.retrieve() : v; - } - - public Set keys() { - return binding.keys(); - } - - public int size() { - return binding.size(); - } - - public Set values() { - return binding.values(); - } - - public ArrayList> entries() { - return binding.entries(); - } - - public TLMap flip() { - TLMap map = new TLMap<>(); - map.binding = binding.flip(); - return map; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - TLMap tlMap = (TLMap) o; - return tlMap.binding.entries.equals(binding.entries); - } - - protected static class Binding { - protected ArrayList> entries = new ArrayList<>(); - - protected void set(K key, V value) { - boolean exists = false; - for (int i = 0; i < entries.size(); i++) { - Entry entry = entries.get(i); - if (key == entry.key || entry.key.equals(key)) { - exists = true; - if(value == null) { - entries.remove(i); - break; - } - entry.val = value; - } - } - if(!exists && value != null && key != null) { - this.entries.add(new Entry<>(key, value)); - } - } - - protected V get(K key) { - ArrayList> entries = (ArrayList>) this.entries.clone(); - for (Entry entry : entries) { - if (key == entry.key || entry.key.equals(key)) - return entry.val; - } - return null; - } - - protected Set keys() { - Set keys = new LinkedHashSet<>(); - for (int i = 0; i < entries.size(); i++) { - keys.add(entries.get(i).key); - } - return keys; - } - - protected Set values() { - Set vals = new LinkedHashSet<>(); - for (int i = 0; i < entries.size(); i++) { - vals.add(entries.get(i).val); - } - return vals; - } - - protected ArrayList> entries() { - ArrayList> vals = new ArrayList<>(); - vals.addAll(entries); - return vals; - } - - protected Binding flip() { - Binding binding = new Binding<>(); - for (int i = 0 ; i < entries.size() ; i++) { - Entry entry = entries.get(i); - binding.entries.add(new Entry<>(entry.val, entry.key)); - } - return binding; - } - - public int size() { - return entries.size(); - } - } - - public static class Entry { - public K key; - public V val; - - protected Entry() { - } - - protected Entry(K key, V val) { - this.key = key; - this.val = val; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - Entry entry = (Entry) o; - if (!Objects.equals(key, entry.key)) return false; - return Objects.equals(val, entry.val); - } - } - - @Override - public TLMap clone() { - TLMap n = new TLMap<>(); - Object[] keys = keys().toArray(); - Object[] vals = values().toArray(); - for (int i = 0, arrayLength = keys.length ; i < arrayLength ; i++) { - Object key = keys[i]; - n.set((K)key, (V)vals[i]); - } - return n; - } -} diff --git a/Loader/src/main/java/de/tudbut/parsing/JSON.java b/Loader/src/main/java/de/tudbut/parsing/JSON.java deleted file mode 100644 index 6969ace..0000000 --- a/Loader/src/main/java/de/tudbut/parsing/JSON.java +++ /dev/null @@ -1,429 +0,0 @@ -/* - * Copyright (c) 2023 Jess H & Daniella H. All Rights Reserved. - * Unauthorized copying of this file via any medium is Strictly Prohibited. - */ - -package de.tudbut.parsing; - -import de.tudbut.tools.Stack; -import de.tudbut.tools.StringTools; - -import java.util.ArrayList; - -/** - * Interconverting JSON and TCN - */ -public class JSON { - - /** - * Converts a JSON string to a TCN object - * @param string The JSON string, supports most compact and readable formats - * @return The parsed TCN object - * @throws JSONFormatException If a format error is found - */ - public static TCN read(String string) throws JSONFormatException { - while (string.startsWith(" ")) { - string = string.substring(1); - } - if(!string.startsWith("{") && !string.startsWith("[")) { - throw new JSONFormatException("Expected: { or [ at 0 (String is '" + string + "')"); - } - boolean array = string.startsWith("["); - TCN tcn = new TCN("JSON", array); - boolean escape = false; - int pos = 1; - char[] a = string.toCharArray(); - char c = a[pos]; - int arrayPos = 0; - boolean inString = false; - boolean startString = false; - StringBuilder theString = new StringBuilder(); - boolean kv = false; - String key = ""; - boolean inStringKV = false; - boolean inObjectKV = false; - TCN sub = null; - - try { - while (inString || (c != '}' && c != ']')) { - if(array) { - kv = true; - } - - if (startString) { - inString = true; - startString = false; - } - if (c == '\\') { - escape = !escape; - } - if (!escape && c == '"') { - startString = !inString; - if (startString) { - if (kv) - inStringKV = true; - theString = new StringBuilder(); - } - else { - inString = false; - if (!kv) { // Key - key = theString.toString(); - } - } - } - if (inString) { - if (!escape) - theString.append(c); - else { - a: - { - // Make escapes work - if (c == 'n') - theString.append('\n'); - if (c == 'r') - theString.append('\r'); - if (c == 'u') { - String e = ""; - e += c = a[++pos]; - e += c = a[++pos]; - e += c = a[++pos]; - e += c = a[++pos]; - theString.append((char) Integer.parseInt(e, 16)); - break a; - } - if (c == '0') { - String e = ""; - e += c = a[pos]; - e += c = a[++pos]; - e += c = a[++pos]; - theString.append((char) Integer.parseInt(e, 8)); - break a; - } - if (c == '1') { - String e = ""; - e += c = a[pos]; - e += c = a[++pos]; - e += c = a[++pos]; - theString.append((char) Integer.parseInt(e, 8)); - break a; - } - if (c == '2') { - String e = ""; - e += c = a[pos]; - e += c = a[++pos]; - e += c = a[++pos]; - theString.append((char) Integer.parseInt(e, 8)); - break a; - } - if (c == '3') { - String e = ""; - e += c = a[pos]; - e += c = a[++pos]; - e += c = a[++pos]; - theString.append((char) Integer.parseInt(e, 8)); - break a; - } - if (c == 'x') { - String e = ""; - e += c = a[++pos]; - e += c = a[++pos]; - theString.append((char) Integer.parseInt(e, 16)); - break a; - } - if (c == '"') { - theString.append("\""); - } - } - } - } - - // Booleans, ints, etc - else if (kv && !startString && !inStringKV && c != ',' && (Character.isLetterOrDigit(c) || c == '.' || c == '-')) { - theString.append(c); - } - - // SubObjects - if (!inString && c == '{') { - inObjectKV = true; - escape = false; - theString = new StringBuilder("{"); - int layer = 1; - while (layer > 0) { - c = a[++pos]; - theString.append(c); - if(c == '{' && !inString) { - layer++; - } - if(c == '}' && !inString) { - layer--; - } - - if (c == '\\') { - escape = !escape; - } - if (c == '\"' && !escape) { - inString = !inString; - } - if (c != '\\') { - escape = false; - } - } - theString.append("}"); - sub = read(theString.toString()); - theString = new StringBuilder(); - } - // Arrays - if (!inString && c == '[') { - inObjectKV = true; - escape = false; - theString = new StringBuilder("["); - int layer = 1; - while (layer != 0) { - c = a[++pos]; - theString.append(c); - if(c == '[' && !inString) { - layer++; - } - if(c == ']' && !inString) { - layer--; - } - - if (c == '\\') { - escape = !escape; - } - if (c == '\"' && !escape) { - inString = !inString; - } - if (c != '\\') { - escape = false; - } - } - theString.append(']'); - sub = read(theString.toString()); - theString = new StringBuilder(); - } - - - if(array) { - kv = true; - } - // Key vs Value parsing - if (!inString && c == ':') { - theString = new StringBuilder(); - if (!kv) - kv = true; - else - throw new JSONFormatException("Unexpected: '" + c + "' at " + pos + " - Should be ','"); - } - if (!inString && c == ',') { - if(array) - key = String.valueOf(arrayPos++); - - if (inObjectKV) { - tcn.set(key, sub); - } else if(inStringKV || !theString.toString().equals("null")) { - tcn.set(key, theString.toString()); - } - inObjectKV = false; - inStringKV = false; - theString = new StringBuilder(); - if (kv) - kv = false; - else - throw new JSONFormatException("Unexpected: '" + c + "' at " + pos + " - Should be ':'"); - - } - - if (c != '\\') { - escape = false; - } - - c = a[++pos]; - } - if(kv) { - if (array) - key = String.valueOf(arrayPos); - if (inObjectKV) - tcn.set(key, sub); - else if(inStringKV || !theString.toString().equals("null")) - tcn.set(key, theString.toString()); - } - - - for (String theKey : tcn.map.keys()) { - TCN.deepConvert(theKey, tcn.get(theKey), tcn); - } - return tcn; - } catch (JSONFormatException e) { - throw e; - } catch (Throwable e) { - throw new JSONFormatException("At " + pos + " in " + string + " (Debug: " + inString + " " + kv + " " + theString + " " + key + " " + array + ")", e); - } - } - - private static String indent(boolean b, int i, int il) { - if(b) - return StringTools.multiply(StringTools.multiply(" ", il), i); - else - return ""; - } - - /** - * Converts a TCN object to a JSON string, uses the most compact form - * @param tcn The TCN to write to JSON - * @return The JSON string - */ - public static String write(TCN tcn) { - return write(tcn, false, false, 0); - } - - /** - * Converts a TCN object to a JSON string - * @param tcn The TCN to write to JSON - * @param spaces If the JSON string should have spaces after : and , - * @return The JSON string - */ - public static String write(TCN tcn, boolean spaces) { - return write(tcn, false, spaces, 0); - } - - /** - * Converts a TCN object to a JSON string, uses newlines with selected indent and without spaces - * @param tcn The TCN to write to JSON - * @param indent The indent to use - * @return The JSON string - */ - public static String write(TCN tcn, int indent) { - return write(tcn, true, false, indent); - } - - /** - * Converts a TCN object to a JSON string, uses newlines with an indent of 2 and spaces - * @param tcn The TCN to write to JSON - * @return The JSON string - */ - public static String writeReadable(TCN tcn) { - return write(tcn, true, true, 2); - } - - /** - * Converts a TCN object to a JSON string, uses newlines with selected indent and spaces - * @param tcn The TCN to write to JSON - * @param indent The indent to use - * @return The JSON string - */ - public static String writeReadable(TCN tcn, int indent) { - return write(tcn, true, true, indent); - } - - /** - * Converts a TCN object to a JSON string - * @param tcn The TCN to write to JSON - * @param newlines If the JSON string should have newlines and indents - * @param spaces If the JSON string should have spaces after : and , - * @param indentLength The indent to use - * @return The JSON string - */ - public static String write(TCN tcn, boolean newlines, boolean spaces, int indentLength) { - - StringBuilder s = new StringBuilder(); - s.append(tcn.isArray ? "[" : "{").append(newlines ? "\n" : ""); - int i = 1; - - ArrayList> paths = new ArrayList<>(); - Stack tcnStack = new Stack<>(); - Stack path = new Stack<>(); - tcnStack.add(tcn); - path.add(""); - while (tcnStack.size() > 0) { - boolean b = false; - for(String key : tcnStack.peek().map.keys()) { - Object o = tcnStack.peek().map.get(key); - - if(o == null) - continue; - - String k = key.replaceAll("\\\\", "\\\\\\\\").replaceAll("\n", "\\\\n").replaceAll("\"", "\\\\\""); - if(o.getClass() == TCN.class) { - path.add(key); - if(!paths.contains(path)) { - paths.add(path.clone()); - TCN theTCN = tcnStack.peek(); - tcnStack.add((TCN) o); - if(theTCN.isArray) { - s.append(indent(newlines, i, indentLength)).append("{").append(newlines ? "\n" : ""); - } - else - s.append(indent(newlines, i, indentLength)).append("\"").append(k).append("\":").append(spaces ? " " : "").append("{").append(newlines ? "\n" : ""); - b = true; - i++; - } else - path.next(); - } else if(o.getClass() == TCNArray.class) { - path.add(key); - if(!paths.contains(path)) { - paths.add(path.clone()); - TCN theTCN = tcnStack.peek(); - tcnStack.add(((TCNArray) o).toTCN()); - if(theTCN.isArray) { - s.append(indent(newlines, i, indentLength)).append("[").append(newlines ? "\n" : ""); - } - else - s.append(indent(newlines, i, indentLength)).append("\"").append(k).append("\":").append(spaces ? " " : "").append("[").append(newlines ? "\n" : ""); - i++; - b = true; - } else - path.next(); - } else if (o instanceof String) { - path.add(key); - if(!paths.contains(path)) { - paths.add(path.clone()); - String val = o.toString().replaceAll("\\\\", "\\\\\\\\").replaceAll("\n", "\\\\n").replaceAll("\r", "\\\\r").replaceAll("\"", "\\\\\""); - if(tcnStack.peek().isArray) { - s.append(indent(newlines, i, indentLength)).append("\"").append(val).append("\",").append(spaces ? " " : "").append(newlines ? "\n" : ""); - } - else - s.append(indent(newlines, i, indentLength)).append("\"").append(k).append("\":").append(spaces ? " \"" : "\"").append(val).append("\",").append(spaces ? " " : "").append(newlines ? "\n" : ""); - b = true; - } - path.next(); - } - else { - path.add(key); - if(!paths.contains(path)) { - paths.add(path.clone()); - String val = o.toString(); - if(tcnStack.peek().isArray) { - s.append(indent(newlines, i, indentLength)).append(val).append(",").append(spaces ? " " : "").append(newlines ? "\n" : ""); - } - else - s.append(indent(newlines, i, indentLength)).append("\"").append(k).append("\":").append(spaces ? " " : "").append(val).append(",").append(spaces ? " " : "").append(newlines ? "\n" : ""); - b = true; - } - path.next(); - } - } - if(!b) { - TCN theTCN = tcnStack.next(); - path.next(); - i--; - if(theTCN.map.keys().isEmpty()) { - s.append(",").append(spaces ? " " : ""); - } - s.delete(s.length() - ((newlines ? 2 : 1) + (spaces ? 1 : 0)), s.length()); - s.append(newlines ? "\n" : "").append(indent(newlines, i, indentLength)).append(theTCN.isArray ? "]" : "}").append(",").append(spaces ? " " : "").append(newlines ? "\n" : ""); - } - } - s.delete(s.length() - ((newlines ? 2 : 1) + (spaces ? 1 : 0)), s.length()); - return s.toString(); - } - - public static class JSONFormatException extends Exception { - public JSONFormatException(String s, Throwable e) { - super(s, e); - } - public JSONFormatException(String s) { - super(s); - } - } -} diff --git a/Loader/src/main/java/de/tudbut/parsing/TCN.java b/Loader/src/main/java/de/tudbut/parsing/TCN.java deleted file mode 100644 index 26ea4a6..0000000 --- a/Loader/src/main/java/de/tudbut/parsing/TCN.java +++ /dev/null @@ -1,518 +0,0 @@ -/* - * Copyright (c) 2023 Jess H & Daniella H. All Rights Reserved. - * Unauthorized copying of this file via any medium is Strictly Prohibited. - */ - -package de.tudbut.parsing; - - -import de.tudbut.tools.Tools; -import de.tudbut.obj.DoubleTypedObject; -import de.tudbut.obj.TLMap; -import de.tudbut.tools.Stack; -import de.tudbut.tools.StringTools; - -import java.util.*; - -/** - * T udbuT
- * C onfig
- * N otation
- */ -public class TCN { - - /** - * The map - */ - public TLMap map = new TLMap<>(); - public final boolean isArray; - public String type; - - /** - * Creates a new, empty TCN - */ - public TCN() { - isArray = false; - this.type = "TCN"; - } - - TCN(boolean array) { - isArray = array; - this.type = "TCN"; - } - - public TCN(String type) { - isArray = false; - this.type = type; - } - - TCN(String type, boolean array) { - isArray = array; - this.type = type; - } - - - /** - * Sets something in the map - * @param key Key - * @param o Object, can be a native type, string, or another TCN (or TCNArray) - */ - public void set(String key, Object o) { - /*TLMap map = this.map; - ArrayList path = new ArrayList<>(Arrays.asList(key.split("#"))); - - while (path.size() > 1) { - map = ((TCN) map.get(path.remove(0))).map; - } - */ - map.set(key, o); - } - - public String getString(String key) { - Object o = map.get(key); - if(o != null) - return get(key).toString(); - else - return null; - } - - public Short getShort(String key) { - Object o = get(key); - if(o != null) - return Short.valueOf(String.valueOf(o)); - else - return null; - } - - public Integer getInteger(String key) { - Object o = get(key); - if(o != null) - return Integer.valueOf(String.valueOf(o)); - else - return null; - } - - public Boolean getBoolean(String key) { - Object o = get(key); - if(o != null) - return Boolean.valueOf(String.valueOf(o)); - else - return null; - } - - public Float getFloat(String key) { - Object o = get(key); - if(o != null) - return Float.valueOf(String.valueOf(o)); - else - return null; - } - - public Long getLong(String key) { - Object o = get(key); - if(o != null) - return Long.valueOf(String.valueOf(o)); - else - return null; - } - - public Double getDouble(String key) { - Object o = get(key); - if(o != null) - return Double.valueOf(String.valueOf(o)); - else - return null; - } - - public TCN getSub(String key) { - Object o = get(key); - if(o != null && o.getClass() == TCN.class) - return (TCN) map.get(key); - else - return null; - } - - public TCNArray getArray(String key) { - Object o = get(key); - if(o != null && o.getClass() == TCNArray.class) - return (TCNArray) map.get(key); - else - return null; - } - - public Object get(String key) { - TLMap map = this.map; - ArrayList path = new ArrayList<>(Collections.singletonList(key)); - - while (path.size() > 1) { - map = ((TCN) map.get(path.remove(0))).map; - } - - return map.get(path.get(0)); - } - - /** - * Converts a Map to a TCN - * @param map The map to convert - * @return The converted TCN - */ - public static TCN readMap(Map map) { - TCN tcn = new TCN(map.containsKey("TCN%isArray") && Boolean.parseBoolean(map.get("TCN%isArray"))); - - map.remove("TCN%isArray"); - - String[] array = map.keySet().toArray(new String[0]); - for (int i = 0, arrayLength = array.length; i < arrayLength; i++) { - String key = array[i]; - String s = map.get(key); - - if(s.contains(":")) { - tcn.map.set(key, TCN.readMap(Tools.stringToMap(s))); - } - else { - tcn.map.set(key, s.replaceAll("%C", ":").replaceAll("%P", "%")); - } - } - - for (String key : tcn.map.keys()) { - deepConvert(key, tcn.get(key), tcn); - } - - return tcn; - } - - /** - * Converts this TCN object to a Map - * {@link #readMap} - * @return The converted Map - */ - public Map toMap() { - Map r = new LinkedHashMap<>(); - - if(isArray) - r.put("TCN%isArray", "true"); - - String[] array = map.keys().toArray(new String[0]); - for (int i = 0, arrayLength = array.length; i < arrayLength; i++) { - String key = array[i]; - Object o = map.get(key); - - if(o == null) - continue; - - if(o.getClass() == TCN.class) { - r.put(key, Tools.mapToString(((TCN) o).toMap())); - } - else if(o.getClass() == TCNArray.class) { - r.put(key, Tools.mapToString(((TCNArray) o).toMap())); - } - else - r.put(key, o.toString().replaceAll("%", "%P").replaceAll(":", "%C")); - } - - return r; - } - - /** - * Converts this TCN to a reversible string - * @return The converted string - */ - public String toString() { - if(type.equalsIgnoreCase("TCN")) { - StringBuilder s = new StringBuilder(); - int i = 0; - - ArrayList> paths = new ArrayList<>(); - Stack tcnStack = new Stack<>(); - Stack path = new Stack<>(); - tcnStack.add(this); - path.add(""); - while (tcnStack.size() > 0) { - boolean b = false; - for (String key : tcnStack.peek().map.keys()) { - Object o = tcnStack.peek().map.get(key); - - if (o == null) - continue; - - String k = key.replaceAll("%", "%P").replaceAll(":", "%C").replaceAll("\n", "%N"); - if (k.startsWith(" ")) { - if (!k.equals(" ")) { - k = "%S" + k.substring(1); - } else - k = "%S"; - } - if (k.startsWith("#")) { - if (!k.equals("#")) { - k = "%H" + k.substring(1); - } else - k = "%H"; - } - if (o.getClass() == TCN.class) { - path.add(key); - if (!paths.contains(path)) { - paths.add(path.clone()); - TCN tcn = tcnStack.peek(); - tcnStack.add((TCN) o); - String indent = StringTools.multiply(" ", i); - if (tcn.isArray) { - s.append("\n").append(indent).append(";").append(((TCN) o).isArray ? " [\n" : " {\n"); - } else - s.append("\n").append(indent).append(k).append(((TCN) o).isArray ? " [\n" : " {\n"); - i++; - b = true; - break; - } else - path.next(); - } else if (o.getClass() == TCNArray.class) { - path.add(key); - if (!paths.contains(path)) { - paths.add(path.clone()); - TCN tcn = tcnStack.peek(); - tcnStack.add(((TCNArray) o).toTCN()); - String indent = StringTools.multiply(" ", i); - if (tcn.isArray) { - s.append("\n").append(indent).append(";").append(" [\n"); - } else - s.append("\n").append(indent).append(k).append(" [\n"); - i++; - b = true; - break; - } else - path.next(); - } else { - path.add(key); - if (!paths.contains(path)) { - paths.add(path.clone()); - String indent = StringTools.multiply(" ", i); - String val = o.toString().replaceAll("%", "%P").replaceAll("\n", "%N"); - if (tcnStack.peek().isArray) { - s.append(indent).append("; ").append(val).append("\n"); - } else - s.append(indent).append(k).append(": ").append(val).append("\n"); - b = true; - } - path.next(); - } - } - if (!b) { - TCN tcn = tcnStack.next(); - path.next(); - i--; - String indent = StringTools.multiply(" ", i); - s.append(indent).append(tcn.isArray ? "]\n\n" : "}\n\n"); - } - } - try { - s.setLength(s.length() - "\n#\n\n".length()); - s.trimToSize(); - } catch (Exception ignored) { - } - - return s.toString(); - } - else if(type.equalsIgnoreCase("JSON")) { - return JSON.write(this); - } - return ""; - } - - /** - * Converts a string {@link #toString()} to a TCN object - * @param s The string - * @return The converted TCN - * @throws TCNException If a format error occurs - */ - public static TCN read(String s) throws TCNException { - TCN tcn = new TCN(); - - Map, Stack>, String> scanned = deepScan(s); - Set, Stack>> keys = scanned.keySet(); - for (DoubleTypedObject, Stack> path : keys) { - deepPut(path.clone(), tcn, scanned.get(path)); - } - for (String key : tcn.map.keys()) { - deepConvert(key, tcn.get(key), tcn); - } - - return tcn; - } - - /** - * Converts stray arrays to TCNArray objects, recursive.
- *