Advertisement
Guest User

Untitled

a guest
May 28th, 2017
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 17.71 KB | None | 0 0
  1. import java.io.BufferedReader;
  2. import java.io.FileNotFoundException;
  3. import java.io.FileReader;
  4. import java.io.IOException;
  5. import java.util.ArrayList;
  6. import java.util.List;
  7.  
  8. /**
  9.  *
  10.  * @author axel myrberg
  11.  */
  12. public class PasswordCrack {
  13.  
  14.     public static void main(String[] args) throws IOException {
  15.         // Fill lists from files
  16.         Dictionary dict = new Dictionary(args[0]);
  17.         User users[] = LoadUsers(args[1]);
  18.     // Seed users names to dictionary
  19.         AddNamesToDict(dict, users);
  20.         String pass[] = null; // This does nothing, cba to refactor
  21.         RoundOne(users, dict, pass);
  22.         RoundTwo(users, dict, pass);
  23.         RoundThree(users, dict, pass);
  24.     }
  25.  
  26.     private static void RoundThree(User[] users, Dictionary dict, String[] pass) {
  27.         for (int x = 48; x <= 122; x++) {
  28.             for (int u = 0; u < users.length; u++) {
  29.                 if (users[u].password != null) {
  30.                     System.out.println(users[u]);
  31.                 }
  32.             }
  33.             System.out.println("Round three x: " + (char) x);
  34.             if (x == 58) {
  35.                 x = 65;
  36.             }
  37.             if (x == 90) {
  38.                 x = 97;
  39.             }
  40.             for (int i = 0; i < 14; i++) {
  41.                 ResetDict(dict);
  42.                 RunFunc(users, dict, pass, i, x);
  43.                 SaveMangle(dict);
  44.                 for (int k = 0; k < 14; k++) {
  45.                     RunFunc(users, dict, pass, k, x);
  46.                     ResetMangle(dict);
  47.                 }
  48.             }
  49.         }
  50.     }
  51.  
  52.     private static void RunFunc(User[] users, Dictionary dict, String[] pass, int col, int k) {
  53.         switch (col) {
  54.             case 0:
  55.                 DeleteLast(users, dict, pass);
  56.                 break;
  57.             case 1:
  58.                 DeleteFirst(users, dict, pass);
  59.                 break;
  60.             case 2:
  61.                 Reverse(users, dict, pass);
  62.                 break;
  63.             case 3:
  64.                 Duplicate(users, dict, pass);
  65.                 break;
  66.             case 4:
  67.                 ReflectForward(users, dict, pass);
  68.                 break;
  69.             case 5:
  70.                 ReflectBackward(users, dict, pass);
  71.                 break;
  72.             case 6:
  73.                 Duplicate(users, dict, pass);
  74.                 break;
  75.             case 7:
  76.                 Uppercase(users, dict, pass);
  77.                 break;
  78.             case 8:
  79.                 Lowercase(users, dict, pass);
  80.                 break;
  81.             case 9:
  82.                 Capitalize(users, dict, pass);
  83.                 break;
  84.             case 10:
  85.                 NCapitalize(users, dict, pass);
  86.                 break;
  87.             case 11:
  88.                 ToggleCaseEven(users, dict, pass);
  89.                 break;
  90.             case 12:
  91.                 ToggleCaseOdd(users, dict, pass);
  92.                 break;
  93.             case 13:
  94.                 Append(users, dict, pass, k);
  95.                 break;
  96.             case 14:
  97.                 Prepend(users, dict, pass, k);
  98.                 break;
  99.         }
  100.     }
  101.  
  102.     private static void RoundOne(User[] users, Dictionary dict, String[] pass) {
  103.         CompareCrypt(users, dict, pass);
  104.         ResetDict(dict);
  105.         System.out.println("--------- Round One Complete ---------");
  106.     }
  107.  
  108.     private static void RoundTwo(User[] users, Dictionary dict, String[] pass) {
  109.         /*
  110.         for (int i = 48; i <= 122; i++) {
  111.             if (i == 58) {
  112.                 i = 65;
  113.             }
  114.             if (i == 90) {
  115.                 i = 97;
  116.             }
  117.             Prepend(users, dict, pass, i);
  118.             System.out.println("Prepend compared");
  119.             ResetDict(dict);
  120.             Append(users, dict, pass, i);
  121.             System.out.println("Append compared");
  122.             ResetDict(dict);
  123.         }
  124.         */
  125.         DeleteLast(users, dict, pass);
  126.         ResetDict(dict);
  127.         System.out.println("DeleteLast compared");
  128.         DeleteFirst(users, dict, pass);
  129.         ResetDict(dict);
  130.         System.out.println("DeleteFirst compared");
  131.         Reverse(users, dict, pass);
  132.         ResetDict(dict);
  133.         System.out.println("Reverse compared");
  134.         Duplicate(users, dict, pass);
  135.         ResetDict(dict);
  136.         System.out.println("Duplicate compared");
  137.         ReflectForward(users, dict, pass);
  138.         ResetDict(dict);
  139.         System.out.println("ReflectForward compared");
  140.         ReflectBackward(users, dict, pass);
  141.         ResetDict(dict);
  142.         System.out.println("ReflectBackward compared");
  143.         Uppercase(users, dict, pass);
  144.         ResetDict(dict);
  145.         System.out.println("Uppercase compared");
  146.         Lowercase(users, dict, pass);
  147.         ResetDict(dict);
  148.         System.out.println("Lowercase compared");
  149.         Capitalize(users, dict, pass);
  150.         ResetDict(dict);
  151.         System.out.println("Capitalize compared");
  152.         NCapitalize(users, dict, pass);
  153.         ResetDict(dict);
  154.         System.out.println("NCapitalize compared");
  155.         ToggleCaseEven(users, dict, pass);
  156.         ResetDict(dict);
  157.         System.out.println("ToggleCaseEven compared");
  158.         ToggleCaseOdd(users, dict, pass);
  159.         ResetDict(dict);
  160.         System.out.println("ToggleCaseOdd compared");
  161.         System.out.println("--------- Round Two Complete ---------");
  162.     }
  163.  
  164.     static void AddNamesToDict(Dictionary dict, User[] users) {
  165.         Cell prev = dict.start;
  166.         for (int i = 0; i < users.length; i++) {
  167.             Cell temp = prev;
  168.             prev = new Cell(users[i].firstName);
  169.             prev.next = temp;
  170.             temp = prev;
  171.             prev = new Cell(users[i].lastName);
  172.             prev.next = temp;
  173.         }
  174.         dict.start = prev;
  175.     }
  176.  
  177.     public static User[] LoadUsers(String file) throws FileNotFoundException, IOException {
  178.         BufferedReader in = new BufferedReader(new FileReader(file));
  179.         String str;
  180.         List<User> list = new ArrayList<User>();
  181.         while ((str = in.readLine()) != null) {
  182.             User user = new User(str);
  183.             list.add(user);
  184.         }
  185.         User[] userArray = list.toArray(new User[0]);
  186.         return userArray;
  187.     }
  188.  
  189.     private static void CompareCrypt(User[] users, Dictionary dict, String[] pass) {
  190.         for (int i = 0; i < users.length; i++) {
  191.             Cell curr = dict.start;
  192.             while (curr.next != null) {
  193.                 String crypt = jcrypt.crypt(users[i].salt, curr.mangled.toString());
  194.                 if (crypt.equals(users[i].hash)) {
  195.                     if (users[i].password == null) {
  196.                         users[i].password = curr.mangled.toString();
  197.                         System.out.println("PASSWORD CRACKED:" + users[i]);
  198.                     }
  199.                 }
  200.                 curr = curr.next;
  201.             }
  202.         }
  203.     }
  204.  
  205.     private static void Compare(User[] users, Dictionary dict, String[] pass) {
  206.         for (int i = 0; i < users.length; i++) {
  207.             Cell curr = dict.start;
  208.             while (curr.next != null) {
  209.                 if (pass[i].equals(curr.mangled.toString())) {
  210.                     users[i].password = pass[i];
  211.                 }
  212.                 curr = curr.next;
  213.             }
  214.         }
  215.     }
  216.  
  217.     private static String[] LoadPasswords(String file) throws IOException {
  218.         BufferedReader in = new BufferedReader(new FileReader(file));
  219.         String str;
  220.         List<String> list = new ArrayList<String>();
  221.         while ((str = in.readLine()) != null) {
  222.             String user = new String(str);
  223.             list.add(user);
  224.         }
  225.         String[] userArray = list.toArray(new String[0]);
  226.         return userArray;
  227.     }
  228.  
  229.     private static void ResetDict(Dictionary dict) {
  230.         Cell curr = dict.start;
  231.         while (curr != null) {
  232.             curr.mangled.setLength(0);
  233.             curr.mangled.append(curr.original);
  234.             curr = curr.next;
  235.         }
  236.     }
  237.  
  238.     private static void Prepend(User[] users, Dictionary dict, String[] pass, int i) {
  239.         Cell curr = dict.start;
  240.         while (curr != null) {
  241.             curr.mangled.reverse().append((char) i);
  242.             curr.mangled.reverse();
  243.             curr = curr.next;
  244.         }
  245.         CompareCrypt(users, dict, pass);
  246.     }
  247.  
  248.     private static void Append(User[] users, Dictionary dict, String[] pass, int i) {
  249.         if (i == 58) {
  250.             i = 65;
  251.         }
  252.         if (i == 90) {
  253.             i = 97;
  254.         }
  255.         Cell curr = dict.start;
  256.         while (curr != null) {
  257.             curr.mangled.append((char) i);
  258.             curr = curr.next;
  259.         }
  260.         CompareCrypt(users, dict, pass);
  261.     }
  262.  
  263.     private static void DeleteLast(User[] users, Dictionary dict, String[] pass) {
  264.         Cell curr = dict.start;
  265.         while (curr != null) {
  266.             if (curr.mangled.length() <= 1) {
  267.                 curr = curr.next;
  268.                 continue;
  269.             }
  270.             curr.mangled.setLength(curr.mangled.length() - 1);
  271.             curr = curr.next;
  272.         }
  273.         CompareCrypt(users, dict, pass);
  274.     }
  275.  
  276.     private static void DeleteFirst(User[] users, Dictionary dict, String[] pass) {
  277.         Cell curr = dict.start;
  278.         while (curr != null) {
  279.             if (curr.mangled.length() <= 1) {
  280.                 curr = curr.next;
  281.                 continue;
  282.             }
  283.             curr.mangled.reverse();
  284.             curr.mangled.setLength(curr.mangled.length() - 1);
  285.             curr.mangled.reverse();
  286.             curr = curr.next;
  287.         }
  288.         CompareCrypt(users, dict, pass);
  289.     }
  290.  
  291.     private static void Reverse(User[] users, Dictionary dict, String[] pass) {
  292.         Cell curr = dict.start;
  293.         while (curr != null) {
  294.             curr.mangled.reverse();
  295.             curr = curr.next;
  296.         }
  297.         CompareCrypt(users, dict, pass);
  298.     }
  299.  
  300.     private static void Duplicate(User[] users, Dictionary dict, String[] pass) {
  301.         Cell curr = dict.start;
  302.         while (curr != null) {
  303.             curr.mangled.append(curr.mangled.toString());
  304.             curr = curr.next;
  305.         }
  306.         CompareCrypt(users, dict, pass);
  307.     }
  308.  
  309.     private static void ReflectForward(User[] users, Dictionary dict, String[] pass) {
  310.         Cell curr = dict.start;
  311.         while (curr != null) {
  312.             curr.mangled.reverse();
  313.             String temp = curr.mangled.toString();
  314.             curr.mangled.reverse();
  315.             curr.mangled.append(temp);
  316.             curr = curr.next;
  317.         }
  318.         CompareCrypt(users, dict, pass);
  319.     }
  320.  
  321.     private static void ReflectBackward(User[] users, Dictionary dict, String[] pass) {
  322.         Cell curr = dict.start;
  323.         while (curr != null) {
  324.             String temp = curr.mangled.toString();
  325.             curr.mangled.reverse();
  326.             curr.mangled.append(temp);
  327.             curr = curr.next;
  328.         }
  329.         CompareCrypt(users, dict, pass);
  330.     }
  331.  
  332.     private static void Uppercase(User[] users, Dictionary dict, String[] pass) {
  333.         Cell curr = dict.start;
  334.         while (curr != null) {
  335.             String temp = curr.mangled.toString().toUpperCase();
  336.             curr.mangled.setLength(0);
  337.             curr.mangled.append(temp);
  338.             curr = curr.next;
  339.         }
  340.         CompareCrypt(users, dict, pass);
  341.     }
  342.  
  343.     private static void Lowercase(User[] users, Dictionary dict, String[] pass) {
  344.         Cell curr = dict.start;
  345.         while (curr != null) {
  346.             String temp = curr.mangled.toString().toLowerCase();
  347.             curr.mangled.setLength(0);
  348.             curr.mangled.append(temp);
  349.             curr = curr.next;
  350.         }
  351.         CompareCrypt(users, dict, pass);
  352.     }
  353.  
  354.     private static void Capitalize(User[] users, Dictionary dict, String[] pass) {
  355.         Cell curr = dict.start;
  356.         while (curr != null) {
  357.             if (curr.mangled.charAt(0) < 58) {
  358.  
  359.             } else if ((curr.mangled.charAt(0) >= 65) && (curr.mangled.charAt(0) <= 90)) {
  360.                 curr.mangled.setCharAt(0, (char) (curr.mangled.charAt(0) + 32));
  361.             } else if ((curr.mangled.charAt(0) >= 97) && (curr.mangled.charAt(0) <= 122)) {
  362.                 curr.mangled.setCharAt(0, (char) (curr.mangled.charAt(0) - 32));
  363.             }
  364.             curr = curr.next;
  365.  
  366.         }
  367.         CompareCrypt(users, dict, pass);
  368.     }
  369.  
  370.     private static void NCapitalize(User[] users, Dictionary dict, String[] pass) {
  371.         Cell curr = dict.start;
  372.         while (curr != null) {
  373.             char tempChar = curr.mangled.charAt(0);
  374.             curr.mangled.reverse();
  375.             curr.mangled.setLength(curr.mangled.length() - 1);
  376.             String temp = curr.mangled.toString().toUpperCase();
  377.             curr.mangled.setLength(0);
  378.             curr.mangled.append(temp);
  379.             curr.mangled.append(tempChar);
  380.             curr.mangled.reverse();
  381.             curr = curr.next;
  382.         }
  383.         CompareCrypt(users, dict, pass);
  384.     }
  385.  
  386.     private static void ToggleCaseEven(User[] users, Dictionary dict, String[] pass) {
  387.         Cell curr = dict.start;
  388.         while (curr != null) {
  389.             for (int i = 0; i < curr.mangled.length(); i++) {
  390.                 if (i % 2 == 0) {
  391.                     if (curr.mangled.charAt(0) < 58) {
  392.                     } else if ((curr.mangled.charAt(i) >= 65) && (curr.mangled.charAt(i) <= 90)) {
  393.                         curr.mangled.setCharAt(i, (char) (curr.mangled.charAt(i) + 32));
  394.                     } else if ((curr.mangled.charAt(i) >= 97) && (curr.mangled.charAt(i) <= 122)) {
  395.                         curr.mangled.setCharAt(i, (char) (curr.mangled.charAt(i) - 32));
  396.                     }
  397.                 }
  398.             }
  399.             curr = curr.next;
  400.         }
  401.         CompareCrypt(users, dict, pass);
  402.     }
  403.  
  404.     private static void ToggleCaseOdd(User[] users, Dictionary dict, String[] pass) {
  405.         Cell curr = dict.start;
  406.         while (curr != null) {
  407.             for (int i = 0; i < curr.mangled.length(); i++) {
  408.                 if (i % 2 != 0) {
  409.                     if (curr.mangled.charAt(0) < 58) {
  410.                     } else if ((curr.mangled.charAt(i) >= 65) && (curr.mangled.charAt(i) <= 90)) {
  411.                         curr.mangled.setCharAt(i, (char) (curr.mangled.charAt(i) + 32));
  412.                     } else if ((curr.mangled.charAt(i) >= 97) && (curr.mangled.charAt(i) <= 122)) {
  413.                         curr.mangled.setCharAt(i, (char) (curr.mangled.charAt(i) - 32));
  414.                     }
  415.                 }
  416.             }
  417.             curr = curr.next;
  418.         }
  419.         CompareCrypt(users, dict, pass);
  420.     }
  421.  
  422.     private static void ResetMangle(Dictionary dict) {
  423.         Cell curr = dict.start;
  424.         while (curr != null) {
  425.             curr.mangled.setLength(0);
  426.             curr.mangled.append(curr.tempMangled);
  427.             curr = curr.next;
  428.         }
  429.     }
  430.  
  431.     private static void SaveMangle(Dictionary dict) {
  432.         Cell curr = dict.start;
  433.         while (curr != null) {
  434.             curr.tempMangled = curr.mangled.toString();
  435.             curr = curr.next;
  436.         }
  437.     }
  438. }
  439.  
  440. class Cell {
  441.  
  442.     Cell next;
  443.     StringBuilder mangled;
  444.     String original;
  445.     String tempMangled;
  446.  
  447.     public Cell() {
  448.     }
  449.  
  450.     public Cell(String original) {
  451.         original = original.replaceAll("[-+.^:,]", "");
  452.         this.mangled = new StringBuilder(original);
  453.         this.original = original;
  454.     }
  455.  
  456.     @Override
  457.     public String toString() {
  458.         return "Cell{" + "mangled=" + mangled + ", original=" + original + '}';
  459.     }
  460.  
  461. }
  462.  
  463. class Dictionary {
  464.  
  465.     Cell start;
  466.     Cell last;
  467.  
  468.     public Dictionary(String line) throws IOException {
  469.         FillCells(line);
  470.         System.out.println("dictionary done");
  471.  
  472.     }
  473.  
  474.     public Cell getStart() {
  475.         return start;
  476.     }
  477.  
  478.     public void fillTempMangled() {
  479.         Cell curr = this.start;
  480.         while (curr != null) {
  481.             curr.tempMangled = curr.mangled.toString();
  482.             curr = curr.next;
  483.         }
  484.  
  485.     }
  486.  
  487.     public void AddToStart(String v) {
  488.         if (start == null) {
  489.             start = new Cell(v);
  490.         } else {
  491.             Cell n = new Cell(v);
  492.             n.next = start;
  493.             start = n;
  494.         }
  495.  
  496.     }
  497.  
  498.     public void FillCells(String file) throws IOException {
  499.         int k = 1;
  500.         try (BufferedReader br = new BufferedReader(new FileReader(file))) {
  501.             String line;
  502.             Cell next = null;
  503.             Cell curr = new Cell(br.readLine());
  504.             this.start = curr;
  505.             while ((line = br.readLine()) != null) {
  506.                 curr.next = new Cell(line);
  507.                 curr = curr.next;
  508.             }
  509.             this.last = curr;
  510.         }
  511.     }
  512. }
  513.  
  514. class User {
  515.  
  516.     String user;
  517.     String salt;
  518.     String firstName;
  519.     String lastName;
  520.     String middleName;
  521.     String password;
  522.     String hash;
  523.  
  524.     public User(String arg) throws IOException {
  525.         LoadAttributes(arg);
  526.     }
  527.  
  528.     public void LoadAttributes(String arg) {
  529.         String userAttributes[] = arg.split(":");
  530.         this.user = userAttributes[0];
  531.         this.hash = userAttributes[1];
  532.         String name[] = userAttributes[4].split(" ");
  533.         if (name.length == 2) {
  534.             this.firstName = name[0];
  535.             this.lastName = name[1];
  536.         }
  537.         if (name.length == 3) {
  538.             this.firstName = name[0];
  539.             this.middleName = name[1];
  540.             this.lastName = name[2];
  541.         }
  542.         this.salt = this.hash.charAt(0) + "" + this.hash.charAt(1);
  543.     }
  544.  
  545.     @Override
  546.     public String toString() {
  547.         return "User{" + "user=" + user + ", salt=" + salt + ", firstName=" + firstName + ", lastName=" + lastName + ", middleName=" + middleName + ", password=" + password + ", hash=" + hash + '}';
  548.     }
  549.  
  550. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement