From 54c7526a66a6bb3397e62c32794ffc42e3da061f Mon Sep 17 00:00:00 2001 From: Gravit Date: Sun, 7 Apr 2019 15:33:57 +0700 Subject: [PATCH 1/3] =?UTF-8?q?[FIX]=20=D0=A3=D0=B4=D0=B0=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B0=20sm=20=D1=87=D0=B0=D1=81=D1=82=D1=8C=20LauncherAg?= =?UTF-8?q?ent?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ru/gravit/launcher/LauncherAgent.java | 108 ------------------ 1 file changed, 108 deletions(-) diff --git a/Launcher/src/main/java/ru/gravit/launcher/LauncherAgent.java b/Launcher/src/main/java/ru/gravit/launcher/LauncherAgent.java index 14117c8e..877f018f 100644 --- a/Launcher/src/main/java/ru/gravit/launcher/LauncherAgent.java +++ b/Launcher/src/main/java/ru/gravit/launcher/LauncherAgent.java @@ -43,117 +43,9 @@ public static void premain(String agentArgument, Instrumentation instrumentation if (trimmedArg.contains("r")) rt = false; } } - if (rt || pb) replaceClasses(pb, rt); } public static boolean isStarted() { return isAgentStarted; } - - /** - * @author https://github.com/Konloch/JVM-Sandbox - * Replaces the Runtime class via instrumentation, transforms the class via ASM - */ - private static void replaceClasses(boolean pb, boolean rt) { - for(Class c : inst.getAllLoadedClasses()) { - if(rt && c.getName().equals("java.lang.Runtime")) { - try { - inst.redefineClasses(new java.lang.instrument.ClassDefinition(java.lang.Runtime.class, transformClass(c.getName(), getClassFile(c)))); - } catch(Exception e) { - e.printStackTrace(); - } - } - if(pb && c.getName().equals("java.lang.ProcessBuilder")) { - try { - inst.redefineClasses(new java.lang.instrument.ClassDefinition(java.lang.ProcessBuilder.class, transformClass(c.getName(), getClassFile(c)))); - } catch(Exception e) { - e.printStackTrace(); - } - } - if(c.getName().equals("java.awt.Robot")) { - try { - inst.redefineClasses(new java.lang.instrument.ClassDefinition(java.lang.ProcessBuilder.class, transformClass(c.getName(), getClassFile(c)))); - } catch(Exception e) { - e.printStackTrace(); - } - } - } - } - - /** - * @author https://github.com/Konloch/JVM-Sandbox - * Use ASM to modify the byte array - */ - private static byte[] transformClass(String className, byte[] classBytes) { - if (className.equals("java.lang.Runtime")) { - ClassReader cr=new ClassReader(classBytes); - ClassNode cn=new ClassNode(); - cr.accept(cn,ClassReader.EXPAND_FRAMES); - - for (Object o : cn.methods.toArray()) { - MethodNode m = (MethodNode) o; - if(m.name.equals("exec")) { - m.instructions.insert(new InsnNode(ARETURN)); - m.instructions.insert(new InsnNode(ACONST_NULL)); - } - } - ClassWriter cw=new ClassWriter(ClassWriter.COMPUTE_FRAMES | ClassWriter.COMPUTE_MAXS); - cn.accept(cw); - return cw.toByteArray(); - } else if (className.equals("java.lang.ProcessBuilder")) { - ClassReader cr=new ClassReader(classBytes); - ClassNode cn=new ClassNode(); - cr.accept(cn,ClassReader.EXPAND_FRAMES); - - for (Object o : cn.methods.toArray()) { - MethodNode m = (MethodNode) o; - if(m.name.equals("start")) { - m.instructions.insert(new InsnNode(ARETURN)); - m.instructions.insert(new InsnNode(ACONST_NULL)); - } - } - ClassWriter cw=new ClassWriter(ClassWriter.COMPUTE_FRAMES | ClassWriter.COMPUTE_MAXS); - cn.accept(cw); - return cw.toByteArray(); - } else if (className.equals("java.awt.Robot")) { - ClassReader cr=new ClassReader(classBytes); - ClassNode cn=new ClassNode(); - cr.accept(cn,ClassReader.EXPAND_FRAMES); - - for (Object o : cn.methods.toArray()) { - MethodNode m = (MethodNode) o; - if( m.name.equals("createScreenCapture") || m.name.equals("getPixelColor") || - m.name.equals("keyPress") || m.name.equals("keyRelease") || - m.name.equals("mouseMove") || m.name.equals("mousePress") || - m.name.equals("mouseWheel")) - { - m.instructions.insert(new InsnNode(ARETURN)); - m.instructions.insert(new InsnNode(ACONST_NULL)); - } - } - ClassWriter cw=new ClassWriter(ClassWriter.COMPUTE_FRAMES | ClassWriter.COMPUTE_MAXS); - cn.accept(cw); - return cw.toByteArray(); - } - return classBytes; - } - - /** - * @author https://github.com/Konloch/JVM-Sandbox - * Do not remove this method. Do not to cause classloading! - * Grab the byte array from the loaded Class object - * @param clazz - * @return array, respending this class in bytecode. - * @throws IOException - */ - private static byte[] getClassFile(Class clazz) throws IOException { - InputStream is = clazz.getResourceAsStream( "/" + clazz.getName().replace('.', '/') + ".class"); - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - int r = 0; - byte[] buffer = new byte[8192]; - while((r=is.read(buffer))>=0) { - baos.write(buffer, 0, r); - } - return baos.toByteArray(); - } } From a540bdcf4839337176bb491ecda92320b36d9cb6 Mon Sep 17 00:00:00 2001 From: Gravit Date: Sun, 7 Apr 2019 16:55:52 +0700 Subject: [PATCH 2/3] =?UTF-8?q?[FIX]=20=D0=A4=D0=B8=D0=BA=D1=81=20=D0=B1?= =?UTF-8?q?=D0=B0=D0=B3=D0=B0=20=D1=81=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BA?= =?UTF-8?q?=D0=BE=D0=B9=20=D0=BF=D1=80=D0=B8=20=D0=B2=D0=BE=D1=81=D1=81?= =?UTF-8?q?=D1=82=D0=B0=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B8=20?= =?UTF-8?q?=D1=81=D0=B5=D1=81=D1=81=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../json/profile/BatchProfileByUsername.java | 9 ++++- .../json/profile/ProfileByUUIDResponse.java | 8 +++- .../json/profile/ProfileByUsername.java | 9 ++++- .../launcher/client/ClientLauncher.java | 37 +++++++++---------- 4 files changed, 40 insertions(+), 23 deletions(-) diff --git a/LaunchServer/src/main/java/ru/gravit/launchserver/websocket/json/profile/BatchProfileByUsername.java b/LaunchServer/src/main/java/ru/gravit/launchserver/websocket/json/profile/BatchProfileByUsername.java index 7b22e4d2..2084920d 100644 --- a/LaunchServer/src/main/java/ru/gravit/launchserver/websocket/json/profile/BatchProfileByUsername.java +++ b/LaunchServer/src/main/java/ru/gravit/launchserver/websocket/json/profile/BatchProfileByUsername.java @@ -7,6 +7,7 @@ import ru.gravit.launchserver.socket.Client; import ru.gravit.launchserver.websocket.WebSocketService; import ru.gravit.launchserver.websocket.json.JsonResponseInterface; +import ru.gravit.utils.helper.LogHelper; import java.util.UUID; @@ -28,7 +29,13 @@ public void execute(WebSocketService service, ChannelHandlerContext ctx, Client BatchProfileByUsernameRequestEvent result = new BatchProfileByUsernameRequestEvent(); result.playerProfiles = new PlayerProfile[list.length]; for (int i = 0; i < list.length; ++i) { - UUID uuid = client.auth.handler.usernameToUUID(list[i].username); + UUID uuid; + if(client.auth == null) + { + LogHelper.warning("Client auth is null. Using default."); + uuid = LaunchServer.server.config.getAuthProviderPair().handler.usernameToUUID(list[i].username); + } + else uuid = client.auth.handler.usernameToUUID(list[i].username); result.playerProfiles[i] = ProfileByUUIDResponse.getProfile(LaunchServer.server, uuid, list[i].username, list[i].client, client.auth.textureProvider); } service.sendObject(ctx, result); diff --git a/LaunchServer/src/main/java/ru/gravit/launchserver/websocket/json/profile/ProfileByUUIDResponse.java b/LaunchServer/src/main/java/ru/gravit/launchserver/websocket/json/profile/ProfileByUUIDResponse.java index 5b9a4a44..b8daef3d 100644 --- a/LaunchServer/src/main/java/ru/gravit/launchserver/websocket/json/profile/ProfileByUUIDResponse.java +++ b/LaunchServer/src/main/java/ru/gravit/launchserver/websocket/json/profile/ProfileByUUIDResponse.java @@ -48,7 +48,13 @@ public String getType() { @Override public void execute(WebSocketService service, ChannelHandlerContext ctx, Client client) throws Exception { - String username = client.auth.handler.uuidToUsername(uuid); + String username; + if(client.auth == null) + { + LogHelper.warning("Client auth is null. Using default."); + username = LaunchServer.server.config.getAuthProviderPair().handler.uuidToUsername(uuid); + } + else username = client.auth.handler.uuidToUsername(uuid); service.sendObject(ctx, new ProfileByUUIDRequestEvent(getProfile(LaunchServer.server, uuid, username, this.client, client.auth.textureProvider))); } } diff --git a/LaunchServer/src/main/java/ru/gravit/launchserver/websocket/json/profile/ProfileByUsername.java b/LaunchServer/src/main/java/ru/gravit/launchserver/websocket/json/profile/ProfileByUsername.java index ea9a8f96..d4fb4b43 100644 --- a/LaunchServer/src/main/java/ru/gravit/launchserver/websocket/json/profile/ProfileByUsername.java +++ b/LaunchServer/src/main/java/ru/gravit/launchserver/websocket/json/profile/ProfileByUsername.java @@ -6,6 +6,7 @@ import ru.gravit.launchserver.socket.Client; import ru.gravit.launchserver.websocket.WebSocketService; import ru.gravit.launchserver.websocket.json.JsonResponseInterface; +import ru.gravit.utils.helper.LogHelper; import java.util.UUID; @@ -22,7 +23,13 @@ public String getType() { @Override public void execute(WebSocketService service, ChannelHandlerContext ctx, Client client) throws Exception { - UUID uuid = client.auth.handler.usernameToUUID(username); + UUID uuid; + if(client.auth == null) + { + LogHelper.warning("Client auth is null. Using default."); + uuid = LaunchServer.server.config.getAuthProviderPair().handler.usernameToUUID(username); + } + else uuid = client.auth.handler.usernameToUUID(username); service.sendObject(ctx, new ProfileByUsernameRequestEvent(getProfile(LaunchServer.server, uuid, username, this.client, client.auth.textureProvider))); } } diff --git a/Launcher/src/main/java/ru/gravit/launcher/client/ClientLauncher.java b/Launcher/src/main/java/ru/gravit/launcher/client/ClientLauncher.java index 1f9ab3e3..62f8339c 100644 --- a/Launcher/src/main/java/ru/gravit/launcher/client/ClientLauncher.java +++ b/Launcher/src/main/java/ru/gravit/launcher/client/ClientLauncher.java @@ -468,27 +468,24 @@ public static void main(String... args) throws Throwable { // Start client with WatchService monitoring boolean digest = !profile.isUpdateFastCheck(); LogHelper.debug("Restore sessions"); - if(Launcher.getConfig().isNettyEnabled) + RestoreSessionRequest request = new RestoreSessionRequest(Request.getSession()); + request.request(); + LegacyRequestBridge.service.reconnectCallback = () -> { - RestoreSessionRequest request = new RestoreSessionRequest(Request.getSession()); - request.request(); - LegacyRequestBridge.service.reconnectCallback = () -> - { - LogHelper.debug("WebSocket connect closed. Try reconnect"); - try { - if (!LegacyRequestBridge.service.reconnectBlocking()) LogHelper.error("Error connecting"); - LogHelper.debug("Connect to %s", Launcher.getConfig().address); - } catch (InterruptedException e) { - e.printStackTrace(); - } - try { - RestoreSessionRequest request1 = new RestoreSessionRequest(Request.getSession()); - request1.request(); - } catch (Exception e) { - LogHelper.error(e); - } - }; - } + LogHelper.debug("WebSocket connect closed. Try reconnect"); + try { + if (!LegacyRequestBridge.service.reconnectBlocking()) LogHelper.error("Error connecting"); + LogHelper.debug("Connect to %s", Launcher.getConfig().address); + } catch (InterruptedException e) { + e.printStackTrace(); + } + try { + RestoreSessionRequest request1 = new RestoreSessionRequest(Request.getSession()); + request1.request(); + } catch (Exception e) { + LogHelper.error(e); + } + }; LogHelper.debug("Starting JVM and client WatchService"); FileNameMatcher assetMatcher = profile.getAssetUpdateMatcher(); FileNameMatcher clientMatcher = profile.getClientUpdateMatcher(); From cfe6c6c2acbd7c17829da061a28bf3bc279bd01a Mon Sep 17 00:00:00 2001 From: Gravit Date: Sun, 7 Apr 2019 21:09:41 +0700 Subject: [PATCH 3/3] =?UTF-8?q?[FIX]=20=D0=B0=D0=B2=D1=82=D0=BE=D0=BC?= =?UTF-8?q?=D0=B5=D1=82=D0=B8=D1=87=D0=B5=D1=81=D0=BA=D0=BE=D0=B5=20=D0=BA?= =?UTF-8?q?=D0=BE=D0=BF=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20?= =?UTF-8?q?jfoenix=20=D0=B2=20launcher-libraries?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Launcher/build.gradle | 1 + 1 file changed, 1 insertion(+) diff --git a/Launcher/build.gradle b/Launcher/build.gradle index 83d594fd..37d84cdb 100644 --- a/Launcher/build.gradle +++ b/Launcher/build.gradle @@ -29,6 +29,7 @@ pack project(':LauncherAPI') // Not error on obf. bundle 'com.github.oshi:oshi-core:3.13.0' compileOnly 'org.ow2.asm:asm-all:5.0.3' + bundle 'com.jfoenix:jfoenix:8.0.8' } task genRuntimeJS(type: Zip) {