Первое же срабатывание защиты крашит процесс

This commit is contained in:
Gravit 2018-10-07 13:59:28 +07:00
parent 6167699c20
commit b285c81c09
3 changed files with 44 additions and 6 deletions

View file

@ -5,6 +5,8 @@
import java.nio.file.Path; import java.nio.file.Path;
import java.util.Arrays; import java.util.Arrays;
import cpw.mods.fml.SafeExitJVMLegacy;
import net.minecraftforge.fml.SafeExitJVM;
import ru.gravit.launcher.hasher.DirWatcher; import ru.gravit.launcher.hasher.DirWatcher;
import ru.gravit.launcher.hasher.HashedDir; import ru.gravit.launcher.hasher.HashedDir;
import ru.gravit.utils.helper.CommonHelper; import ru.gravit.utils.helper.CommonHelper;
@ -17,29 +19,44 @@
public class AvanguardStarter { public class AvanguardStarter {
static class SecurityThread implements Runnable { static class SecurityThread implements Runnable {
static long macID = GuardBind.avnGetMacId();
@Override @Override
public void run() { public void run() {
while (!Thread.interrupted()) { while (!Thread.interrupted()) {
try { try {
if(macID != GuardBind.avnGetMacId()) {
LogHelper.error("MacID changed");
safeHalt(8);
}
if (!GuardBind.avnIsStarted()) { if (!GuardBind.avnIsStarted()) {
LogHelper.error("Avanguard stopped! Process stopped"); LogHelper.error("Avanguard stopped! Process stopped");
System.exit(5); safeHalt(5);
} }
} catch (NullPointerException e) { } catch (NullPointerException e) {
LogHelper.error("Avanguard unloaded! Process stopped"); LogHelper.error("Avanguard unloaded! Process stopped");
System.exit(6); safeHalt(6);
} }
try { try {
Thread.sleep(2000); Thread.sleep(2000);
} catch (InterruptedException e) { } catch (InterruptedException e) {
GuardBind.avnGetMacId();
if (!GuardBind.avnIsStarted()) { if (!GuardBind.avnIsStarted()) {
LogHelper.error("Thread stopped! Process stopped"); LogHelper.error("Thread stopped! Process stopped");
System.exit(7); safeHalt(7);
} }
} }
} }
} }
} }
static void safeHalt(int exitcode)
{
try {
SafeExitJVM.exit(exitcode);
} catch (Throwable e)
{
SafeExitJVMLegacy.exit(exitcode);
}
}
public static final String NAME = Launcher.getConfig().projectname; public static final String NAME = Launcher.getConfig().projectname;
public static String avn32 = null, avn64 = null; public static String avn32 = null, avn64 = null;
@ -76,7 +93,12 @@ public static void main(boolean init) {
GuardBind.avnRegisterThreatNotifier((int threatType) -> { GuardBind.avnRegisterThreatNotifier((int threatType) -> {
System.err.println("Threat " + GuardBind.ThreatType.getThreat(threatType).name()); System.err.println("Threat " + GuardBind.ThreatType.getThreat(threatType).name());
LogHelper.error("Cheating == crash!"); LogHelper.error("Cheating == crash!");
System.exit(12); try {
SafeExitJVM.exit(threatType + 7000);
} catch (Throwable e)
{
SafeExitJVMLegacy.exit(threatType + 7000);
}
return false; return false;
}); });
// нужно делать до пуска таймера! // нужно делать до пуска таймера!

View file

@ -1,9 +1,17 @@
package cpw.mods.fml; package cpw.mods.fml;
import ru.gravit.utils.helper.JVMHelper;
// FMLSecurityManager запрещает делать System.exit из классов // FMLSecurityManager запрещает делать System.exit из классов
// Не входящих в пакеты самого Forge // Не входящих в пакеты самого Forge
public class SafeExitJVMLegacy { public class SafeExitJVMLegacy {
public static void exit(int code) public static void exit(int code)
{ {
System.exit(code); try {
JVMHelper.RUNTIME.halt(code);
} catch (Throwable e)
{
System.exit(code);
}
} }
} }

View file

@ -1,9 +1,17 @@
package net.minecraftforge.fml; package net.minecraftforge.fml;
import ru.gravit.utils.helper.JVMHelper;
// FMLSecurityManager запрещает делать System.exit из классов // FMLSecurityManager запрещает делать System.exit из классов
// Не входящих в пакеты самого Forge // Не входящих в пакеты самого Forge
public class SafeExitJVM { public class SafeExitJVM {
public static void exit(int code) public static void exit(int code)
{ {
System.exit(code); try {
JVMHelper.RUNTIME.halt(code);
} catch (Throwable e)
{
System.exit(code);
}
} }
} }