diff --git a/protocol b/protocol index 9a90fd0..b0b425b 160000 --- a/protocol +++ b/protocol @@ -1 +1 @@ -Subproject commit 9a90fd087a9164ecbd066c1eaa2209a61b251157 +Subproject commit b0b425bcca4e2f41e2dabda3cdcd22c3fb088668 diff --git a/src/main/java/org/cloudburstmc/proxypass/ProxyPass.java b/src/main/java/org/cloudburstmc/proxypass/ProxyPass.java index f646d99..5ffd7e0 100644 --- a/src/main/java/org/cloudburstmc/proxypass/ProxyPass.java +++ b/src/main/java/org/cloudburstmc/proxypass/ProxyPass.java @@ -46,7 +46,7 @@ import org.cloudburstmc.protocol.bedrock.BedrockPong; import org.cloudburstmc.protocol.bedrock.codec.BedrockCodec; import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; -import org.cloudburstmc.protocol.bedrock.codec.v924.Bedrock_v924; +import org.cloudburstmc.protocol.bedrock.codec.v944.Bedrock_v944; import org.cloudburstmc.protocol.bedrock.data.EncodingSettings; import org.cloudburstmc.protocol.bedrock.data.definitions.BlockDefinition; import org.cloudburstmc.protocol.bedrock.netty.initializer.BedrockChannelInitializer; @@ -96,11 +96,11 @@ public class ProxyPass { public static final YAMLMapper YAML_MAPPER = (YAMLMapper) new YAMLMapper().disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES); public static final String MINECRAFT_VERSION; - public static final BedrockCodecHelper HELPER = Bedrock_v924.CODEC.createHelper(); - public static final BedrockCodec CODEC = Bedrock_v924.CODEC + public static final BedrockCodecHelper HELPER = Bedrock_v944.CODEC.createHelper(); + public static final BedrockCodec CODEC = Bedrock_v944.CODEC .toBuilder() - .protocolVersion(924) - .minecraftVersion("1.26.0") + .protocolVersion(944) + .minecraftVersion("1.26.10") .helper(() -> HELPER).build(); public static final int PROTOCOL_VERSION = CODEC.getProtocolVersion(); diff --git a/src/main/java/org/cloudburstmc/proxypass/network/bedrock/util/ForgeryUtils.java b/src/main/java/org/cloudburstmc/proxypass/network/bedrock/util/ForgeryUtils.java index 3583fd2..5151f67 100644 --- a/src/main/java/org/cloudburstmc/proxypass/network/bedrock/util/ForgeryUtils.java +++ b/src/main/java/org/cloudburstmc/proxypass/network/bedrock/util/ForgeryUtils.java @@ -77,6 +77,10 @@ public static String forgeOfflineAuthData(KeyPair pair, AuthData authData) { } public static AuthPayload forgeOnlineAuthData(BedrockAuthManager authManager, ECPublicKey mojangPublicKey) throws InvalidJwtException, JoseException { + if (ProxyPass.CODEC.getProtocolVersion() > 924) { + return new DualPayload(List.of(".."), authManager.getMinecraftMultiplayerToken().getCached().getToken(), AuthType.FULL); + } + MinecraftCertificateChain mcChain = authManager.getMinecraftCertificateChain().getCached(); KeyPair sessionKeyPair = authManager.getSessionKeyPair(); String publicBase64Key = Base64.getEncoder().encodeToString(sessionKeyPair.getPublic().getEncoded()); @@ -134,7 +138,10 @@ public static String forgeOnlineSkinData(Account account, JSONObject skinData, S HashMap overrideData = new HashMap(); overrideData.put("DeviceId", account.authManager().getDeviceId().toString().replace("-", "")); - overrideData.put("DeviceOS", 1); // Android per MinecraftAuth 4.0 + if (ProxyPass.CODEC.getProtocolVersion() < 944) { + // Chain is no longer sent in v944 and above, so it should no longer be possible for a server to detect that auth was from android + overrideData.put("DeviceOS", 1); // Android per MinecraftAuth 4.0 + } overrideData.put("ThirdPartyName", account.authManager().getMinecraftMultiplayerToken().getCached().getDisplayName()); switch (serverAddress) {