From 96e4d46eb5c8c19e0ecf2d108fe08267842dfe9f Mon Sep 17 00:00:00 2001 From: Lixfel Date: Sat, 1 Oct 2022 12:06:13 +0200 Subject: [PATCH] Bugfixes --- AltAuth.png | Bin 0 -> 77654 bytes README.md | 22 ++++++++++ .../altauth/bukkit/ProtocolInjector.java | 11 ++++- .../bukkit/SessionServiceInjector.java | 38 +++++++++++++----- common/src/de/lixfel/ReflectionUtil.java | 12 +++--- proxy.py | 3 +- 6 files changed, 67 insertions(+), 19 deletions(-) create mode 100644 AltAuth.png diff --git a/AltAuth.png b/AltAuth.png new file mode 100644 index 0000000000000000000000000000000000000000..ecf86737629c09b5d5953b742f3d6be53230d5c1 GIT binary patch literal 77654 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 I@!H@24~yznpa1{> literal 0 HcmV?d00001 diff --git a/README.md b/README.md index 7dba0a6..cf7c930 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,24 @@ # AltAuth +AltAuth is a solution to allow players with Mojang account, (untested) banned accounts and (untested) Multiplayer +disabled accounts to join online mode Minecraft servers depending on client and server support. +This works by redirecting the session server requests to a proxy specified by the server. + +In comparison to the trustless authentication method proposed by Aizistral +https://github.com/Aizistral-Studios/Trustless-Authentication this authentication method enables joining of Mojang +account players, prevents man in the middle attacks (like vanilla authentication) and is compatible to clients without +AltAuth, but requires a trusted third/second party. + +## Usage + +The build/libs/AltAuth-*-all.jar (produced by running `./gradlew build`) is a valid Fabric (client and server 1.19.2), +Bukkit/Spigot/Paper (1.8 - 1.19.2) and BungeeCord/Waterfall mod/plugin. The server needs to be in online mode and +specify the domain or ip address of an AltAuth web proxy. + +Since https is a requirement and the example proxy `proxy.py` not yet supporting https the proxy has to run behind a +https proxy currently. Configuration of the proxy can be done in the first lines of the proxy script. +Banned and multiplayer disabled user support has not been tested yet and is therefore disabled by default. + +## AltAuth Protocol and Proxy behaviour + +![Sequence diagram describing protocol and principle](AltAuth.png "Sequence diagram describing protocol and principle") \ No newline at end of file diff --git a/bukkit/src/de/lixfel/altauth/bukkit/ProtocolInjector.java b/bukkit/src/de/lixfel/altauth/bukkit/ProtocolInjector.java index 6e0400e..d038ea7 100644 --- a/bukkit/src/de/lixfel/altauth/bukkit/ProtocolInjector.java +++ b/bukkit/src/de/lixfel/altauth/bukkit/ProtocolInjector.java @@ -8,6 +8,7 @@ import io.netty.channel.Channel; import io.netty.channel.ChannelDuplexHandler; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelPromise; +import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; @@ -29,7 +30,7 @@ public class ProtocolInjector implements Listener { private static final Class dedicatedPlayerList = ReflectionUtil.getClass("net.minecraft.server.dedicated.DedicatedPlayerList"); private static final FieldWrapper getPlayerList = ReflectionUtil.getField(craftServer, dedicatedPlayerList, 0); private static final Class playerList = ReflectionUtil.getClass("net.minecraft.server.players.PlayerList"); - private static final Class minecraftServer = ReflectionUtil.getClass("net.minecraft.server.MinecraftServer"); + public static final Class minecraftServer = ReflectionUtil.getClass("net.minecraft.server.MinecraftServer"); private static final FieldWrapper getMinecraftServer = ReflectionUtil.getField(playerList, minecraftServer, 0); private static final Class serverConnection = ReflectionUtil.getClass("net.minecraft.server.network.ServerConnection"); private static final FieldWrapper getServerConnection = ReflectionUtil.getField(minecraftServer, serverConnection, 0); @@ -44,6 +45,7 @@ public class ProtocolInjector implements Listener { private final Plugin plugin; private final String handlerName; + private final Object minecraftServerInstance; private final List connections; private boolean closed; @@ -53,7 +55,8 @@ public class ProtocolInjector implements Listener { private ProtocolInjector(final Plugin plugin) { this.plugin = plugin; this.handlerName = "altauth"; - this.connections = getConnections.get(getServerConnection.get(getMinecraftServer.get(getPlayerList.get(plugin.getServer())))); + this.minecraftServerInstance = getMinecraftServer.get(getPlayerList.get(plugin.getServer())); + this.connections = getConnections.get(getServerConnection.get(minecraftServerInstance)); plugin.getServer().getPluginManager().registerEvents(this, plugin); @@ -62,6 +65,10 @@ public class ProtocolInjector implements Listener { } } + public Object minecraftServer() { + return minecraftServerInstance; + } + @EventHandler(priority = EventPriority.LOWEST) public void onPlayerLogin(PlayerLoginEvent e) { if(closed) diff --git a/bukkit/src/de/lixfel/altauth/bukkit/SessionServiceInjector.java b/bukkit/src/de/lixfel/altauth/bukkit/SessionServiceInjector.java index 2161d80..d88b3d0 100644 --- a/bukkit/src/de/lixfel/altauth/bukkit/SessionServiceInjector.java +++ b/bukkit/src/de/lixfel/altauth/bukkit/SessionServiceInjector.java @@ -10,29 +10,47 @@ import java.util.logging.Level; public class SessionServiceInjector { - private static final Class SESSION_SERVICE = ReflectionUtil.getClass("com.mojang.authlib.yggdrasil.YggdrasilMinecraftSessionService"); + private static final Class MINECRAFT_SESSION_SERVICE = ReflectionUtil.getClass("com.mojang.authlib.minecraft.MinecraftSessionService"); + private static final Class YGGDRASIL_SESSION_SERVICE = ReflectionUtil.getClass("com.mojang.authlib.yggdrasil.YggdrasilMinecraftSessionService"); - private static final ReflectionUtil.FieldWrapper JOIN_URL = ReflectionUtil.getField(SESSION_SERVICE, URL.class, "JOIN_URL"); - private static final ReflectionUtil.FieldWrapper CHECK_URL = ReflectionUtil.getField(SESSION_SERVICE, URL.class, "CHECK_URL"); + private static final ReflectionUtil.FieldWrapper JOIN_URL = ReflectionUtil.getField(YGGDRASIL_SESSION_SERVICE, URL.class, 0); + private static final ReflectionUtil.FieldWrapper CHECK_URL = ReflectionUtil.getField(YGGDRASIL_SESSION_SERVICE, URL.class, 1); + private final Object sessionService; private final URL joinUrlBackup; private final URL checkUrlBackup; public SessionServiceInjector(String altAuthServer) { - joinUrlBackup = JOIN_URL.get(null); - checkUrlBackup = CHECK_URL.get(null); - altAuthServer = "https://" + altAuthServer + "/session/minecraft/"; + + if(ReflectionUtil.MINECRAFT_VERSION < 17) { //TODO maybe 16 (untested) + sessionService = null; + } else if (ReflectionUtil.MINECRAFT_VERSION < 19) { + sessionService = ReflectionUtil.getField(ProtocolInjector.minecraftServer, MINECRAFT_SESSION_SERVICE, 0).get( + ProtocolInjector.instance.minecraftServer() + ); + } else { + Class services = ReflectionUtil.getClass("net.minecraft.server.Services"); + sessionService = ReflectionUtil.getField(services, MINECRAFT_SESSION_SERVICE, 0).get( + ReflectionUtil.getField(ProtocolInjector.minecraftServer, services, 0).get( + ProtocolInjector.instance.minecraftServer() + ) + ); + } + + joinUrlBackup = JOIN_URL.get(sessionService); + checkUrlBackup = CHECK_URL.get(sessionService); + try { - JOIN_URL.set(null, new URL(altAuthServer + "join")); - CHECK_URL.set(null, new URL(altAuthServer + "hasJoined")); + JOIN_URL.set(sessionService, new URL(altAuthServer + "join")); + CHECK_URL.set(sessionService, new URL(altAuthServer + "hasJoined")); } catch (MalformedURLException e) { AltAuthBukkit.getInstance().getLogger().log(Level.SEVERE, "Could not create AltAuth URLs", e); } } public void revert() { - JOIN_URL.set(null, joinUrlBackup); - CHECK_URL.set(null, checkUrlBackup); + JOIN_URL.set(sessionService, joinUrlBackup); + CHECK_URL.set(sessionService, checkUrlBackup); } } diff --git a/common/src/de/lixfel/ReflectionUtil.java b/common/src/de/lixfel/ReflectionUtil.java index bc15be9..d422508 100644 --- a/common/src/de/lixfel/ReflectionUtil.java +++ b/common/src/de/lixfel/ReflectionUtil.java @@ -12,19 +12,19 @@ public final class ReflectionUtil { private ReflectionUtil() {} private static final String ORG_BUKKIT_CRAFTBUKKIT; - private static final boolean REPLACE_NET_MINECRAFT; + public static final int MINECRAFT_VERSION; static { String craftbukkitPackage; - boolean legacyNms; + int minecraftVersion; try { craftbukkitPackage = Bukkit.getServer().getClass().getPackage().getName(); - legacyNms = Integer.parseInt(craftbukkitPackage.split("[.](?=[^.]*$)")[1].split("_")[1]) < 17; + minecraftVersion = Integer.parseInt(craftbukkitPackage.split("[.](?=[^.]*$)")[1].split("_")[1]); } catch (NoClassDefFoundError e) { craftbukkitPackage = ""; - legacyNms = false; + minecraftVersion = 0; } ORG_BUKKIT_CRAFTBUKKIT = craftbukkitPackage; - REPLACE_NET_MINECRAFT = legacyNms; + MINECRAFT_VERSION = minecraftVersion; } private static final String LEGACY_NET_MINECRAFT_SERVER = ORG_BUKKIT_CRAFTBUKKIT.replace("org.bukkit.craftbukkit", "net.minecraft.server"); @@ -120,7 +120,7 @@ public final class ReflectionUtil { try { if(name.startsWith("org.bukkit.craftbukkit")) { return Class.forName(ORG_BUKKIT_CRAFTBUKKIT + name.substring(22)); - } else if(REPLACE_NET_MINECRAFT && name.startsWith("net.minecraft")) { + } else if(MINECRAFT_VERSION < 17 && name.startsWith("net.minecraft")) { return Class.forName(LEGACY_NET_MINECRAFT_SERVER + "." + name.split("[.](?=[^.]*$)")[1]); } else { return Class.forName(name); diff --git a/proxy.py b/proxy.py index f88eff1..db11d74 100755 --- a/proxy.py +++ b/proxy.py @@ -22,7 +22,8 @@ bind_to = ('127.0.0.1', 8080) allow_mojang_accounts = True # Should banned microsoft accounts ("UserBannedException") be allowed to join? # Should accounts with disabled multiplayer ("InsufficientPrivilegesException") be allowed to join? -allowed_microsoft_accounts = ("InsufficientPrivilegesException", "UserBannedException") +allowed_microsoft_accounts = () +#allowed_microsoft_accounts = ("InsufficientPrivilegesException", "UserBannedException") def moj_request(url, data=None):