mirror of
https://github.com/GravitLauncher/Launcher
synced 2024-12-23 00:51:01 +03:00
[FEATURE] Update guard interface
This commit is contained in:
parent
144b15701b
commit
8e1cf303ac
10 changed files with 47 additions and 255 deletions
|
@ -4,7 +4,10 @@
|
||||||
import pro.gravit.launcher.client.events.ClientEngineInitPhase;
|
import pro.gravit.launcher.client.events.ClientEngineInitPhase;
|
||||||
import pro.gravit.launcher.client.events.ClientExitPhase;
|
import pro.gravit.launcher.client.events.ClientExitPhase;
|
||||||
import pro.gravit.launcher.client.events.ClientPreGuiPhase;
|
import pro.gravit.launcher.client.events.ClientPreGuiPhase;
|
||||||
|
import pro.gravit.launcher.guard.LauncherGuardInterface;
|
||||||
import pro.gravit.launcher.guard.LauncherGuardManager;
|
import pro.gravit.launcher.guard.LauncherGuardManager;
|
||||||
|
import pro.gravit.launcher.guard.LauncherNoGuard;
|
||||||
|
import pro.gravit.launcher.guard.LauncherWrapperGuard;
|
||||||
import pro.gravit.launcher.gui.NoRuntimeProvider;
|
import pro.gravit.launcher.gui.NoRuntimeProvider;
|
||||||
import pro.gravit.launcher.gui.RuntimeProvider;
|
import pro.gravit.launcher.gui.RuntimeProvider;
|
||||||
import pro.gravit.launcher.managers.ClientGsonManager;
|
import pro.gravit.launcher.managers.ClientGsonManager;
|
||||||
|
@ -40,6 +43,7 @@ public static X509Certificate[] getCertificates(Class<?> clazz) {
|
||||||
|
|
||||||
public static final AtomicBoolean IS_CLIENT = new AtomicBoolean(false);
|
public static final AtomicBoolean IS_CLIENT = new AtomicBoolean(false);
|
||||||
public static ClientLauncherProcess.ClientParams clientParams;
|
public static ClientLauncherProcess.ClientParams clientParams;
|
||||||
|
public static LauncherGuardInterface guard;
|
||||||
|
|
||||||
public static void checkClass(Class<?> clazz) throws SecurityException {
|
public static void checkClass(Class<?> clazz) throws SecurityException {
|
||||||
LauncherTrustManager trustManager = Launcher.getConfig().trustManager;
|
LauncherTrustManager trustManager = Launcher.getConfig().trustManager;
|
||||||
|
@ -146,6 +150,7 @@ private LauncherEngine() {
|
||||||
|
|
||||||
public void start(String... args) throws Throwable {
|
public void start(String... args) throws Throwable {
|
||||||
//Launcher.modulesManager = new ClientModuleManager(this);
|
//Launcher.modulesManager = new ClientModuleManager(this);
|
||||||
|
LauncherEngine.guard = tryGetStdGuard();
|
||||||
ClientPreGuiPhase event = new ClientPreGuiPhase(null);
|
ClientPreGuiPhase event = new ClientPreGuiPhase(null);
|
||||||
LauncherEngine.modulesManager.invokeEvent(event);
|
LauncherEngine.modulesManager.invokeEvent(event);
|
||||||
runtimeProvider = event.runtimeProvider;
|
runtimeProvider = event.runtimeProvider;
|
||||||
|
@ -186,6 +191,18 @@ public void start(String... args) throws Throwable {
|
||||||
runtimeProvider.run(args);
|
runtimeProvider.run(args);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static LauncherGuardInterface tryGetStdGuard()
|
||||||
|
{
|
||||||
|
switch (Launcher.getConfig().guardType)
|
||||||
|
{
|
||||||
|
case "no":
|
||||||
|
return new LauncherNoGuard();
|
||||||
|
case "wrapper":
|
||||||
|
return new LauncherWrapperGuard();
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
public static LauncherEngine clientInstance() {
|
public static LauncherEngine clientInstance() {
|
||||||
return new LauncherEngine();
|
return new LauncherEngine();
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,14 +41,9 @@
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
import java.util.stream.Stream;
|
import java.util.stream.Stream;
|
||||||
|
@Deprecated
|
||||||
public final class ClientLauncher {
|
public final class ClientLauncher {
|
||||||
|
|
||||||
|
|
||||||
public static int getClientJVMBits() {
|
|
||||||
return LauncherGuardManager.guard.getClientJVMBits();
|
|
||||||
}
|
|
||||||
|
|
||||||
private static final class ClassPathFileVisitor extends SimpleFileVisitor<Path> {
|
private static final class ClassPathFileVisitor extends SimpleFileVisitor<Path> {
|
||||||
private final Stream.Builder<Path> result;
|
private final Stream.Builder<Path> result;
|
||||||
|
|
||||||
|
@ -336,7 +331,7 @@ public static Process launch(
|
||||||
container.write(new ParamContainer(params, profile, assetHDir, clientHDir));
|
container.write(new ParamContainer(params, profile, assetHDir, clientHDir));
|
||||||
checkJVMBitsAndVersion();
|
checkJVMBitsAndVersion();
|
||||||
LogHelper.debug("Resolving JVM binary");
|
LogHelper.debug("Resolving JVM binary");
|
||||||
Path javaBin = LauncherGuardManager.getGuardJavaBinPath();
|
Path javaBin = null;
|
||||||
context.javaBin = javaBin;
|
context.javaBin = javaBin;
|
||||||
context.clientProfile = profile;
|
context.clientProfile = profile;
|
||||||
context.playerProfile = params.pp;
|
context.playerProfile = params.pp;
|
||||||
|
@ -369,7 +364,6 @@ public static Process launch(
|
||||||
context.args.add("-Djava.library.path=".concat(params.clientDir.resolve(NATIVES_DIR).toString())); // Add Native Path
|
context.args.add("-Djava.library.path=".concat(params.clientDir.resolve(NATIVES_DIR).toString())); // Add Native Path
|
||||||
//context.args.add("-javaagent:".concat(pathLauncher));
|
//context.args.add("-javaagent:".concat(pathLauncher));
|
||||||
ClientHookManager.clientLaunchHook.hook(context);
|
ClientHookManager.clientLaunchHook.hook(context);
|
||||||
LauncherGuardManager.guard.addCustomParams(context);
|
|
||||||
context.args.add(ClientLauncher.class.getName());
|
context.args.add(ClientLauncher.class.getName());
|
||||||
ClientHookManager.clientLaunchFinallyHook.hook(context);
|
ClientHookManager.clientLaunchFinallyHook.hook(context);
|
||||||
|
|
||||||
|
@ -380,7 +374,6 @@ public static Process launch(
|
||||||
LogHelper.debug("Launching client instance");
|
LogHelper.debug("Launching client instance");
|
||||||
ProcessBuilder builder = new ProcessBuilder(context.args);
|
ProcessBuilder builder = new ProcessBuilder(context.args);
|
||||||
context.builder = builder;
|
context.builder = builder;
|
||||||
LauncherGuardManager.guard.addCustomEnv(context);
|
|
||||||
//else
|
//else
|
||||||
//builder.environment().put("CLASSPATH", classPathString.toString());
|
//builder.environment().put("CLASSPATH", classPathString.toString());
|
||||||
EnvHelper.addEnv(builder);
|
EnvHelper.addEnv(builder);
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@Deprecated
|
||||||
public class ClientLauncherContext {
|
public class ClientLauncherContext {
|
||||||
public Path javaBin;
|
public Path javaBin;
|
||||||
public final List<String> args = new LinkedList<>();
|
public final List<String> args = new LinkedList<>();
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
package pro.gravit.launcher.client;
|
package pro.gravit.launcher.client;
|
||||||
|
|
||||||
import pro.gravit.launcher.Launcher;
|
import pro.gravit.launcher.Launcher;
|
||||||
|
import pro.gravit.launcher.LauncherEngine;
|
||||||
|
import pro.gravit.launcher.guard.LauncherGuardInterface;
|
||||||
import pro.gravit.launcher.guard.LauncherGuardManager;
|
import pro.gravit.launcher.guard.LauncherGuardManager;
|
||||||
import pro.gravit.launcher.hasher.HashedDir;
|
import pro.gravit.launcher.hasher.HashedDir;
|
||||||
import pro.gravit.launcher.profiles.ClientProfile;
|
import pro.gravit.launcher.profiles.ClientProfile;
|
||||||
|
@ -24,9 +26,9 @@
|
||||||
public class ClientLauncherProcess {
|
public class ClientLauncherProcess {
|
||||||
private transient Process process;
|
private transient Process process;
|
||||||
private final transient Boolean[] waitWriteParams = new Boolean[] {false};
|
private final transient Boolean[] waitWriteParams = new Boolean[] {false};
|
||||||
public final Path executeFile;
|
public Path executeFile;
|
||||||
public final Path workDir;
|
public Path workDir;
|
||||||
public final Path javaDir;
|
public Path javaDir;
|
||||||
public final ClientParams params = new ClientParams();
|
public final ClientParams params = new ClientParams();
|
||||||
public final List<String> jvmArgs = new LinkedList<>();
|
public final List<String> jvmArgs = new LinkedList<>();
|
||||||
public final List<String> systemClientArgs = new LinkedList<>();
|
public final List<String> systemClientArgs = new LinkedList<>();
|
||||||
|
@ -42,18 +44,24 @@ public ClientLauncherProcess(Path executeFile, Path workDir, Path javaDir, Strin
|
||||||
this.mainClass = mainClass;
|
this.mainClass = mainClass;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ClientLauncherProcess(Path clientDir, Path assetDir, Path javaDir,
|
||||||
|
ClientProfile profile, PlayerProfile playerProfile, String accessToken,
|
||||||
|
HashedDir clientHDir, HashedDir assetHDir, HashedDir jvmHDir) {
|
||||||
|
this(clientDir, assetDir, javaDir, clientDir.resolve("resourcepacks"), profile, playerProfile, accessToken, clientHDir, assetHDir, jvmHDir);
|
||||||
|
}
|
||||||
|
|
||||||
public ClientLauncherProcess(Path clientDir, Path assetDir,
|
public ClientLauncherProcess(Path clientDir, Path assetDir,
|
||||||
ClientProfile profile, PlayerProfile playerProfile, String accessToken,
|
ClientProfile profile, PlayerProfile playerProfile, String accessToken,
|
||||||
HashedDir clientHDir, HashedDir assetHDir, HashedDir jvmHDir) {
|
HashedDir clientHDir, HashedDir assetHDir, HashedDir jvmHDir) {
|
||||||
this(clientDir, assetDir, clientDir.resolve("resourcepacks"), profile, playerProfile, accessToken, clientHDir, assetHDir, jvmHDir);
|
this(clientDir, assetDir, Paths.get(System.getProperty("java.home")), clientDir.resolve("resourcepacks"), profile, playerProfile, accessToken, clientHDir, assetHDir, jvmHDir);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ClientLauncherProcess(Path clientDir, Path assetDir, Path resourcePackDir,
|
public ClientLauncherProcess(Path clientDir, Path assetDir, Path javaDir, Path resourcePackDir,
|
||||||
ClientProfile profile, PlayerProfile playerProfile, String accessToken,
|
ClientProfile profile, PlayerProfile playerProfile, String accessToken,
|
||||||
HashedDir clientHDir, HashedDir assetHDir, HashedDir jvmHDir) {
|
HashedDir clientHDir, HashedDir assetHDir, HashedDir jvmHDir) {
|
||||||
this.executeFile = LauncherGuardManager.getGuardJavaBinPath();
|
|
||||||
this.workDir = clientDir.toAbsolutePath();
|
this.workDir = clientDir.toAbsolutePath();
|
||||||
this.javaDir = Paths.get(System.getProperty("java.home"));
|
this.javaDir = javaDir;
|
||||||
|
this.executeFile = IOHelper.resolveJavaBin(this.javaDir);
|
||||||
this.mainClass = ClientLauncherEntryPoint.class.getName();
|
this.mainClass = ClientLauncherEntryPoint.class.getName();
|
||||||
this.params.clientDir = this.workDir.toString();
|
this.params.clientDir = this.workDir.toString();
|
||||||
this.params.resourcePackDir = resourcePackDir.toAbsolutePath().toString();
|
this.params.resourcePackDir = resourcePackDir.toAbsolutePath().toString();
|
||||||
|
@ -193,6 +201,7 @@ private void addModernClientArgs(Collection<String> args) {
|
||||||
}
|
}
|
||||||
public void start(boolean pipeOutput) throws IOException, InterruptedException {
|
public void start(boolean pipeOutput) throws IOException, InterruptedException {
|
||||||
if(isStarted) throw new IllegalStateException("Process already started");
|
if(isStarted) throw new IllegalStateException("Process already started");
|
||||||
|
if(LauncherEngine.guard != null) LauncherEngine.guard.applyGuardParams(this);
|
||||||
List<String> processArgs = new LinkedList<>();
|
List<String> processArgs = new LinkedList<>();
|
||||||
processArgs.add(executeFile.toString());
|
processArgs.add(executeFile.toString());
|
||||||
processArgs.addAll(jvmArgs);
|
processArgs.addAll(jvmArgs);
|
||||||
|
@ -212,6 +221,7 @@ public void start(boolean pipeOutput) throws IOException, InterruptedException {
|
||||||
LogHelper.debug("Commandline: %s", Arrays.toString(processArgs.toArray()));
|
LogHelper.debug("Commandline: %s", Arrays.toString(processArgs.toArray()));
|
||||||
ProcessBuilder processBuilder = new ProcessBuilder(processArgs);
|
ProcessBuilder processBuilder = new ProcessBuilder(processArgs);
|
||||||
EnvHelper.addEnv(processBuilder);
|
EnvHelper.addEnv(processBuilder);
|
||||||
|
processBuilder.environment().put("JAVA_HOME", javaDir.toAbsolutePath().toString());
|
||||||
processBuilder.environment().putAll(systemEnv);
|
processBuilder.environment().putAll(systemEnv);
|
||||||
processBuilder.directory(workDir.toFile());
|
processBuilder.directory(workDir.toFile());
|
||||||
processBuilder.inheritIO();
|
processBuilder.inheritIO();
|
||||||
|
|
|
@ -1,21 +1,9 @@
|
||||||
package pro.gravit.launcher.guard;
|
package pro.gravit.launcher.guard;
|
||||||
|
|
||||||
import pro.gravit.launcher.client.ClientLauncherContext;
|
import pro.gravit.launcher.client.ClientLauncherProcess;
|
||||||
|
|
||||||
import java.nio.file.Path;
|
|
||||||
|
|
||||||
public interface LauncherGuardInterface {
|
public interface LauncherGuardInterface {
|
||||||
String getName();
|
String getName();
|
||||||
|
|
||||||
Path getJavaBinPath();
|
void applyGuardParams(ClientLauncherProcess process);
|
||||||
|
|
||||||
int getClientJVMBits();
|
|
||||||
|
|
||||||
void init(boolean clientInstance);
|
|
||||||
|
|
||||||
void addCustomParams(ClientLauncherContext context);
|
|
||||||
|
|
||||||
void addCustomEnv(ClientLauncherContext context);
|
|
||||||
|
|
||||||
void setProtectToken(String token);
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,31 +9,5 @@ public class LauncherGuardManager {
|
||||||
public static LauncherGuardInterface guard;
|
public static LauncherGuardInterface guard;
|
||||||
|
|
||||||
public static void initGuard(boolean clientInstance) {
|
public static void initGuard(boolean clientInstance) {
|
||||||
if(guard == null)
|
|
||||||
{
|
|
||||||
LauncherConfig config = Launcher.getConfig();
|
|
||||||
switch (config.guardType) {
|
|
||||||
case "stdguard": {
|
|
||||||
guard = new LauncherStdGuard();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case "wrapper": {
|
|
||||||
guard = new LauncherWrapperGuard();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case "java": {
|
|
||||||
guard = new LauncherJavaGuard();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
default: {
|
|
||||||
guard = new LauncherNoGuard();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
guard.init(clientInstance);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Path getGuardJavaBinPath() {
|
|
||||||
return guard.getJavaBinPath();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,51 +0,0 @@
|
||||||
package pro.gravit.launcher.guard;
|
|
||||||
|
|
||||||
import pro.gravit.launcher.client.ClientLauncher;
|
|
||||||
import pro.gravit.launcher.client.ClientLauncherContext;
|
|
||||||
import pro.gravit.utils.helper.IOHelper;
|
|
||||||
import pro.gravit.utils.helper.JVMHelper;
|
|
||||||
|
|
||||||
import java.nio.file.Path;
|
|
||||||
import java.nio.file.Paths;
|
|
||||||
import java.util.Collections;
|
|
||||||
|
|
||||||
public class LauncherJavaGuard implements LauncherGuardInterface {
|
|
||||||
@Override
|
|
||||||
public String getName() {
|
|
||||||
return "java";
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Path getJavaBinPath() {
|
|
||||||
if (JVMHelper.OS_TYPE == JVMHelper.OS.MUSTDIE)
|
|
||||||
return IOHelper.resolveJavaBin(ClientLauncher.getJavaBinPath());
|
|
||||||
else
|
|
||||||
return IOHelper.resolveJavaBin(Paths.get(System.getProperty("java.home")));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getClientJVMBits() {
|
|
||||||
return JVMHelper.OS_BITS;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void init(boolean clientInstance) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void addCustomParams(ClientLauncherContext context) {
|
|
||||||
Collections.addAll(context.args, "-cp");
|
|
||||||
Collections.addAll(context.args, context.pathLauncher);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void addCustomEnv(ClientLauncherContext context) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setProtectToken(String token) {
|
|
||||||
//Skip
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,6 +1,7 @@
|
||||||
package pro.gravit.launcher.guard;
|
package pro.gravit.launcher.guard;
|
||||||
|
|
||||||
import pro.gravit.launcher.client.ClientLauncherContext;
|
import pro.gravit.launcher.client.ClientLauncherContext;
|
||||||
|
import pro.gravit.launcher.client.ClientLauncherProcess;
|
||||||
import pro.gravit.utils.helper.IOHelper;
|
import pro.gravit.utils.helper.IOHelper;
|
||||||
import pro.gravit.utils.helper.JVMHelper;
|
import pro.gravit.utils.helper.JVMHelper;
|
||||||
import pro.gravit.utils.helper.LogHelper;
|
import pro.gravit.utils.helper.LogHelper;
|
||||||
|
@ -16,33 +17,7 @@ public String getName() {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Path getJavaBinPath() {
|
public void applyGuardParams(ClientLauncherProcess process) {
|
||||||
return IOHelper.resolveJavaBin(Paths.get(System.getProperty("java.home")));
|
//IGNORED
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getClientJVMBits() {
|
|
||||||
return JVMHelper.JVM_BITS;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void init(boolean clientInstance) {
|
|
||||||
LogHelper.warning("Using noGuard interface");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void addCustomParams(ClientLauncherContext context) {
|
|
||||||
Collections.addAll(context.args, "-cp");
|
|
||||||
Collections.addAll(context.args, context.pathLauncher);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void addCustomEnv(ClientLauncherContext context) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setProtectToken(String token) {
|
|
||||||
//Skip
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,85 +0,0 @@
|
||||||
package pro.gravit.launcher.guard;
|
|
||||||
|
|
||||||
import pro.gravit.launcher.Launcher;
|
|
||||||
import pro.gravit.launcher.LauncherConfig;
|
|
||||||
import pro.gravit.launcher.client.ClientLauncher;
|
|
||||||
import pro.gravit.launcher.client.ClientLauncherContext;
|
|
||||||
import pro.gravit.launcher.client.DirBridge;
|
|
||||||
import pro.gravit.utils.helper.IOHelper;
|
|
||||||
import pro.gravit.utils.helper.JVMHelper;
|
|
||||||
import pro.gravit.utils.helper.UnpackHelper;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.nio.file.Path;
|
|
||||||
import java.nio.file.Paths;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
//Стандартный интерфейс для всех AntiInject
|
|
||||||
public class LauncherStdGuard implements LauncherGuardInterface {
|
|
||||||
public String protectToken;
|
|
||||||
public Path javaBinPath;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getName() {
|
|
||||||
return "stdguard";
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Path getJavaBinPath() {
|
|
||||||
if (JVMHelper.OS_TYPE == JVMHelper.OS.MUSTDIE) {
|
|
||||||
javaBinPath = ClientLauncher.getJavaBinPath();
|
|
||||||
String projectName = Launcher.getConfig().projectName;
|
|
||||||
String wrapperUnpackName = (javaBinPath == null ? JVMHelper.JVM_BITS : JVMHelper.OS_BITS) == 64 ? projectName.concat("64.exe") : projectName.concat("32.exe");
|
|
||||||
return DirBridge.getGuardDir().resolve(wrapperUnpackName);
|
|
||||||
} else
|
|
||||||
return IOHelper.resolveJavaBin(Paths.get(System.getProperty("java.home")));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getClientJVMBits() {
|
|
||||||
//При использовании GravitGuard без своей джавы
|
|
||||||
//Если при запуске лаунчера используется 32 бит джава, а ОС 64бит
|
|
||||||
//То в окне настроек будет отображаться >1.5Гб доступной памяти
|
|
||||||
//Однако при выставлении >1.5Гб JVM x32 работать откажеться
|
|
||||||
return JVMHelper.OS_BITS;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void init(boolean clientInstance) {
|
|
||||||
try {
|
|
||||||
String projectName = Launcher.getConfig().projectName;
|
|
||||||
UnpackHelper.unpack(Launcher.getResourceURL("wrapper64.exe", "guard"), DirBridge.getGuardDir().resolve(projectName.concat("64.exe")));
|
|
||||||
UnpackHelper.unpack(Launcher.getResourceURL("AntiInject64.dll", "guard"), DirBridge.getGuardDir().resolve("AntiInject64.dll"));
|
|
||||||
|
|
||||||
UnpackHelper.unpack(Launcher.getResourceURL("wrapper32.exe", "guard"), DirBridge.getGuardDir().resolve(projectName.concat("32.exe")));
|
|
||||||
UnpackHelper.unpack(Launcher.getResourceURL("AntiInject32.dll", "guard"), DirBridge.getGuardDir().resolve("AntiInject32.dll"));
|
|
||||||
} catch (IOException e) {
|
|
||||||
throw new SecurityException(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void addCustomParams(ClientLauncherContext context) {
|
|
||||||
Collections.addAll(context.args, "-Djava.class.path=".concat(context.pathLauncher));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void addCustomEnv(ClientLauncherContext context) {
|
|
||||||
Map<String, String> env = context.builder.environment();
|
|
||||||
if (javaBinPath == null)
|
|
||||||
env.put("JAVA_HOME", System.getProperty("java.home"));
|
|
||||||
else
|
|
||||||
env.put("JAVA_HOME", javaBinPath.toAbsolutePath().toString());
|
|
||||||
LauncherConfig config = Launcher.getConfig();
|
|
||||||
env.put("GUARD_USERNAME", context.playerProfile.username);
|
|
||||||
env.put("GUARD_PROJECTNAME", config.projectName);
|
|
||||||
if (protectToken != null)
|
|
||||||
env.put("GUARD_TOKEN", protectToken);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setProtectToken(String token) {
|
|
||||||
protectToken = token;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -3,6 +3,7 @@
|
||||||
import pro.gravit.launcher.Launcher;
|
import pro.gravit.launcher.Launcher;
|
||||||
import pro.gravit.launcher.LauncherConfig;
|
import pro.gravit.launcher.LauncherConfig;
|
||||||
import pro.gravit.launcher.client.ClientLauncherContext;
|
import pro.gravit.launcher.client.ClientLauncherContext;
|
||||||
|
import pro.gravit.launcher.client.ClientLauncherProcess;
|
||||||
import pro.gravit.launcher.client.DirBridge;
|
import pro.gravit.launcher.client.DirBridge;
|
||||||
import pro.gravit.utils.helper.IOHelper;
|
import pro.gravit.utils.helper.IOHelper;
|
||||||
import pro.gravit.utils.helper.JVMHelper;
|
import pro.gravit.utils.helper.JVMHelper;
|
||||||
|
@ -16,30 +17,21 @@
|
||||||
|
|
||||||
public class LauncherWrapperGuard implements LauncherGuardInterface {
|
public class LauncherWrapperGuard implements LauncherGuardInterface {
|
||||||
|
|
||||||
public String protectToken;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getName() {
|
public String getName() {
|
||||||
return "wrapper";
|
return "wrapper";
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Path getJavaBinPath() {
|
public void applyGuardParams(ClientLauncherProcess process) {
|
||||||
if (JVMHelper.OS_TYPE == JVMHelper.OS.MUSTDIE) {
|
if (JVMHelper.OS_TYPE == JVMHelper.OS.MUSTDIE) {
|
||||||
String projectName = Launcher.getConfig().projectName;
|
String projectName = Launcher.getConfig().projectName;
|
||||||
String wrapperUnpackName = JVMHelper.JVM_BITS == 64 ? projectName.concat("64.exe") : projectName.concat("32.exe");
|
String wrapperUnpackName = JVMHelper.JVM_BITS == 64 ? projectName.concat("64.exe") : projectName.concat("32.exe");
|
||||||
return DirBridge.getGuardDir().resolve(wrapperUnpackName);
|
process.executeFile = DirBridge.getGuardDir().resolve(wrapperUnpackName);
|
||||||
} else
|
}
|
||||||
return IOHelper.resolveJavaBin(Paths.get(System.getProperty("java.home")));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
public LauncherWrapperGuard() {
|
||||||
public int getClientJVMBits() {
|
|
||||||
return JVMHelper.JVM_BITS;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void init(boolean clientInstance) {
|
|
||||||
try {
|
try {
|
||||||
String wrapperName = JVMHelper.JVM_BITS == 64 ? "wrapper64.exe" : "wrapper32.exe";
|
String wrapperName = JVMHelper.JVM_BITS == 64 ? "wrapper64.exe" : "wrapper32.exe";
|
||||||
String projectName = Launcher.getConfig().projectName;
|
String projectName = Launcher.getConfig().projectName;
|
||||||
|
@ -51,25 +43,4 @@ public void init(boolean clientInstance) {
|
||||||
throw new SecurityException(e);
|
throw new SecurityException(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void addCustomParams(ClientLauncherContext context) {
|
|
||||||
Collections.addAll(context.args, "-Djava.class.path=".concat(context.pathLauncher));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void addCustomEnv(ClientLauncherContext context) {
|
|
||||||
Map<String, String> env = context.builder.environment();
|
|
||||||
env.put("JAVA_HOME", System.getProperty("java.home"));
|
|
||||||
LauncherConfig config = Launcher.getConfig();
|
|
||||||
env.put("GUARD_USERNAME", context.playerProfile.username);
|
|
||||||
env.put("GUARD_PROJECTNAME", config.projectName);
|
|
||||||
if (protectToken != null)
|
|
||||||
env.put("GUARD_TOKEN", protectToken);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setProtectToken(String token) {
|
|
||||||
protectToken = token;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue