From 7845417ce7dc187cb12d009746e923ca97e3dee4 Mon Sep 17 00:00:00 2001 From: Mateo Date: Fri, 9 Aug 2024 14:48:52 +0200 Subject: [PATCH] Implement Thread pools --- .idea/inspectionProfiles/Project_Default.xml | 2 +- src/fr/motysten/usertwist/exploit/Main.java | 3 +- .../usertwist/exploit/tools/Parser.java | 28 +++++++++++++------ 3 files changed, 23 insertions(+), 10 deletions(-) diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml index ec2d9bf..7f55eaf 100644 --- a/.idea/inspectionProfiles/Project_Default.xml +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -2,7 +2,7 @@ \ No newline at end of file diff --git a/src/fr/motysten/usertwist/exploit/Main.java b/src/fr/motysten/usertwist/exploit/Main.java index fceb939..6d3d194 100644 --- a/src/fr/motysten/usertwist/exploit/Main.java +++ b/src/fr/motysten/usertwist/exploit/Main.java @@ -16,6 +16,7 @@ import java.security.NoSuchAlgorithmException; import java.util.Arrays; import java.util.HashMap; import java.util.Map; +import java.util.concurrent.ExecutionException; public class Main { @@ -28,7 +29,7 @@ public class Main { public static Request requestClient; public static boolean ignoreBots = true; - public static void main(String[] args) throws IOException, InterruptedException, NoSuchAlgorithmException, KeyManagementException { + public static void main(String[] args) throws IOException, InterruptedException, NoSuchAlgorithmException, KeyManagementException, ExecutionException { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); requestClient = new Request(false); diff --git a/src/fr/motysten/usertwist/exploit/tools/Parser.java b/src/fr/motysten/usertwist/exploit/tools/Parser.java index 30747f7..abb971f 100644 --- a/src/fr/motysten/usertwist/exploit/tools/Parser.java +++ b/src/fr/motysten/usertwist/exploit/tools/Parser.java @@ -3,6 +3,12 @@ package fr.motysten.usertwist.exploit.tools; import org.json.JSONArray; import org.json.JSONObject; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -17,28 +23,34 @@ public class Parser { } } - public static void asyncGetPass(JSONArray usersArray, int rotation, boolean ignoreBots) throws InterruptedException { + public static void asyncGetPass(JSONArray usersArray, int rotation, boolean ignoreBots) throws ExecutionException, InterruptedException { + + ExecutorService executor = Executors.newVirtualThreadPerTaskExecutor(); + List> threads = new ArrayList<>(); for (int i = 0; i < usersArray.length(); i++) { int finalI = i; - - Runnable r = () -> parseJSON(usersArray, rotation, ignoreBots, finalI); - - Thread t = Thread.startVirtualThread(r); - t.join(); + Future t = executor.submit(() -> parseJSON(usersArray, rotation, ignoreBots, finalI)); + threads.add(t); + } + for (Future t : threads) { + if (t.get() != null) { + System.out.println(t.get()); + } } } - private static void parseJSON(JSONArray usersArray, int rotation, boolean ignoreBots, int finalI) { + private static String parseJSON(JSONArray usersArray, int rotation, boolean ignoreBots, int finalI) { JSONObject user = usersArray.getJSONObject(finalI); String login = user.getString("username"); String password = Cesar.rotate(user.getString("data"), rotation); final Matcher matcher = pattern.matcher(password); if (!matcher.matches() || !ignoreBots) { - System.out.println((finalI + 1) + ". " + login + " => " + password); + return (finalI + 1) + ". " + login + " => " + password; } + return null; } }