Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.io.BufferedReader;
- import java.io.FileNotFoundException;
- import java.io.FileReader;
- import java.io.IOException;
- import java.util.ArrayList;
- import java.util.List;
- /**
- *
- * @author axel myrberg
- */
- public class PasswordCrack {
- public static void main(String[] args) throws IOException {
- // Fill lists from files
- Dictionary dict = new Dictionary(args[0]);
- User users[] = LoadUsers(args[1]);
- // Seed users names to dictionary
- AddNamesToDict(dict, users);
- String pass[] = null; // This does nothing, cba to refactor
- RoundOne(users, dict, pass);
- RoundTwo(users, dict, pass);
- RoundThree(users, dict, pass);
- }
- private static void RoundThree(User[] users, Dictionary dict, String[] pass) {
- for (int x = 48; x <= 122; x++) {
- for (int u = 0; u < users.length; u++) {
- if (users[u].password != null) {
- System.out.println(users[u]);
- }
- }
- System.out.println("Round three x: " + (char) x);
- if (x == 58) {
- x = 65;
- }
- if (x == 90) {
- x = 97;
- }
- for (int i = 0; i < 14; i++) {
- ResetDict(dict);
- RunFunc(users, dict, pass, i, x);
- SaveMangle(dict);
- for (int k = 0; k < 14; k++) {
- RunFunc(users, dict, pass, k, x);
- ResetMangle(dict);
- }
- }
- }
- }
- private static void RunFunc(User[] users, Dictionary dict, String[] pass, int col, int k) {
- switch (col) {
- case 0:
- DeleteLast(users, dict, pass);
- break;
- case 1:
- DeleteFirst(users, dict, pass);
- break;
- case 2:
- Reverse(users, dict, pass);
- break;
- case 3:
- Duplicate(users, dict, pass);
- break;
- case 4:
- ReflectForward(users, dict, pass);
- break;
- case 5:
- ReflectBackward(users, dict, pass);
- break;
- case 6:
- Duplicate(users, dict, pass);
- break;
- case 7:
- Uppercase(users, dict, pass);
- break;
- case 8:
- Lowercase(users, dict, pass);
- break;
- case 9:
- Capitalize(users, dict, pass);
- break;
- case 10:
- NCapitalize(users, dict, pass);
- break;
- case 11:
- ToggleCaseEven(users, dict, pass);
- break;
- case 12:
- ToggleCaseOdd(users, dict, pass);
- break;
- case 13:
- Append(users, dict, pass, k);
- break;
- case 14:
- Prepend(users, dict, pass, k);
- break;
- }
- }
- private static void RoundOne(User[] users, Dictionary dict, String[] pass) {
- CompareCrypt(users, dict, pass);
- ResetDict(dict);
- System.out.println("--------- Round One Complete ---------");
- }
- private static void RoundTwo(User[] users, Dictionary dict, String[] pass) {
- /*
- for (int i = 48; i <= 122; i++) {
- if (i == 58) {
- i = 65;
- }
- if (i == 90) {
- i = 97;
- }
- Prepend(users, dict, pass, i);
- System.out.println("Prepend compared");
- ResetDict(dict);
- Append(users, dict, pass, i);
- System.out.println("Append compared");
- ResetDict(dict);
- }
- */
- DeleteLast(users, dict, pass);
- ResetDict(dict);
- System.out.println("DeleteLast compared");
- DeleteFirst(users, dict, pass);
- ResetDict(dict);
- System.out.println("DeleteFirst compared");
- Reverse(users, dict, pass);
- ResetDict(dict);
- System.out.println("Reverse compared");
- Duplicate(users, dict, pass);
- ResetDict(dict);
- System.out.println("Duplicate compared");
- ReflectForward(users, dict, pass);
- ResetDict(dict);
- System.out.println("ReflectForward compared");
- ReflectBackward(users, dict, pass);
- ResetDict(dict);
- System.out.println("ReflectBackward compared");
- Uppercase(users, dict, pass);
- ResetDict(dict);
- System.out.println("Uppercase compared");
- Lowercase(users, dict, pass);
- ResetDict(dict);
- System.out.println("Lowercase compared");
- Capitalize(users, dict, pass);
- ResetDict(dict);
- System.out.println("Capitalize compared");
- NCapitalize(users, dict, pass);
- ResetDict(dict);
- System.out.println("NCapitalize compared");
- ToggleCaseEven(users, dict, pass);
- ResetDict(dict);
- System.out.println("ToggleCaseEven compared");
- ToggleCaseOdd(users, dict, pass);
- ResetDict(dict);
- System.out.println("ToggleCaseOdd compared");
- System.out.println("--------- Round Two Complete ---------");
- }
- static void AddNamesToDict(Dictionary dict, User[] users) {
- Cell prev = dict.start;
- for (int i = 0; i < users.length; i++) {
- Cell temp = prev;
- prev = new Cell(users[i].firstName);
- prev.next = temp;
- temp = prev;
- prev = new Cell(users[i].lastName);
- prev.next = temp;
- }
- dict.start = prev;
- }
- public static User[] LoadUsers(String file) throws FileNotFoundException, IOException {
- BufferedReader in = new BufferedReader(new FileReader(file));
- String str;
- List<User> list = new ArrayList<User>();
- while ((str = in.readLine()) != null) {
- User user = new User(str);
- list.add(user);
- }
- User[] userArray = list.toArray(new User[0]);
- return userArray;
- }
- private static void CompareCrypt(User[] users, Dictionary dict, String[] pass) {
- for (int i = 0; i < users.length; i++) {
- Cell curr = dict.start;
- while (curr.next != null) {
- String crypt = jcrypt.crypt(users[i].salt, curr.mangled.toString());
- if (crypt.equals(users[i].hash)) {
- if (users[i].password == null) {
- users[i].password = curr.mangled.toString();
- System.out.println("PASSWORD CRACKED:" + users[i]);
- }
- }
- curr = curr.next;
- }
- }
- }
- private static void Compare(User[] users, Dictionary dict, String[] pass) {
- for (int i = 0; i < users.length; i++) {
- Cell curr = dict.start;
- while (curr.next != null) {
- if (pass[i].equals(curr.mangled.toString())) {
- users[i].password = pass[i];
- }
- curr = curr.next;
- }
- }
- }
- private static String[] LoadPasswords(String file) throws IOException {
- BufferedReader in = new BufferedReader(new FileReader(file));
- String str;
- List<String> list = new ArrayList<String>();
- while ((str = in.readLine()) != null) {
- String user = new String(str);
- list.add(user);
- }
- String[] userArray = list.toArray(new String[0]);
- return userArray;
- }
- private static void ResetDict(Dictionary dict) {
- Cell curr = dict.start;
- while (curr != null) {
- curr.mangled.setLength(0);
- curr.mangled.append(curr.original);
- curr = curr.next;
- }
- }
- private static void Prepend(User[] users, Dictionary dict, String[] pass, int i) {
- Cell curr = dict.start;
- while (curr != null) {
- curr.mangled.reverse().append((char) i);
- curr.mangled.reverse();
- curr = curr.next;
- }
- CompareCrypt(users, dict, pass);
- }
- private static void Append(User[] users, Dictionary dict, String[] pass, int i) {
- if (i == 58) {
- i = 65;
- }
- if (i == 90) {
- i = 97;
- }
- Cell curr = dict.start;
- while (curr != null) {
- curr.mangled.append((char) i);
- curr = curr.next;
- }
- CompareCrypt(users, dict, pass);
- }
- private static void DeleteLast(User[] users, Dictionary dict, String[] pass) {
- Cell curr = dict.start;
- while (curr != null) {
- if (curr.mangled.length() <= 1) {
- curr = curr.next;
- continue;
- }
- curr.mangled.setLength(curr.mangled.length() - 1);
- curr = curr.next;
- }
- CompareCrypt(users, dict, pass);
- }
- private static void DeleteFirst(User[] users, Dictionary dict, String[] pass) {
- Cell curr = dict.start;
- while (curr != null) {
- if (curr.mangled.length() <= 1) {
- curr = curr.next;
- continue;
- }
- curr.mangled.reverse();
- curr.mangled.setLength(curr.mangled.length() - 1);
- curr.mangled.reverse();
- curr = curr.next;
- }
- CompareCrypt(users, dict, pass);
- }
- private static void Reverse(User[] users, Dictionary dict, String[] pass) {
- Cell curr = dict.start;
- while (curr != null) {
- curr.mangled.reverse();
- curr = curr.next;
- }
- CompareCrypt(users, dict, pass);
- }
- private static void Duplicate(User[] users, Dictionary dict, String[] pass) {
- Cell curr = dict.start;
- while (curr != null) {
- curr.mangled.append(curr.mangled.toString());
- curr = curr.next;
- }
- CompareCrypt(users, dict, pass);
- }
- private static void ReflectForward(User[] users, Dictionary dict, String[] pass) {
- Cell curr = dict.start;
- while (curr != null) {
- curr.mangled.reverse();
- String temp = curr.mangled.toString();
- curr.mangled.reverse();
- curr.mangled.append(temp);
- curr = curr.next;
- }
- CompareCrypt(users, dict, pass);
- }
- private static void ReflectBackward(User[] users, Dictionary dict, String[] pass) {
- Cell curr = dict.start;
- while (curr != null) {
- String temp = curr.mangled.toString();
- curr.mangled.reverse();
- curr.mangled.append(temp);
- curr = curr.next;
- }
- CompareCrypt(users, dict, pass);
- }
- private static void Uppercase(User[] users, Dictionary dict, String[] pass) {
- Cell curr = dict.start;
- while (curr != null) {
- String temp = curr.mangled.toString().toUpperCase();
- curr.mangled.setLength(0);
- curr.mangled.append(temp);
- curr = curr.next;
- }
- CompareCrypt(users, dict, pass);
- }
- private static void Lowercase(User[] users, Dictionary dict, String[] pass) {
- Cell curr = dict.start;
- while (curr != null) {
- String temp = curr.mangled.toString().toLowerCase();
- curr.mangled.setLength(0);
- curr.mangled.append(temp);
- curr = curr.next;
- }
- CompareCrypt(users, dict, pass);
- }
- private static void Capitalize(User[] users, Dictionary dict, String[] pass) {
- Cell curr = dict.start;
- while (curr != null) {
- if (curr.mangled.charAt(0) < 58) {
- } else if ((curr.mangled.charAt(0) >= 65) && (curr.mangled.charAt(0) <= 90)) {
- curr.mangled.setCharAt(0, (char) (curr.mangled.charAt(0) + 32));
- } else if ((curr.mangled.charAt(0) >= 97) && (curr.mangled.charAt(0) <= 122)) {
- curr.mangled.setCharAt(0, (char) (curr.mangled.charAt(0) - 32));
- }
- curr = curr.next;
- }
- CompareCrypt(users, dict, pass);
- }
- private static void NCapitalize(User[] users, Dictionary dict, String[] pass) {
- Cell curr = dict.start;
- while (curr != null) {
- char tempChar = curr.mangled.charAt(0);
- curr.mangled.reverse();
- curr.mangled.setLength(curr.mangled.length() - 1);
- String temp = curr.mangled.toString().toUpperCase();
- curr.mangled.setLength(0);
- curr.mangled.append(temp);
- curr.mangled.append(tempChar);
- curr.mangled.reverse();
- curr = curr.next;
- }
- CompareCrypt(users, dict, pass);
- }
- private static void ToggleCaseEven(User[] users, Dictionary dict, String[] pass) {
- Cell curr = dict.start;
- while (curr != null) {
- for (int i = 0; i < curr.mangled.length(); i++) {
- if (i % 2 == 0) {
- if (curr.mangled.charAt(0) < 58) {
- } else if ((curr.mangled.charAt(i) >= 65) && (curr.mangled.charAt(i) <= 90)) {
- curr.mangled.setCharAt(i, (char) (curr.mangled.charAt(i) + 32));
- } else if ((curr.mangled.charAt(i) >= 97) && (curr.mangled.charAt(i) <= 122)) {
- curr.mangled.setCharAt(i, (char) (curr.mangled.charAt(i) - 32));
- }
- }
- }
- curr = curr.next;
- }
- CompareCrypt(users, dict, pass);
- }
- private static void ToggleCaseOdd(User[] users, Dictionary dict, String[] pass) {
- Cell curr = dict.start;
- while (curr != null) {
- for (int i = 0; i < curr.mangled.length(); i++) {
- if (i % 2 != 0) {
- if (curr.mangled.charAt(0) < 58) {
- } else if ((curr.mangled.charAt(i) >= 65) && (curr.mangled.charAt(i) <= 90)) {
- curr.mangled.setCharAt(i, (char) (curr.mangled.charAt(i) + 32));
- } else if ((curr.mangled.charAt(i) >= 97) && (curr.mangled.charAt(i) <= 122)) {
- curr.mangled.setCharAt(i, (char) (curr.mangled.charAt(i) - 32));
- }
- }
- }
- curr = curr.next;
- }
- CompareCrypt(users, dict, pass);
- }
- private static void ResetMangle(Dictionary dict) {
- Cell curr = dict.start;
- while (curr != null) {
- curr.mangled.setLength(0);
- curr.mangled.append(curr.tempMangled);
- curr = curr.next;
- }
- }
- private static void SaveMangle(Dictionary dict) {
- Cell curr = dict.start;
- while (curr != null) {
- curr.tempMangled = curr.mangled.toString();
- curr = curr.next;
- }
- }
- }
- class Cell {
- Cell next;
- StringBuilder mangled;
- String original;
- String tempMangled;
- public Cell() {
- }
- public Cell(String original) {
- original = original.replaceAll("[-+.^:,]", "");
- this.mangled = new StringBuilder(original);
- this.original = original;
- }
- @Override
- public String toString() {
- return "Cell{" + "mangled=" + mangled + ", original=" + original + '}';
- }
- }
- class Dictionary {
- Cell start;
- Cell last;
- public Dictionary(String line) throws IOException {
- FillCells(line);
- System.out.println("dictionary done");
- }
- public Cell getStart() {
- return start;
- }
- public void fillTempMangled() {
- Cell curr = this.start;
- while (curr != null) {
- curr.tempMangled = curr.mangled.toString();
- curr = curr.next;
- }
- }
- public void AddToStart(String v) {
- if (start == null) {
- start = new Cell(v);
- } else {
- Cell n = new Cell(v);
- n.next = start;
- start = n;
- }
- }
- public void FillCells(String file) throws IOException {
- int k = 1;
- try (BufferedReader br = new BufferedReader(new FileReader(file))) {
- String line;
- Cell next = null;
- Cell curr = new Cell(br.readLine());
- this.start = curr;
- while ((line = br.readLine()) != null) {
- curr.next = new Cell(line);
- curr = curr.next;
- }
- this.last = curr;
- }
- }
- }
- class User {
- String user;
- String salt;
- String firstName;
- String lastName;
- String middleName;
- String password;
- String hash;
- public User(String arg) throws IOException {
- LoadAttributes(arg);
- }
- public void LoadAttributes(String arg) {
- String userAttributes[] = arg.split(":");
- this.user = userAttributes[0];
- this.hash = userAttributes[1];
- String name[] = userAttributes[4].split(" ");
- if (name.length == 2) {
- this.firstName = name[0];
- this.lastName = name[1];
- }
- if (name.length == 3) {
- this.firstName = name[0];
- this.middleName = name[1];
- this.lastName = name[2];
- }
- this.salt = this.hash.charAt(0) + "" + this.hash.charAt(1);
- }
- @Override
- public String toString() {
- return "User{" + "user=" + user + ", salt=" + salt + ", firstName=" + firstName + ", lastName=" + lastName + ", middleName=" + middleName + ", password=" + password + ", hash=" + hash + '}';
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement