From b0587448aea79e096ba8a3aa9e78b697b8bc3bc4 Mon Sep 17 00:00:00 2001 From: EpicBirb <68750348+EpicBirb@users.noreply.github.com> Date: Fri, 8 Dec 2023 20:48:43 -0500 Subject: [PATCH 1/2] Proxing Connections from YggdrasilAuthenticationServiceySaint/master Proxies connection made by com.mojang.authlib by targeting MinecraftClient.authenticationService --- .../proxyserver/mixin/YggdrasilInjection.java | 46 +++++++++++++++++++ .../proxiedObjects/SocksProxy.java | 24 ++++++++++ src/main/resources/proxyserver.mixins.json | 3 +- 3 files changed, 72 insertions(+), 1 deletion(-) create mode 100644 src/main/java/ru/fiw/proxyserver/mixin/YggdrasilInjection.java create mode 100644 src/main/java/ru/fiw/proxyserver/proxiedObjects/SocksProxy.java diff --git a/src/main/java/ru/fiw/proxyserver/mixin/YggdrasilInjection.java b/src/main/java/ru/fiw/proxyserver/mixin/YggdrasilInjection.java new file mode 100644 index 0000000..22110ba --- /dev/null +++ b/src/main/java/ru/fiw/proxyserver/mixin/YggdrasilInjection.java @@ -0,0 +1,46 @@ +package ru.fiw.proxyserver.mixin; + +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Mutable; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +import com.mojang.authlib.yggdrasil.YggdrasilAuthenticationService; + +import net.minecraft.client.MinecraftClient; +import ru.fiw.proxyserver.Config; +import ru.fiw.proxyserver.ProxyServer; +import ru.fiw.proxyserver.proxiedObjects.SocksProxy; + +@Mixin(MinecraftClient.class) +public class AuthService { + @Final + @Mutable + @Shadow + private YggdrasilAuthenticationService authenticationService; + + @Inject(method = "", at = @At("RETURN")) + public void initInject(CallbackInfo info) { + String playerName = MinecraftClient.getInstance().getSession().getProfile().getName(); + if (!playerName.equals(Config.lastPlayerName)) { + Config.lastPlayerName = playerName; + if (Config.accounts.containsKey(playerName)) { + ProxyServer.proxy = Config.accounts.get(playerName); + } else { + if (Config.accounts.containsKey("")) { + ProxyServer.proxy = Config.accounts.get(""); + } + } + } + + java.net.Authenticator.setDefault(new java.net.Authenticator() { + protected java.net.PasswordAuthentication getPasswordAuthentication() { + return new java.net.PasswordAuthentication(ProxyServer.proxy.username, ProxyServer.proxy.password.toCharArray()); + } + }); + this.authenticationService = new YggdrasilAuthenticationService(new SocksProxy()); + } +} diff --git a/src/main/java/ru/fiw/proxyserver/proxiedObjects/SocksProxy.java b/src/main/java/ru/fiw/proxyserver/proxiedObjects/SocksProxy.java new file mode 100644 index 0000000..689fd39 --- /dev/null +++ b/src/main/java/ru/fiw/proxyserver/proxiedObjects/SocksProxy.java @@ -0,0 +1,24 @@ +package ru.fiw.proxyserver.proxiedObjects; + +import java.net.Proxy; +import java.net.SocketAddress; +import java.net.InetSocketAddress; + +public class SocksProxy extends Proxy { + public SocksProxy() { + super(Proxy.Type.HTTP, new InetSocketAddress(0)); + } + + @Override + public Type type() { + return ru.fiw.proxyserver.ProxyServer.proxyEnabled == true ? Proxy.Type.SOCKS : Proxy.Type.DIRECT; + } + + @Override + public SocketAddress address() { + return new InetSocketAddress( + ru.fiw.proxyserver.ProxyServer.proxy.getIp(), + ru.fiw.proxyserver.ProxyServer.proxy.getPort() + ); + } +} diff --git a/src/main/resources/proxyserver.mixins.json b/src/main/resources/proxyserver.mixins.json index 73c323d..1c2f5e9 100644 --- a/src/main/resources/proxyserver.mixins.json +++ b/src/main/resources/proxyserver.mixins.json @@ -8,7 +8,8 @@ "client": [ "ClientConnectionInit", "MultiplayerScreenOpen", - "ScreenAccessor" + "ScreenAccessor", + "YggdrasilInjection" ], "injectors": { "defaultRequire": 1 From 69ab9113aa8fc59b75edeab89cc78927027cf637 Mon Sep 17 00:00:00 2001 From: EpicBirb <68750348+EpicBirb@users.noreply.github.com> Date: Fri, 8 Dec 2023 20:50:15 -0500 Subject: [PATCH 2/2] fix --- src/main/java/ru/fiw/proxyserver/mixin/YggdrasilInjection.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/ru/fiw/proxyserver/mixin/YggdrasilInjection.java b/src/main/java/ru/fiw/proxyserver/mixin/YggdrasilInjection.java index 22110ba..36667cb 100644 --- a/src/main/java/ru/fiw/proxyserver/mixin/YggdrasilInjection.java +++ b/src/main/java/ru/fiw/proxyserver/mixin/YggdrasilInjection.java @@ -16,7 +16,7 @@ import ru.fiw.proxyserver.proxiedObjects.SocksProxy; @Mixin(MinecraftClient.class) -public class AuthService { +public class YggdrasilInjection { @Final @Mutable @Shadow