diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/Main.java b/HMCL/src/main/java/org/jackhuang/hmcl/Main.java index 012153e34..a70b853a1 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/Main.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/Main.java @@ -20,6 +20,7 @@ package org.jackhuang.hmcl; import javafx.application.Platform; import javafx.scene.control.Alert; import org.jackhuang.hmcl.ui.AwtUtils; +import org.jackhuang.hmcl.util.FractureiserDetector; import org.jackhuang.hmcl.util.Logging; import org.jackhuang.hmcl.util.SelfDependencyPatcher; import org.jackhuang.hmcl.ui.SwingUtils; @@ -71,6 +72,7 @@ public final class Main { Logging.start(Metadata.HMCL_DIRECTORY.resolve("logs")); checkJavaFX(); + detectFractureiser(); Launcher.main(args); } @@ -89,6 +91,13 @@ public final class Main { } } + private static void detectFractureiser() { + if (FractureiserDetector.detect()) { + LOG.log(Level.SEVERE, "Detected that this computer is infected by fractureiser"); + showErrorAndExit(i18n("fatal.fractureiser")); + } + } + private static void checkJavaFX() { try { SelfDependencyPatcher.patch(); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/util/FractureiserDetector.java b/HMCL/src/main/java/org/jackhuang/hmcl/util/FractureiserDetector.java new file mode 100644 index 000000000..a81a5010d --- /dev/null +++ b/HMCL/src/main/java/org/jackhuang/hmcl/util/FractureiserDetector.java @@ -0,0 +1,55 @@ +package org.jackhuang.hmcl.util; + +import org.jackhuang.hmcl.util.platform.OperatingSystem; + +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.ArrayList; + +/** + * @see fractureiser-investigation/fractureiser + * @see [MALWARE WARNING] "fractureiser" malware in many popular Minecraft mods and modpacks + */ +public final class FractureiserDetector { + private FractureiserDetector() { + } + + public static boolean detect() { + try { + ArrayList badPaths = new ArrayList<>(); + + if (OperatingSystem.CURRENT_OS == OperatingSystem.WINDOWS) { + Path appdata = Paths.get(System.getProperty("user.home"), "AppData"); + if (Files.isDirectory(appdata)) { + badPaths.add(appdata.resolve("Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\\run.bat")); + + Path falseEdgePath = appdata.resolve("Local\\Microsoft Edge"); + if (Files.exists(falseEdgePath)) { + badPaths.add(falseEdgePath.resolve(".ref")); + badPaths.add(falseEdgePath.resolve("client.jar")); + badPaths.add(falseEdgePath.resolve("lib.dll")); + badPaths.add(falseEdgePath.resolve("libWebGL64.jar")); + badPaths.add(falseEdgePath.resolve("run.bat")); + } + } + } else if (OperatingSystem.CURRENT_OS == OperatingSystem.LINUX) { + Path dataDir = Paths.get(System.getProperty("user.home"), ".config", ".data"); + if (Files.exists(dataDir)) { + badPaths.add(dataDir.resolve(".ref")); + badPaths.add(dataDir.resolve("client.jar")); + badPaths.add(dataDir.resolve("lib.jar")); + } + } + + for (Path badPath : badPaths) { + if (Files.exists(badPath)) { + return true; + } + } + } catch (Throwable ignored) { + } + + return false; + } +} diff --git a/HMCL/src/main/resources/assets/lang/I18N.properties b/HMCL/src/main/resources/assets/lang/I18N.properties index 1b13305d3..a083f557b 100644 --- a/HMCL/src/main/resources/assets/lang/I18N.properties +++ b/HMCL/src/main/resources/assets/lang/I18N.properties @@ -343,6 +343,8 @@ extension.png=Image File extension.ps1=Windows PowerShell Cmdlet File extension.sh=Bash Shell Script +fatal.fractureiser=Hello Minecraft! Launcher has detected that your computer has been infected with the Fraureiser, which poses a serious security issue.\n\ +Please use antivirus software to perform a full scan immediately, and then change the passwords of all accounts you have logged in on this computer. fatal.javafx.incompatible=Missing JavaFX environment.\n\ HMCL cannot automatically install JavaFX under Java versions below 11.\n\ Please update your Java to version 11 or higher. diff --git a/HMCL/src/main/resources/assets/lang/I18N_zh.properties b/HMCL/src/main/resources/assets/lang/I18N_zh.properties index 09f84d066..52cc6d6e4 100644 --- a/HMCL/src/main/resources/assets/lang/I18N_zh.properties +++ b/HMCL/src/main/resources/assets/lang/I18N_zh.properties @@ -348,6 +348,7 @@ extension.png=圖片檔案 extension.ps1=PowerShell 指令碼 extension.sh=Bash 指令碼 +fatal.fractureiser=Hello Minecraft! Launcher 檢測到你的電腦被 Fractureiser 病毒感染,存在嚴重安全問題。\n請立即使用殺毒軟體進行全盤查殺,隨後修改你在此電腦上登入過的所有帳號的密碼。 fatal.javafx.incompatible=缺少 JavaFX 運行環境。\nHMCL 無法在低於 Java 11 的 Java 環境上自行補全 JavaFX 運行環境,請更新到 Java 11 或更高版本。 fatal.javafx.incompatible.loongson=缺少 JavaFX 運行環境。\n請使龍芯 JDK 8 (http://www.loongnix.cn/zh/api/java/downloads-jdk8/index.html) 啟動 HMCL。 fatal.javafx.missing=找不到 JavaFX, diff --git a/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties b/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties index c6f08d3f1..f322ae5ff 100644 --- a/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties +++ b/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties @@ -348,6 +348,7 @@ extension.png=图片文件 extension.ps1=PowerShell 脚本 extension.sh=Bash 脚本 +fatal.fractureiser=Hello Minecraft! Launcher 检测到你的电脑被 Fractureiser 病毒感染,存在严重安全问题。\n请立即使用杀毒软件进行全盘查杀,随后修改你在此电脑上登陆过的所有账号的密码。 fatal.javafx.incompatible=缺少 JavaFX 运行环境。\nHello Minecraft! Launcher 无法在低于 Java 11 的 Java 环境上自行补全 JavaFX 运行环境,请更新到 Java 11 或更高版本。\n你可以访问 https://docs.hmcl.net/help.html 页面寻求帮助。 fatal.javafx.incompatible.loongson=缺少 JavaFX 运行环境。\n请使用龙芯 JDK 8 (http://www.loongnix.cn/zh/api/java/downloads-jdk8/index.html) 启动 HMCL。\n你可以访问 https://docs.hmcl.net/help.html 页面寻求帮助。 fatal.javafx.missing=缺少 JavaFX 运行环境,请使用包含 OpenJFX 的 Java 运行环境启动 Hello Minecraft! Launcher。\n你可以访问 https://docs.hmcl.net/help.html 页面寻求帮助。