CCBlueX / LiquidBounce

A free mixin-based injection hacked client for Minecraft using the Fabric API
https://liquidbounce.net/
GNU General Public License v3.0
1.42k stars 460 forks source link

[BUG] Cannot add thealtening alt #1633

Closed KidTechnical closed 9 months ago

KidTechnical commented 9 months ago

LiquidBounce Branch

Nextgen

LiquidBounce Build/Version

1.0.0

Operating System

Windows 11

Minecraft Version

1.20.1

Describe the bug

If you go to the alt manager and add a thealtening account token, the game freezes for ten seconds and then doesn't add the alt.

Steps to reproduce

-Go to Alt Manager -Under Altening Login, enter a valid TheAltening account token. -Click on Add -Game will freeze for ten seconds -Game will then unfreeze, but the alt won't be added

Client Log

2023-12-06T20:51:55.692110Z  INFO liquidlauncher::app::gui: [14:51:55] [Render thread/INFO]: View message: [CONSOLE_API/LOG] file:///C:/Users/great/AppData/Roaming/CCBlueX/LiquidLauncher/data/gameDir/nextgen/LiquidBounce/themes/default/altmanager/index.html:209:24: Account List updating...

2023-12-06T20:51:55.695714Z  INFO liquidlauncher::app::gui: [14:51:55] [Render thread/INFO]: View message: [CONSOLE_API/LOG] file:///C:/Users/great/AppData/Roaming/CCBlueX/LiquidLauncher/data/gameDir/nextgen/LiquidBounce/themes/default/altmanager/index.html:248:24: hm1ub-grclc@alt.com

2023-12-06T20:51:55.989182Z  INFO liquidlauncher::app::gui: [14:51:55] [Render thread/INFO]: [MainFrame 8 (file:///C:/Users/great/AppData/Roaming/CCBlueX/LiquidLauncher/data/gameDir/nextgen/LiquidBounce/themes/default/altmanager/index.html)]: The view finished loading

2023-12-06T20:55:08.127380Z  INFO liquidlauncher::app::gui: [14:55:08] [Render thread/INFO]: Environment: authHost='http://authserver.thealtening.com', accountsHost='https://api.mojang.com', sessionHost='http://sessionserver.thealtening.com', servicesHost='https://api.minecraftservices.com', name='THE_ALTENING'

2023-12-06T20:55:08.140737Z  INFO liquidlauncher::app::gui: [14:55:08] [Render thread/INFO]: Environment: THE_ALTENING

2023-12-06T20:55:08.143868Z  INFO liquidlauncher::app::gui: [14:55:08] [Render thread/INFO]: Logging in with username & password

2023-12-06T20:55:19.081314Z DEBUG liquidlauncher::minecraft::java::runtime: Process exited with code: -805306369
2023-12-06T20:55:19.085794Z ERROR liquidlauncher::app::gui: Failed to launch client: Process exited with non-zero code: -805306369

Screenshots

No response

Ell1ott commented 9 months ago

I think this was "fixed" by https://github.com/CCBlueX/LiquidBounce/commit/5edbe850c8938af1662c2fdf05d99a49d17e38e3

1zun4 commented 9 months ago

No, it was not. It fixed that the user was not getting any response, but in this case it is the Altening authentication servers being offline

1zun4 commented 9 months ago

There is nothing we can do (i think).

michael-pfister commented 9 months ago

Facing the same problem here. Here's a log from a user perspective using LiquidLauncher:

2023-12-16T22:33:31.297486Z  INFO liquidlauncher::app::gui: [23:33:31] [Render thread/ERROR]: Failed to login into altening account (for add-process)
java.net.SocketTimeoutException: Read timed out
    at sun.nio.ch.NioSocketImpl.timedRead(Unknown Source) ~[?:?]
    at sun.nio.ch.NioSocketImpl.implRead(Unknown Source) ~[?:?]
    at sun.nio.ch.NioSocketImpl.read(Unknown Source) ~[?:?]
    at sun.nio.ch.NioSocketImpl$1.read(Unknown Source) ~[?:?]
    at java.net.Socket$SocketInputStream.read(Unknown Source) ~[?:?]
    at java.io.BufferedInputStream.fill(Unknown Source) ~[?:?]
    at java.io.BufferedInputStream.read1(Unknown Source) ~[?:?]
    at java.io.BufferedInputStream.read(Unknown Source) ~[?:?]
    at sun.net.www.http.HttpClient.parseHTTPHeader(Unknown Source) ~[?:?]
    at sun.net.www.http.HttpClient.parseHTTP(Unknown Source) ~[?:?]
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(Unknown Source) ~[?:?]
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source) ~[?:?]
    at java.net.HttpURLConnection.getResponseCode(Unknown Source) ~[?:?]
    at net.ccbluex.liqui
2023-12-16T22:33:31.297583Z  INFO liquidlauncher::app::gui: dbounce.authlib.utils.HttpUtils.request(HttpUtils.kt:65) ~[LiquidBounce.jar:?]
    at net.ccbluex.liquidbounce.authlib.utils.HttpUtils.request$default(HttpUtils.kt:59) ~[LiquidBounce.jar:?]
    at net.ccbluex.liquidbounce.authlib.utils.HttpUtils.post(HttpUtils.kt:79) ~[LiquidBounce.jar:?]
    at net.ccbluex.liquidbounce.authlib.yggdrasil.YggdrasilUserAuthentication.authenticate(YggdrasilUserAuthentication.kt:85) ~[LiquidBounce.jar:?]
    at net.ccbluex.liquidbounce.authlib.account.AlteningAccount.refresh(AlteningAccount.kt:87) ~[LiquidBounce.jar:?]
    at net.ccbluex.liquidbounce.authlib.account.AlteningAccount$Companion.fromToken(AlteningAccount.kt:105) ~[LiquidBounce.jar:?]
    at net.ccbluex.liquidbounce.features.misc.AccountManager.newAlteningAccount(AccountManager.kt:204) ~[LiquidBounce.jar:?]
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?]
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:?]
    at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Sou
