Получение HWID

Надо создать получение HWID для функций бана. Насколько я знаю в Java нету средств для создания HWID по этому покопавшись а интернете я нашел код который получает переменные (которые как я понимаю можно не сложно подменить) и преобразует его в HEX значит при изменении хоть одного параметра всё будет меняться. Вопрос ,как сделать нормальный HWID для нормального бана пользователей чтобы привязка была по железу а не по переменным? Код в комплекте к вопросу.
Java:
public static String getHWID() {
        try{
            String toEncrypt =  System.getenv("COMPUTERNAME") + System.getProperty("user.name") + System.getenv("PROCESSOR_IDENTIFIER") + System.getenv("PROCESSOR_LEVEL");
            MessageDigest md = MessageDigest.getInstance("MD5");
            md.update(toEncrypt.getBytes());
            StringBuffer hexString = new StringBuffer();
           
            byte byteData[] = md.digest();
           
            for (byte aByteData : byteData) {
                String hex = Integer.toHexString(0xff & aByteData);
                if (hex.length() == 1) hexString.append('0');
                hexString.append(hex);
            }
           
            return hexString.toString();
        } catch (Exception e) {
            e.printStackTrace();
            return "Error";
        }
    }
   
}
UPD: Еще на гите есть такой вариант
Java:
public class HWID {
    private final static char[] hexArray = "0123456789ABCDEF".toCharArray();

    public static byte[] generateHWID() {
        try {
            MessageDigest hash = MessageDigest.getInstance("MD5");

            String s = System.getProperty("os.name") +
                    System.getProperty("os.arch") +
                    System.getProperty("os.version") +
                    Runtime.getRuntime().availableProcessors() +
                    System.getenv("PROCESSOR_IDENTIFIER") +
                    System.getenv("PROCESSOR_ARCHITECTURE") +
                    System.getenv("PROCESSOR_ARCHITEW6432") +
                    System.getenv("NUMBER_OF_PROCESSORS");
            return hash.digest(s.getBytes());
        } catch (NoSuchAlgorithmException e) {
            throw new Error("Algorithm wasn't found.", e);
        }

    }

    public static byte[] hexStringToByteArray(String s) {
        int len = s.length();
        byte[] data = new byte[len / 2];
        for (int i = 0; i < len; i += 2) {
            data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)
                    + Character.digit(s.charAt(i + 1), 16));
        }
        return data;
    }

    public static String bytesToHex(byte[] bytes) {
        char[] hexChars = new char[bytes.length * 2];
        for (int j = 0; j < bytes.length; j++) {
            int v = bytes[j] & 0xFF;
            hexChars[j * 2] = hexArray[v >>> 4];
            hexChars[j * 2 + 1] = hexArray[v & 0x0F];
        }
        return new String(hexChars);
    }
 
Последнее редактирование:

tox1cozZ

aka Agravaine
8,454
598
2,890
Любые значения можно подменить, так что бан по железу лишь усложняет это. Радует лишь то что множество игроков не разбираются в этом всем.
Лучше писать нативку на плюсах, наверное, и там уже доставать все эти данные.
Простой вариант - библиотека oshi: oshi/oshi
 

jopi

Попрошайка
1,421
30
260
а если не хочешь oshi используй незаконные методы за которые быстро и оперативно могут посадить на бутылку.
даже oshi можно подменить, спуферы нынче не роскошь, да и кто мешает просто взять да лаунчер пропатчить? Занимайтесь защитой по полной а не только банами hwid через реестровые значения
 

Icosider

Kotliner
Администратор
3,600
99
663
Макак или пингвин. Привязка по железу - тупо. Лучше блокнуть акк и пусть регает ещё акки, чем постоянно трахать себе мозг на счёт клиентской защиты
 

will0376

Токсичная личность
2,059
55
572
клиентской защиты
клиентская защита - херня полнейшая(доказано многочисленными обходами лаунчеров и т.п.).Надо защищать протокол(пакетхаки и т.п.) и сам сервер(всякие дырки с дюпом чанками и етк.)
Но для этого надо переписать сеть у кубача... Либо сильно любиться с сервером.
Могу быть не прав, но это моё мнение.
Во всяком случае - у нас теперь есть инструменты(АТ,хуки,Миксины, ASM, либо напрямую форджу отредачить), а значит и есть возможность...
 

Icosider

Kotliner
Администратор
3,600
99
663
7,099
324
1,509
170
2
53
Ванильные чтоли?
Зачастую это криворукость разработчиков модов, который слушают пакеты на сервере и по их приходу выполняют определенное действие. Но не всегда этот пакет отправляют их же моды в необходимых условиях :)

А моджанги не фиксят такое?
Моджангам зачем это фиксить то?
 
7,099
324
1,509
Зачастую это криворукость разработчиков модов, который слушают пакеты на сервере и по их приходу выполняют определенное действие
Как связаны дюпы чанков с модовыми пакетами?
 
  • Haha
Реакции: jopi

jopi

Попрошайка
1,421
30
260
Посмотри исходники гравит лаунчера, там это все есть
и гравит так-же щелкают как семки, браво


Ванильные чтоли? А моджанги не фиксят такое?
фиксят, но не сразу, чанкдюп вообще сколько лет жил

P.S. майнкрафт сам по себе баг на баге, точно такой-же как и сотню раз переасфальтированный асфальт с 1000 слоев других видов асфальта(звучит как эксперимент влада А4), так-же чего стоят баги с 'дюпом' игрока, когда игрок зашел 2 раза на сервер, но теряет контроль над первой копией(по факту даже если разорвать соединение отключив инет, первая копия игрока останется на сервере), а если по форджу то ForgeOMB не безызвестный
 

Icosider

Kotliner
Администратор
3,600
99
663
Давно уже все закрыли этот дюп с двумя игроками, а если и не все, то это их проблемы. Чанкдюпы в основном из-за модов, нежели из-за моджангов.
 

jopi

Попрошайка
1,421
30
260
@Icosider, ванильный майн, книги с китайскими символами и шалкеры, больше ничего не нужно было
 
Привет. Можно детектить через wmic

Java:
public void MotherBoardGetSerialNumber() throws IOException, InterruptedException {

        String commandString = "cmd /c" + "wmic baseboard get serialnumber";

        Process proccesCommandString = Runtime.getRuntime().exec(commandString);
        proccesCommandString.waitFor();


        BufferedReader reader = new BufferedReader(new InputStreamReader(proccesCommandString.getInputStream()));

        String line;
        StringBuilder MotherBoardSerialNumber = new StringBuilder();

        while ((line = reader.readLine()) != null) {
            MotherBoardSerialNumber.append(line);
        }

       // System.out.println(MotherBoardSerialNumber);
        JOptionPane.showMessageDialog(null,MotherBoardSerialNumber, "MotherInfo", JOptionPane.INFORMATION_MESSAGE);
    }
 
Сверху