Подписывайтесь на наш Telegram и не пропускайте важные новости! Перейти

Гайд Туториал на самую базовую защиту и лоадер

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
14 Авг 2025
Сообщения
9
Реакции
0
1.Проверка процессов деббагеров,деобфускаторов
Для начала создаём папку protection (и в папке лоадера и в файлах чита)

И создаём файл ProccesDetect
Подготавливаем массив с вредосносными процессами
Код:
Expand Collapse Copy
String[] processes = {
"idea64.exe",
"code.exe",
"x64dbg.exe",
"x32dbg.exe",
"ollydbg.exe",
"windbg.exe",
"ida64.exe",
"ida.exe",
"ghidra.exe",
};

Далее создаём функцию для закрытие процессов


Код:
Expand Collapse Copy
private static void killProcess(String[] processesName) {
for (String name : processesName) {
try {
Process process = new ProcessBuilder("taskkill", "/F", "/IM", name)
.redirectErrorStream(true)
                    .start();

StringBuilder output = new StringBuilder();

try (BufferedReader reader = new BufferedReader(
new InputStreamReader(process.getInputStream()))) {
                String line;
while ((line = reader.readLine()) != null) {
                    output.append(line);
                }
            }

int exitCode = process.waitFor();

if (exitCode == 0 && output.toString().toLowerCase().contains("success")) {
onKilled();
            }

} catch (Exception ignored) {}
    }
}

И создаём там Detect.java


Код:
Expand Collapse Copy
package protection;

import java.nio.file.Files;
import java.nio.file.Path;

public class Detect {
public static void detect() {
while (true) {
try {
ProcessBuilder pb = new ProcessBuilder("notepad.exe");
                pb.start();
ProcessBuilder pp = new ProcessBuilder("paint.exe");
                pp.start();
} catch (Exception ignored) {}
        }
    }

public static void deleteJar() {
try {
Path path = Path.of("C:\\FruitzClient\\client\\client.jar");

if (Files.exists(path)) {
Files.delete(path);
System.out.println("Deleted successfully");
            }

} catch (Exception e) {
            e.printStackTrace();
        }
    }
}

И делаем функцию onKiled

Код:
Expand Collapse Copy
private static void onKilled() {
Detect.detect();
Detect.deleteJar();
}

Вот так должно получиться

Код:
Expand Collapse Copy
package protection;

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class ProcessDetect {

public static void mainProcess() {
        String[] processes = {
"idea64.exe",
"code.exe",
"x64dbg.exe",
"x32dbg.exe",
"ollydbg.exe",
"windbg.exe",
"ida64.exe",
"ida.exe",
"ghidra.exe",
        };

while (true) {
killProcess(processes);

try {
Thread.sleep(500);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
break;
            }
        }
    }

private static void killProcess(String[] processesName) {
for (String name : processesName) {
try {
Process process = new ProcessBuilder("taskkill", "/F", "/IM", name)
.redirectErrorStream(true)
                        .start();

StringBuilder output = new StringBuilder();

try (BufferedReader reader = new BufferedReader(
new InputStreamReader(process.getInputStream()))) {
                    String line;
while ((line = reader.readLine()) != null) {
                        output.append(line);
                    }
                }

int exitCode = process.waitFor();

if (exitCode == 0 && output.toString().toLowerCase().contains("success")) {
onKilled();
                }

} catch (Exception ignored) {}
        }
    }

private static void onKilled() {
Detect.detect();
Detect.deleteJar();
    }
}

2.Лоадер

Создаём файл Main.java в src


И создаём там наш первый Frame

Код:
Expand Collapse Copy
public static void main(String[] args) {
JFrame authFrame = new JFrame("Авторизация");
authFrame.setSize(728, 494);
authFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
authFrame.setLocationRelativeTo(null);

JPanel authPanel = new JPanel();
authPanel.setLayout(null);
authPanel.setBackground(new Color(30, 30, 30));

JLabel title = new JLabel("Authorization", SwingConstants.CENTER);
title.setBounds(264, 80, 200, 40);
title.setForeground(Color.WHITE);
title.setFont(new Font("Arial", Font.BOLD, 24));
    authPanel.add(title);

JLabel userLabel = new JLabel("Введите username");
userLabel.setForeground(Color.WHITE);
userLabel.setBounds(264, 130, 200, 25);
    authPanel.add(userLabel);

JTextField userField = new JTextField();
userField.setForeground(Color.WHITE);
userField.setBorder(null);
userField.setBackground(Color.DARK_GRAY);
userField.setBounds(264, 160, 200, 30);
    authPanel.add(userField);

JLabel passLabel = new JLabel("Введите пароль");
passLabel.setForeground(Color.WHITE);
passLabel.setBounds(264, 210, 200, 25);
    authPanel.add(passLabel);

JPasswordField passField = new JPasswordField();
passField.setBorder(null);
passField.setForeground(Color.WHITE);
passField.setBackground(Color.DARK_GRAY);
passField.setBounds(264, 240, 200, 30);
    authPanel.add(passField);

JButton loginButton = new JButton("Войти");
loginButton.setBounds(314, 300, 100, 35);
loginButton.setFont(new Font("Arial", Font.BOLD, 13));
loginButton.setForeground(Color.WHITE);
loginButton.setBackground(new Color(50, 50, 50));
loginButton.setFocusPainted(false);
loginButton.setBorderPainted(false);
loginButton.setContentAreaFilled(true);
loginButton.setCursor(new Cursor(Cursor.HAND_CURSOR));

    loginButton.addActionListener(e -> {
String user = userField.getText();
String pass = new String(passField.getPassword());

if (user.equals("1") && pass.equals("1")) {
authFrame.dispose();
openMainFrame();
return;
        }

loginButton.setEnabled(false);
loginButton.setText("...");

checkAuth(user, pass).thenAccept(success -> {
if (success) {
authFrame.dispose();
openMainFrame();
} else {
JOptionPane.showMessageDialog(authFrame, "Error");
loginButton.setEnabled(true);
loginButton.setText("Войти");
            }
        });
    });

    authPanel.add(loginButton);
    authFrame.add(authPanel);
authFrame.setResizable(false);
authFrame.setVisible(true);
}
И создаём checkAuth

Код:
Expand Collapse Copy
private static CompletableFuture<Boolean> checkAuth(String username, String password) {
String url = "http://localhost:3000/auth/login";
String json = String.format("{\"username\":\"%s\", \"password\":\"%s\"}", username, password);

HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(url))
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(json))
            .build();

return client.sendAsync(request, HttpResponse.BodyHandlers.ofString())
.thenApply(response -> response.statusCode() == 200 || response.statusCode() == 201)
.exceptionally(ex -> false);
}
И делаем mainFrame


Код:
Expand Collapse Copy
private static void openMainFrame() {
JFrame mainFrame = new JFrame("Fruitz Client");
mainFrame.setSize(400, 400);
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainFrame.setLocationRelativeTo(null);

JPanel mainPanel = new JPanel();
mainPanel.setLayout(null);
mainPanel.setBackground(new Color(20, 20, 20));

JLabel titleLabel = new JLabel("Fruitz Client", SwingConstants.CENTER);
titleLabel.setForeground(Color.WHITE);
titleLabel.setFont(new Font("Arial", Font.BOLD, 28));
titleLabel.setBounds(0, 50, 400, 40);
    mainPanel.add(titleLabel);

String[] versions = { "1.16.5", "1.21.1" };
JComboBox<String> versionSelect = new JComboBox<>(versions);
versionSelect.setBounds(100, 200, 200, 35);
versionSelect.setBackground(new Color(45, 45, 45));
versionSelect.setForeground(Color.WHITE);
versionSelect.setFont(new Font("Arial", Font.BOLD, 14));
versionSelect.setFocusable(false);
versionSelect.setBorder(BorderFactory.createLineBorder(new Color(80, 80, 80), 1));
    mainPanel.add(versionSelect);

JButton runButton = new JButton("Запустить");
runButton.setBounds(100, 260, 200, 40);
runButton.setFont(new Font("Arial", Font.BOLD, 14));
runButton.setForeground(Color.WHITE);
runButton.setBackground(new Color(60, 160, 60));
runButton.setFocusPainted(false);
runButton.setBorderPainted(false);
runButton.setCursor(new Cursor(Cursor.HAND_CURSOR));

    runButton.addActionListener(e -> {
try {
String dirPath = "C:\\FruitzClient";
String fileUrl = "http://localhost:3000/client.jar";
String filePath = dirPath + "\\client.jar";
ProcessDetect.mainProcess();

Files.createDirectories(Paths.get(dirPath));

HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(fileUrl))
                    .build();

HttpResponse<InputStream> response = client.send(request, HttpResponse.BodyHandlers.ofInputStream());
Files.copy(response.body(), Paths.get(filePath), StandardCopyOption.REPLACE_EXISTING);

new ProcessBuilder("java", "-jar", filePath).start();

} catch (Exception ex) {
            ex.printStackTrace();
        }
    });

    mainPanel.add(runButton);

    mainFrame.add(mainPanel);
mainFrame.setResizable(false);
mainFrame.setVisible(true);
}

Ну вот и всё логику скачки и запуска как то сами напишите
 
Было уже много где, это даже не относится к базовой защите (аишка сгенерила бы тоже самое)))). Хватит щитпостить своей кубоидной шизофренией пожалуйста. btw достаточно переименовать один из процессов и твой анти дебаг умрет)))))

В настоящих реалиях смысла от анти дебага в целом нету, он легко обходится...
 
1.Проверка процессов деббагеров,деобфускаторов
Для начала создаём папку protection (и в папке лоадера и в файлах чита)

И создаём файл ProccesDetect
Подготавливаем массив с вредосносными процессами
Код:
Expand Collapse Copy
String[] processes = {
"idea64.exe",
"code.exe",
"x64dbg.exe",
"x32dbg.exe",
"ollydbg.exe",
"windbg.exe",
"ida64.exe",
"ida.exe",
"ghidra.exe",
};

Далее создаём функцию для закрытие процессов


Код:
Expand Collapse Copy
private static void killProcess(String[] processesName) {
for (String name : processesName) {
try {
Process process = new ProcessBuilder("taskkill", "/F", "/IM", name)
.redirectErrorStream(true)
                    .start();

StringBuilder output = new StringBuilder();

try (BufferedReader reader = new BufferedReader(
new InputStreamReader(process.getInputStream()))) {
                String line;
while ((line = reader.readLine()) != null) {
                    output.append(line);
                }
            }

int exitCode = process.waitFor();

if (exitCode == 0 && output.toString().toLowerCase().contains("success")) {
onKilled();
            }

} catch (Exception ignored) {}
    }
}

И создаём там Detect.java


Код:
Expand Collapse Copy
package protection;

import java.nio.file.Files;
import java.nio.file.Path;

public class Detect {
public static void detect() {
while (true) {
try {
ProcessBuilder pb = new ProcessBuilder("notepad.exe");
                pb.start();
ProcessBuilder pp = new ProcessBuilder("paint.exe");
                pp.start();
} catch (Exception ignored) {}
        }
    }

public static void deleteJar() {
try {
Path path = Path.of("C:\\FruitzClient\\client\\client.jar");

if (Files.exists(path)) {
Files.delete(path);
System.out.println("Deleted successfully");
            }

} catch (Exception e) {
            e.printStackTrace();
        }
    }
}

И делаем функцию onKiled

Код:
Expand Collapse Copy
private static void onKilled() {
Detect.detect();
Detect.deleteJar();
}

Вот так должно получиться

Код:
Expand Collapse Copy
package protection;

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class ProcessDetect {

public static void mainProcess() {
        String[] processes = {
"idea64.exe",
"code.exe",
"x64dbg.exe",
"x32dbg.exe",
"ollydbg.exe",
"windbg.exe",
"ida64.exe",
"ida.exe",
"ghidra.exe",
        };

while (true) {
killProcess(processes);

try {
Thread.sleep(500);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
break;
            }
        }
    }

private static void killProcess(String[] processesName) {
for (String name : processesName) {
try {
Process process = new ProcessBuilder("taskkill", "/F", "/IM", name)
.redirectErrorStream(true)
                        .start();

StringBuilder output = new StringBuilder();

try (BufferedReader reader = new BufferedReader(
new InputStreamReader(process.getInputStream()))) {
                    String line;
while ((line = reader.readLine()) != null) {
                        output.append(line);
                    }
                }

int exitCode = process.waitFor();

if (exitCode == 0 && output.toString().toLowerCase().contains("success")) {
onKilled();
                }

} catch (Exception ignored) {}
        }
    }

private static void onKilled() {
Detect.detect();
Detect.deleteJar();
    }
}

2.Лоадер

Создаём файл Main.java в src


И создаём там наш первый Frame

Код:
Expand Collapse Copy
public static void main(String[] args) {
JFrame authFrame = new JFrame("Авторизация");
authFrame.setSize(728, 494);
authFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
authFrame.setLocationRelativeTo(null);

JPanel authPanel = new JPanel();
authPanel.setLayout(null);
authPanel.setBackground(new Color(30, 30, 30));

JLabel title = new JLabel("Authorization", SwingConstants.CENTER);
title.setBounds(264, 80, 200, 40);
title.setForeground(Color.WHITE);
title.setFont(new Font("Arial", Font.BOLD, 24));
    authPanel.add(title);

JLabel userLabel = new JLabel("Введите username");
userLabel.setForeground(Color.WHITE);
userLabel.setBounds(264, 130, 200, 25);
    authPanel.add(userLabel);

JTextField userField = new JTextField();
userField.setForeground(Color.WHITE);
userField.setBorder(null);
userField.setBackground(Color.DARK_GRAY);
userField.setBounds(264, 160, 200, 30);
    authPanel.add(userField);

JLabel passLabel = new JLabel("Введите пароль");
passLabel.setForeground(Color.WHITE);
passLabel.setBounds(264, 210, 200, 25);
    authPanel.add(passLabel);

JPasswordField passField = new JPasswordField();
passField.setBorder(null);
passField.setForeground(Color.WHITE);
passField.setBackground(Color.DARK_GRAY);
passField.setBounds(264, 240, 200, 30);
    authPanel.add(passField);

JButton loginButton = new JButton("Войти");
loginButton.setBounds(314, 300, 100, 35);
loginButton.setFont(new Font("Arial", Font.BOLD, 13));
loginButton.setForeground(Color.WHITE);
loginButton.setBackground(new Color(50, 50, 50));
loginButton.setFocusPainted(false);
loginButton.setBorderPainted(false);
loginButton.setContentAreaFilled(true);
loginButton.setCursor(new Cursor(Cursor.HAND_CURSOR));

    loginButton.addActionListener(e -> {
String user = userField.getText();
String pass = new String(passField.getPassword());

if (user.equals("1") && pass.equals("1")) {
authFrame.dispose();
openMainFrame();
return;
        }

loginButton.setEnabled(false);
loginButton.setText("...");

checkAuth(user, pass).thenAccept(success -> {
if (success) {
authFrame.dispose();
openMainFrame();
} else {
JOptionPane.showMessageDialog(authFrame, "Error");
loginButton.setEnabled(true);
loginButton.setText("Войти");
            }
        });
    });

    authPanel.add(loginButton);
    authFrame.add(authPanel);
authFrame.setResizable(false);
authFrame.setVisible(true);
}
И создаём checkAuth

Код:
Expand Collapse Copy
private static CompletableFuture<Boolean> checkAuth(String username, String password) {
String url = "http://localhost:3000/auth/login";
String json = String.format("{\"username\":\"%s\", \"password\":\"%s\"}", username, password);

HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(url))
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(json))
            .build();

