Начинающий
- Статус
- Оффлайн
- Регистрация
- 1 Окт 2025
- Сообщения
- 17
- Реакции
- 0
- Выберите загрузчик игры
- Fabric
HWIDUtils:
package ru.scamware.core.loginutils.utils;
import org.apache.commons.codec.digest.DigestUtils;
public class HWIDUtils {
public static String getHwid() {
try {
StringBuilder hardwareInfo = new StringBuilder();
hardwareInfo.append(System.getenv("PROCESSOR_IDENTIFIER"));
hardwareInfo.append(System.getenv("PROCESSOR_LEVEL"));
hardwareInfo.append(System.getenv("PROCESSOR_REVISION"));
hardwareInfo.append(System.getenv("PROCESSOR_ARCHITECTURE"));
hardwareInfo.append(System.getenv("PROCESSOR_ARCHITEW6432"));
hardwareInfo.append(System.getProperty("os.name"));
hardwareInfo.append(System.getProperty("os.arch"));
hardwareInfo.append(System.getProperty("os.version"));
hardwareInfo.append(System.getenv("COMPUTERNAME"));
hardwareInfo.append(System.getenv("USERNAME"));
hardwareInfo.append(System.getenv("HOMEDRIVE"));
hardwareInfo.append(getDiskSerial());
hardwareInfo.append(getMacAddress());
String salted = hardwareInfo.toString() + "SCAMWARE_SALT_2024";
String firstHash = DigestUtils.sha256Hex(salted);
return DigestUtils.sha256Hex(firstHash + "SECOND_SALT");
} catch (Exception e) {
return DigestUtils.sha256Hex("fallback_hwid_" + System.currentTimeMillis());
}
}
private static String getDiskSerial() {
try {
String os = System.getProperty("os.name").toLowerCase();
if (os.contains("win")) {
Process process = Runtime.getRuntime().exec(
new String[]{"wmic", "diskdrive", "get", "serialnumber"});
java.util.Scanner scanner = new java.util.Scanner(process.getInputStream());
StringBuilder result = new StringBuilder();
while (scanner.hasNextLine()) {
String line = scanner.nextLine().trim();
if (!line.isEmpty() && !line.equals("SerialNumber")) {
result.append(line);
}
}
scanner.close();
return result.toString();
}
} catch (Exception e) {
}
return "UNKNOWN_DISK";
}
private static String getMacAddress() {
try {
java.net.NetworkInterface network = java.net.NetworkInterface.getByInetAddress(
java.net.InetAddress.getLocalHost());
if (network != null) {
byte[] mac = network.getHardwareAddress();
if (mac != null) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < mac.length; i++) {
sb.append(String.format("%02X", mac[i]));
}
return sb.toString();
}
}
} catch (Exception e) {
}
return "UNKNOWN_MAC";
}
}
UserProfile:
package ru.scamware.core.loginutils.utils;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;
@Setter
@Getter
@AllArgsConstructor
public class UserProfile {
private final String name;
private final String role;
private final String expireDate;
private final int accessLevel;
}
Auth:
package ru.scamware.core.loginutils;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import lombok.Getter;
import ru.scamware.core.loginutils.utils.HWIDUtils;
import ru.scamware.core.loginutils.utils.UserProfile;
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Base64;
@Getter
public class Auth {
@Getter
private static Auth instance = new Auth();
private UserProfile userProfile;
private boolean authenticated = false;
private String authMessage = "";
private static final String ENCRYPTION_KEY = "ScamWareSecureKey2024!";
private static final String AUTH_URL = "https://pastebin.com/raw/ТУТ_ВАШ_PASTEBIN";
public boolean authenticate() {
try {
authMessage = "Начало аутентификации...";
String hwid = HWIDUtils.getHwid();
authMessage = "HWID сгенерирован: " + hwid.substring(0, 8) + "...";
String encryptedData = downloadAuthData();
if (encryptedData == null || encryptedData.isEmpty()) {
authMessage = "Ошибка: Не удалось загрузить данные аутентификации";
return false;
}
String jsonData = decrypt(encryptedData);
if (jsonData == null || jsonData.isEmpty()) {
authMessage = "Ошибка: Неверный формат данных аутентификации";
return false;
}
JsonObject root = JsonParser.parseString(jsonData).getAsJsonObject();
if (!root.has("version") || root.get("version").getAsInt() != 1) {
authMessage = "Ошибка: Неверная версия данных";
return false;
}
JsonArray users = root.getAsJsonArray("users");
for (JsonElement userElement : users) {
JsonObject user = userElement.getAsJsonObject();
if (user.get("hwid").getAsString().equals(hwid)) {
String username = user.get("username").getAsString();
String role = user.get("role").getAsString();
String expireDate = user.get("expire").getAsString();
int accessLevel = user.get("accessLevel").getAsInt();
if (isExpired(expireDate)) {
authMessage = "Ошибка: Ваша лицензия истекла " + expireDate;
return false;
}
this.userProfile = new UserProfile(username, role, expireDate, accessLevel);
this.authenticated = true;
authMessage = "Успешная аутентификация! Добро пожаловать, " + username;
return true;
}
}
authMessage = "Ошибка: Ваш HWID не найден в списке разрешенных";
return false;
} catch (Exception e) {
authMessage = "Ошибка аутентификации: " + e.getMessage();
return false;
}
}
private String downloadAuthData() {
try {
URL url = new URL(AUTH_URL);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36");
connection.setConnectTimeout(10000);
connection.setReadTimeout(10000);
if (connection.getResponseCode() != HttpURLConnection.HTTP_OK) {
throw new RuntimeException("HTTP error: " + connection.getResponseCode());
}
try (BufferedReader reader = new BufferedReader(
new InputStreamReader(connection.getInputStream(), StandardCharsets.UTF_8))) {
StringBuilder response = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
response.append(line);
}
return response.toString().trim();
}
} catch (Exception e) {
authMessage = "Ошибка загрузки: " + e.getMessage();
return null;
}
}
private String decrypt(String encryptedData) {
try {
MessageDigest sha = MessageDigest.getInstance("SHA-256");
byte[] key = sha.digest(ENCRYPTION_KEY.getBytes(StandardCharsets.UTF_8));
key = java.util.Arrays.copyOf(key, 16);
SecretKeySpec secretKey = new SecretKeySpec(key, "AES");
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, secretKey);
byte[] decodedData = Base64.getDecoder().decode(encryptedData);
byte[] decryptedData = cipher.doFinal(decodedData);
return new String(decryptedData, StandardCharsets.UTF_8);
} catch (Exception e) {
authMessage = "Ошибка дешифровки: " + e.getMessage();
return null;
}
}
private boolean isExpired(String expireDate) {
try {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDate expire = LocalDate.parse(expireDate, formatter);
LocalDate today = LocalDate.now();
return today.isAfter(expire);
} catch (Exception e) {
return true;
}
}
public String getHwid() {
return HWIDUtils.getHwid();
}
}
AuthDataGenerator:
package ru.scamware.core.loginutils;
import ru.scamware.core.loginutils.utils.HWIDUtils;
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.util.Base64;
public class AuthDataGenerator {
private static final String ENCRYPTION_KEY = "ScamWareSecureKey2024!";
public static void main(String[] args) {
String jsonData = """
{
"version": 1,
"users": [
{
"hwid": "e546611fb1bcca5cd5c18d669db881ab41a0f5deb573f28955581fa5dd192ee1",
"username": "warkzy666",
"role": "dev",
"expire": "2038-06-06",
"accessLevel": 333
}
]
}
""";
String encrypted = encrypt(jsonData);
System.out.println("Данные для Pastebin:");
System.out.println(encrypted);
System.out.println("\\nТестовый HWID: " + HWIDUtils.getHwid());
}
private static String encrypt(String data) {
try {
MessageDigest sha = MessageDigest.getInstance("SHA-256");
byte[] key = sha.digest(ENCRYPTION_KEY.getBytes(StandardCharsets.UTF_8));
key = java.util.Arrays.copyOf(key, 16);
SecretKeySpec secretKey = new SecretKeySpec(key, "AES");
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
byte[] encryptedData = cipher.doFinal(data.getBytes(StandardCharsets.UTF_8));
return Base64.getEncoder().encodeToString(encryptedData);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
ЭТО В MAIN КЛАСС!!!!:
@Getter
static Main instance;
@Getter
private Auth auth;
private boolean authenticated;
EventManager eventManager = new EventManager();
ModuleRepository moduleRepository;
ModuleSwitcher moduleSwitcher;
CommandRepository commandRepository;
CommandDispatcher commandDispatcher;
BoxESPRepository boxESPRepository = new BoxESPRepository(eventManager);
MacroRepository macroRepository = new MacroRepository(eventManager);
WayRepository wayRepository = new WayRepository(eventManager);
RCTRepository RCTRepository = new RCTRepository(eventManager);
ModuleProvider moduleProvider;
DraggableRepository draggableRepository;
DiscordManager discordManager;
FileRepository fileRepository;
FileController fileController;
ScissorManager scissorManager = new ScissorManager();
ClientInfoProvider clientInfoProvider;
ListenerRepository listenerRepository;
AttackPerpetrator attackPerpetrator = new AttackPerpetrator();
boolean initialized;
@Override
public void onInitialize() {
instance = this;
initAuthentication();
if (!authenticated) {
System.err.println("Аутентификация провалена: " + auth.getAuthMessage());
showAuthError();
return;
}
System.out.println("Аутентификация успешна: " + auth.getAuthMessage());
initClientInfoProvider();
initModules();
initDraggable();
initFileManager();
initCommands();
initListeners();
initDiscordRPC();
SoundManager.init();
MenuScreen menuScreen = new MenuScreen();
menuScreen.initialize();
initialized = true;
}
private void initAuthentication() {
auth = Auth.getInstance();
authenticated = auth.authenticate();
}
private void showAuthError() {
System.err.println("=== ОШИБКА АУТЕНТИФИКАЦИИ ===");
System.err.println(auth.getAuthMessage());
System.err.println("Ваш HWID: " + auth.getHwid());
System.err.println("=============================");
}
ОБНОВИТЬ PROFILE!!!:
package ru.scamware.core;
import lombok.Getter;
import lombok.experimental.UtilityClass;
@UtilityClass
public class Profile {
@Getter
private String username = getActualUsername();
@Getter
private String role = getActualRole();
@Getter
private String expire = getActualExpire();
@Getter
private int accessLevel = getActualAccessLevel();
private String getActualUsername() {
if (Main.getInstance() != null &&
Main.getInstance().getAuth() != null &&
Main.getInstance().getAuth().getUserProfile() != null) {
return Main.getInstance().getAuth().getUserProfile().getName();
}
return "Unauthorized";
}
private String getActualRole() {
if (Main.getInstance() != null &&
Main.getInstance().getAuth() != null &&
Main.getInstance().getAuth().getUserProfile() != null) {
return Main.getInstance().getAuth().getUserProfile().getRole();
}
return "unauthorized";
}
private String getActualExpire() {
if (Main.getInstance() != null &&
Main.getInstance().getAuth() != null &&
Main.getInstance().getAuth().getUserProfile() != null) {
return Main.getInstance().getAuth().getUserProfile().getExpireDate();
}
return "1970-01-01";
}
private int getActualAccessLevel() {
if (Main.getInstance() != null &&
Main.getInstance().getAuth() != null &&
Main.getInstance().getAuth().getUserProfile() != null) {
return Main.getInstance().getAuth().getUserProfile().getAccessLevel();
}
return 0;
}
}
ЭТО НЕ ЗАЩИТА!! ВАС ТАК И ТАК КРЯКНУТ! ЭТО ДЛЯ ТЕХ У КОГО НЕТ ДЕНЕГ НА НОРМАЛЬНУЮ ЗАЩИТУ! ВАШ ЧИТ ОСТАЕТСЯ ВСЕ РАВНО OPENSOURCE, ГРУБО ГОВОРЯ ЭТО ДЛЯ ТОГО ЧТО БЫ НЕ ИГРАЛИ ДРУГИЕ ТИПЫ С ВАШИМ ЧИТОМ!