2023-12-16T22:33:31.297630Z  INFO liquidlauncher::app::gui: rce) ~[?:?]
    at java.lang.reflect.Method.invoke(Unknown Source) ~[?:?]
    at com.labymedia.ultralight.databind.call.property.ReflectivePropertyCaller.callMethod(ReflectivePropertyCaller.java:40) ~[LiquidBounce.jar:?]
    at com.labymedia.ultralight.databind.DatabindJavascriptMethodHandler.onCallAsFunction(DatabindJavascriptMethodHandler.java:123) ~[LiquidBounce.jar:?]
    at com.labymedia.ultralight.UltralightView.fireMouseEvent(Native Method) ~[LiquidBounce.jar:?]
    at net.ccbluex.liquidbounce.base.ultralight.ViewOverlay.fireMouseEvent(ViewOverlay.kt:176) ~[LiquidBounce.jar:?]
    at net.ccbluex.liquidbounce.base.ultralight.impl.glfw.GlfwInputAdapter.mouseButtonCallback(GlfwInputAdapter.kt:149) ~[LiquidBounce.jar:?]
    at net.ccbluex.liquidbounce.base.ultralight.hooks.UltralightIntegrationHook$mouseButtonHandler$1.invoke(UltralightIntegrationHook.kt:55) ~[LiquidBounce.jar:?]
    at net.ccbluex.liquidbounce.base.ultralight.hooks.UltralightIntegrationHook$mouseButtonHandler$1.invoke(UltralightIntegrationHook.kt:54) ~[LiquidBou
2023-12-16T22:33:31.297643Z  INFO liquidlauncher::app::gui: nce.jar:?]
    at net.ccbluex.liquidbounce.event.EventManager.callEvent(EventManager.kt:155) ~[LiquidBounce.jar:?]
    at net.minecraft.class_312.handler$bll000$liquidbounce$hookMouseButton(class_312.java:1544) ~[client-intermediary.jar:?]
    at net.minecraft.class_312.method_1601(class_312.java:86) ~[client-intermediary.jar:?]
    at net.minecraft.class_312.method_22686(class_312.java:180) ~[client-intermediary.jar:?]
    at net.minecraft.class_1255.execute(class_1255.java:102) ~[client-intermediary.jar:?]
    at net.minecraft.class_312.redirect$bbk001$viafabricplus$storeEvent(class_312.java:1055) ~[client-intermediary.jar:?]
    at net.minecraft.class_312.method_22684(class_312.java:180) ~[client-intermediary.jar:?]
    at org.lwjgl.glfw.GLFWMouseButtonCallbackI.callback(GLFWMouseButtonCallbackI.java:43) ~[lwjgl-glfw-3.3.2.jar:?]
    at org.lwjgl.system.JNI.invokeV(Native Method) ~[lwjgl-3.3.2.jar:?]
    at org.lwjgl.glfw.GLFW.glfwWaitEventsTimeout(GLFW.java:3509) ~[lwjgl-glfw-3.3.2.jar:?]
    at com.mojang.blaze3d.systems.RenderSystem.li
2023-12-16T22:33:31.297678Z  INFO liquidlauncher::app::gui: mitDisplayFPS(RenderSystem.java:238) ~[client-intermediary.jar:?]
    at net.minecraft.class_310.method_1523(class_310.java:1352) ~[client-intermediary.jar:?]
    at net.minecraft.class_310.method_1514(class_310.java:888) ~[client-intermediary.jar:?]
    at net.minecraft.client.main.Main.main(Main.java:265) ~[fabric-loader-0.15.1-1.20.4.jar:?]
    at net.fabricmc.loader.impl.game.minecraft.MinecraftGameProvider.launch(MinecraftGameProvider.java:470) ~[fabric-loader-0.15.1.jar:?]
    at net.fabricmc.loader.impl.launch.knot.Knot.launch(Knot.java:74) ~[fabric-loader-0.15.1.jar:?]
    at net.fabricmc.loader.impl.launch.knot.KnotClient.main(KnotClient.java:23) ~[fabric-loader-0.15.1.jar:?]

2023-12-16T22:33:31.298587Z  INFO liquidlauncher::app::gui: [23:33:31] [Render thread/INFO]: View message: [CONSOLE_API/LOG] file:////home/michael/.local/share/liquidlauncher/gameDir/nextgen/LiquidBounce/themes/default/altmanager/index.html:200:24: Read timed out

When I try to login into an ALT using an "Account Token" from the TheAltening, the game freezes for a few seconds, then proceeds to give me the green "Account added!" checkmark without actually adding the account to the drop-down list.

I think that this should be a bug of major concerning since there is no safe way to prevent getting banned without the use of ALT Accounts alongside different IP Addresses, therefore there would be no reason to use the hack client either.

michael-pfister commented 9 months ago

I don't know the exact issue here but from what I have read this seems to be a problem originating form TheAltening. What if we just used a different provider?

1zun4 commented 9 months ago

Yes they already know about this issue, but so far I have not received any response when this is being fixed...?

michael-pfister commented 9 months ago

So I was trying to check what authentication servers we are posting the token to, to see if maybe those endpoints were outdated. I was thinking that if TheAltening authentication servers were truly down, then how come I can still use their app to authenticate a token? Are they not using the same API?

My search ended in src/main/kotlin/net/ccbluex/liquidbounce/features/misc/AccountManager.kt where some library is used to get the relevant information from theAltening.

import net.ccbluex.liquidbounce.authlib.account.AlteningAccount

@RequiredByScript
@JvmName("newAlteningAccount")
fun newAlteningAccount(accountToken: String) = runCatching {
        accounts += AlteningAccount.fromToken(accountToken)

        // Store configurable
        ConfigSystem.storeConfigurable(this@AccountManager)
    }.onFailure {
        logger.error("Failed to login into altening account (for add-process)", it)
        EventManager.callEvent(AltManagerUpdateEvent(false, it.message ?: "Unknown error"))
    }

However I am kind of new to this and can't seem to find the library anywhere in the source code. Could someone guide me to the right file here? I was also trying to see if I could replicate the same feature with EasyMC, they seem to have a straightforward approach for this type of stuff.

1zun4 commented 9 months ago

The library you are referring to is our own mc-authlib library, which not only takes the token when an account is created, but also logs in to the account.

https://github.com/CCBlueX/mc-authlib/blob/68d4ac572bfcc41ab765a3fe50dab39f89e6ca94/src/main/kotlin/net/ccbluex/liquidbounce/authlib/account/AlteningAccount.kt#L102-L108

Since the auth server does not respond within the timeout, it will throw an error and the add process will fail. Authentication is needed to make sure the token is valid and to get the correct username and UUID for us to see.

michael-pfister commented 9 months ago

Here's some network traffic I've captured where 15.235.51.175 is the authserver owned by TheAltening and 51.68.162.194 is the LiquidBounce API.

2023-12-17 16:43:58 192.168.0.100   15.235.51.175   >   GET authserver.thealtening.com  /   HTTP/1.1    -   -
2023-12-17 16:43:58 15.235.51.175   192.168.0.100   <   -   -   -   HTTP/1.1    200 OK
2023-12-17 16:44:33 192.168.0.100   51.68.162.194   >   GET capes.liquidbounce.net  /api/v1/cape/carriers   HTTP/1.1    -   -
2023-12-17 16:44:33 51.68.162.194   192.168.0.100   <   -   -   -   HTTP/1.1    200 OK
2023-12-17 16:45:02 192.168.0.100   15.235.51.175   >   POST    authserver.thealtening.com  /authenticate   HTTP/1.1    -   -
2023-12-17 16:46:08 192.168.0.100   15.235.51.175   >   POST    authserver.thealtening.com  /authenticate   HTTP/1.1    -   -

A request to / is working fine but a request to /authenticate won't get a response and will therefore time out as described by @1zun4. Unfortunately, at least on Google, there is no documentation of their API to be found. All I got was a description with the information "Alternative authentication server.".

So yes, it is very likely that they are using a different server for their own tool to authenticate. They made this library which uses the same endpoint but it seems to be dead, last change was 2 years ago, also all issues are ignored. The server itself is vulnerable running nginx 1.18.0 (an open-source software for web serving from 4 years ago) but that's besides the point.

They probably won't fix something that isn't being used, though we could contact them for further insight. I see two options here:

  1. Find their primary authentication server through network analysis on Windows and pray that it's accessible for us
  2. Rework some of the base idea behind the ALT Manager all together

IMO being able to select some mods in the LiquidLauncher that allow you to add an ALT Manager from a service of a users choice (ex. EasyMC mod) might serve a better UX. Right now we're relying on only one provider that doesn't have a mod or library which means that we have to hardcode and maintain everything ourselves.

Pros Cons
Users are able to use an ALT Provider of their choice less straighforward approach, which might throw off newbies
Contributors wouldn't have to maintain or hardcode anything regarding something that will always change with time Users will be forced to use the minecraft version their ALT mod is written for (which might not even be compatible)
A more reliable way of managing ALTs, a situation like the one we're currently in wouldn't happen

There might even be a better solution to this, I'm in no way a minecraft expert so the one I came up with is kind of janky.

michael-pfister commented 9 months ago

the authentication servers are back

1zun4 commented 9 months ago

Good