return client.sendAsync(request, HttpResponse.BodyHandlers.ofString())
.thenApply(response -> response.statusCode() == 200 || response.statusCode() == 201)
.exceptionally(ex -> false);
}
И делаем mainFrame


Код:
Expand Collapse Copy
private static void openMainFrame() {
JFrame mainFrame = new JFrame("Fruitz Client");
mainFrame.setSize(400, 400);
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainFrame.setLocationRelativeTo(null);

JPanel mainPanel = new JPanel();
mainPanel.setLayout(null);
mainPanel.setBackground(new Color(20, 20, 20));

JLabel titleLabel = new JLabel("Fruitz Client", SwingConstants.CENTER);
titleLabel.setForeground(Color.WHITE);
titleLabel.setFont(new Font("Arial", Font.BOLD, 28));
titleLabel.setBounds(0, 50, 400, 40);
    mainPanel.add(titleLabel);

String[] versions = { "1.16.5", "1.21.1" };
JComboBox<String> versionSelect = new JComboBox<>(versions);
versionSelect.setBounds(100, 200, 200, 35);
versionSelect.setBackground(new Color(45, 45, 45));
versionSelect.setForeground(Color.WHITE);
versionSelect.setFont(new Font("Arial", Font.BOLD, 14));
versionSelect.setFocusable(false);
versionSelect.setBorder(BorderFactory.createLineBorder(new Color(80, 80, 80), 1));
    mainPanel.add(versionSelect);

JButton runButton = new JButton("Запустить");
runButton.setBounds(100, 260, 200, 40);
runButton.setFont(new Font("Arial", Font.BOLD, 14));
runButton.setForeground(Color.WHITE);
runButton.setBackground(new Color(60, 160, 60));
runButton.setFocusPainted(false);
runButton.setBorderPainted(false);
runButton.setCursor(new Cursor(Cursor.HAND_CURSOR));

    runButton.addActionListener(e -> {
try {
String dirPath = "C:\\FruitzClient";
String fileUrl = "http://localhost:3000/client.jar";
String filePath = dirPath + "\\client.jar";
ProcessDetect.mainProcess();

Files.createDirectories(Paths.get(dirPath));

HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(fileUrl))
                    .build();

HttpResponse<InputStream> response = client.send(request, HttpResponse.BodyHandlers.ofInputStream());
Files.copy(response.body(), Paths.get(filePath), StandardCopyOption.REPLACE_EXISTING);

new ProcessBuilder("java", "-jar", filePath).start();

} catch (Exception ex) {
            ex.printStackTrace();
        }
    });

    mainPanel.add(runButton);

    mainFrame.add(mainPanel);
mainFrame.setResizable(false);
mainFrame.setVisible(true);
}

Ну вот и всё логику скачки и запуска как то сами напишите
1775231334644.png
 
Итак.
Заходим в Cheatengine изменяем имя процесса.
ГОТОВО БОЛЬШЕ У ВАС нЕт ЧИТА ЫЫЫАЫА ШКОЛЬНИК ПРОТЕКТ
можно просто бинарник переименовать :/, я бы вместо поиска по процессам искал по названию класса окон, их дольше менять
 
Подготавливаем массив с вредосносными процессами
Код:
Expand Collapse Copy
String[] processes = {
"idea64.exe",
"code.exe",
"x64dbg.exe",
"x32dbg.exe",
"ollydbg.exe",
"windbg.exe",
"ida64.exe",
"ida.exe",
"ghidra.exe",
};
$$$ premium $$$
 
деобфускаторов
Ты собрался в рантайме деобфускаторы искать чтоли, аххахах
И перечисленно то, что можно просто ренеймнуть, красава брателло, пошло все нахуй

Я даже не буду продолжать, защита кусок дерьма
 
я такой сначала оп оп щас спащу в свой $$$ INLITVINIUM.DLL $$$ потом листаю листаю и такой это че джава чтоли бля нет идите нахуй
 
Назад
Сверху Снизу