Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * To change this license header, choose License Headers in Project Properties.
- * To change this template file, choose Tools | Templates
- * and open the template in the editor.
- */
- //package passcrack;
- import java.io.File;
- import java.util.ArrayList;
- import java.util.Arrays;
- import java.util.Iterator;
- import java.util.List;
- import java.util.Scanner;
- import static passcrack.jcrypt.crypt;
- /**
- *
- * @author Anders
- */
- public class PasswordCrack {
- private static void stage1(User user, Scanner dictScanner) {
- List<String> names = Arrays.asList(user.name);
- Iterator<String> nameIter = names.iterator();
- while (dictScanner.hasNextLine() || nameIter.hasNext()) {
- String currentWord;
- if (dictScanner.hasNext()) {
- currentWord = dictScanner.nextLine();
- } else {
- currentWord = nameIter.next();
- }
- if (isCracked(user, new StringBuilder(currentWord))) {
- return;
- }
- }
- }
- private static void stage2(User user, Scanner dictScanner) {
- if (user.cracked) {
- return;
- }
- List<String> names = Arrays.asList(user.name);
- Iterator<String> nameIter = names.iterator();
- while (dictScanner.hasNextLine() || nameIter.hasNext()) {
- String currentWord;
- if (dictScanner.hasNext()) {
- currentWord = dictScanner.nextLine();
- } else {
- currentWord = nameIter.next();
- }
- StringBuilder currentSb = new StringBuilder(currentWord);
- char first = currentSb.charAt(0);
- char last = currentSb.charAt(currentSb.length() - 1);
- for (int i = 1; i <= 14; i++) {
- //append or prepend
- if (i == 1 || i == 2) {
- for (char c : chars) {
- runFunc(currentSb, i, c);
- if (isCracked(user, currentSb)) {
- return;
- }
- RrunFunc(currentSb, i, first, last);
- }
- } //end of case append or prepend
- else {
- runFunc(currentSb, i, ' ');
- if (isCracked(user, currentSb)) {
- return;
- }
- RrunFunc(currentSb, i, first, last);
- }
- }
- }
- }
- private static void stage3(User user, Scanner dictScanner) {
- if (user.cracked) {
- return;
- }
- List<String> names = Arrays.asList(user.name);
- Iterator<String> nameIter = names.iterator();
- // if (!user.name[0].equals("Faker")) {
- // return;
- // }
- while (dictScanner.hasNextLine() || nameIter.hasNext()) {
- String currentWord;
- if (dictScanner.hasNext()) {
- currentWord = dictScanner.nextLine();
- } else {
- currentWord = nameIter.next();
- }
- // System.out.println(user.name[0]);
- // if (!currentWord.equals("add")) {
- // continue;
- // }
- StringBuilder currentSb = new StringBuilder(currentWord);
- char firstOuter = currentSb.charAt(0);
- char lastOuter = currentSb.charAt(currentSb.length() - 1);
- for (int i = 1; i <= 14; i++) {
- //append or prepend
- if (i == 1 || i == 2) {
- for (char c : chars) {
- runFunc(currentSb, i, c);
- char firstInner = currentSb.charAt(0);
- char lastInner = currentSb.charAt(currentSb.length() - 1);
- for (int j = 1; j <= 14; j++) {
- if (j == 1 || j == 2) {
- //TOO EXHAUSTIVE
- // for (char d : chars) {
- // runFunc(currentSb, j, d);
- //
- // if (currentSb.toString().equals(user.passClear)) {
- // return;
- // }
- // RrunFunc(currentSb, j, firstInner, lastInner);
- // }
- } else {
- runFunc(currentSb, j, ' ');
- // if (i == 2 && j == 11) {
- // System.out.println(currentSb);
- // System.out.println(currentSb.toString().equals(user.passClear));
- // }
- if (isCracked(user, currentSb)) {
- return;
- }
- RrunFunc(currentSb, j, firstInner, lastInner);
- }
- //System.out.println("i: " + i + " j: " + j);
- }
- RrunFunc(currentSb, i, firstOuter, lastOuter);
- }
- } //end of case append or prepend
- else {
- runFunc(currentSb, i, ' ');
- char firstInner = currentSb.charAt(0);
- char lastInner = currentSb.charAt(currentSb.length() - 1);
- for (int j = 1; j <= 14; j++) {
- // System.out.println("i: " + i + " j: " + j);
- if (j == 1 || j == 2) {
- //TOO EXHAUSTIVE
- // for (char d : chars) {
- // runFunc(currentSb, j, d);
- // // System.out.println(currentSb);
- //
- // if (isCracked(user, currentSb)) {
- // return;
- // }
- // RrunFunc(currentSb, j, firstInner, lastInner);
- //
- // }
- } else {
- runFunc(currentSb, j, ' ');
- // System.out.println(currentSb);
- if (isCracked(user, currentSb)) {
- return;
- }
- RrunFunc(currentSb, j, firstInner, lastInner);
- // System.out.println("i: " + i + " j: " + j);
- }
- }
- RrunFunc(currentSb, i, firstOuter, lastOuter);
- }
- }
- }
- }
- static char[] chars = "1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM".toCharArray();
- private static boolean isCracked(User usr, StringBuilder sb) {
- if (usr.hash.equals(jcrypt.crypt(usr.salt, sb.toString()))) {
- usr.cracked = true;
- usr.passClear = sb.toString();
- return true;
- }
- return false;
- }
- public static void main(String[] args) {
- if (args.length != 2) {
- System.out.println("missing arguments <dictionary> <passwd>");
- return;
- }
- String[] found = {"Faker", "Horatio", "Gordon", "George", "Suzanna", "Frank", "Otis", "Quincy", "Wolf", "Benjamin", "Sam", "Rusty", "Emile", "Hugo"};
- String dictionary = args[0];
- String passwd = args[1];
- Scanner plainScanner = getScanner("passwd1-plain.txt");
- Scanner passwdScanner = getScanner(passwd);
- List<User> users = loadUserData(passwdScanner);
- for (User usr : users) {
- for (String name : found) {
- if (name.equals(usr.name[0])) {
- usr.cracked = true;
- }
- }
- }
- System.out.println("STAGE 1: ------------------------");
- for (User usr : users) {
- stage1(usr, getScanner(dictionary));
- System.out.println(usr);
- }
- System.out.println("STAGE 2: ------------------------");
- for (User usr : users) {
- stage2(usr, getScanner(dictionary));
- System.out.println(usr);
- }
- System.out.println("STAGE 3: ------------------------");
- for (User usr : users) {
- if (usr.name[0].equals("Emily")) {
- stage3(usr, getScanner(dictionary));
- System.out.println(usr);
- }
- }
- }
- private static List loadUserData(Scanner s) {
- PasswordCrack pc = new PasswordCrack();
- List<PasswordCrack.User> users = new ArrayList<>();
- while (s.hasNextLine()) {
- String line = s.nextLine();
- User usr = pc.new User(line);
- users.add(usr);
- }
- return users;
- }
- private static Scanner getScanner(String fileName) {
- //char[] charMessage;
- Scanner s;
- try {
- s = new Scanner(new File(fileName));
- } catch (Exception e) {
- System.out.println(e.getMessage());
- return null;
- }
- return s;
- }
- private static void fillClearText(List<User> users, Scanner s) {
- for (User user : users) {
- user.passClear = s.nextLine();
- }
- }
- private static void prepend(StringBuilder word, char c) {
- //StringBuilder tmp = new StringBuilder(word);
- // tmp = tmp.insert(0, c);
- word.insert(0, c);
- }
- private static void Rprepend(StringBuilder word) {
- //StringBuilder tmp = new StringBuilder(word);
- // tmp = tmp.insert(0, c);
- word.deleteCharAt(0);
- }
- private static void append(StringBuilder word, char c) {
- // StringBuilder tmp = new StringBuilder(word);
- // tmp.append(c);
- word.append(c);
- }
- private static void Rappend(StringBuilder word) {
- word.deleteCharAt(word.length() - 1);
- }
- private static void deleteFirst(StringBuilder word) {
- word.deleteCharAt(0);
- }
- private static void RdeleteFirst(StringBuilder word, char c) {
- word.insert(0, c);
- }
- private static void deleteLast(StringBuilder word) {
- word.deleteCharAt(word.length() - 1);
- }
- private static void RdeleteLast(StringBuilder word, char c) {
- word.append(c);
- }
- private static void reverse(StringBuilder word) {
- word.reverse();
- }
- private static void Rreverse(StringBuilder word) {
- word.reverse();
- }
- private static void duplicate(StringBuilder word) {
- StringBuilder tmp = new StringBuilder(word);
- word.append(tmp);
- }
- private static void Rduplicate(StringBuilder word) {
- int length = word.length() / 2;
- word.setLength(length);
- }
- private static void reflect1(StringBuilder word) {
- StringBuilder tmp = new StringBuilder(word);
- word.append(tmp.reverse());
- }
- private static void Rreflect1(StringBuilder word) {
- int length = word.length() / 2;
- word.setLength(length);
- }
- private static void reflect2(StringBuilder word) {
- StringBuilder tmp = new StringBuilder(word);
- word.reverse().append(tmp);
- }
- private static void Rreflect2(StringBuilder word) {
- int length = word.length() / 2;
- word.setLength(length);
- word.reverse();
- }
- private static void capitalize(StringBuilder word) {
- Character c = word.charAt(0);
- c = Character.toUpperCase(c);
- // System.out.println("Char: " + c);
- word.setCharAt(0, c);
- }
- private static void Rcapitalize(StringBuilder word, char first) {
- word.setCharAt(0, first);
- }
- private static void uppercase(StringBuilder word) {
- // return new StringBuilder(word.toString().toUpperCase());
- String str = word.toString().toUpperCase();
- word.replace(0, word.length(), str);
- // System.out.println("Upper: " + word);
- }
- private static void Ruppercase(StringBuilder word) {
- String str = word.toString().toLowerCase();
- word.replace(0, word.length(), str);
- }
- //Ny instants
- private static void lowercase(StringBuilder word) {
- String str = word.toString().toLowerCase();
- word.replace(0, word.length(), str);
- }
- private static void Rlowercase(StringBuilder word) {
- }
- private static void toggleCaseLower(StringBuilder word) {
- String str = word.toString();
- char[] upper = str.toUpperCase().toCharArray();
- char[] lower = str.toLowerCase().toCharArray();
- for (int i = 0; i < upper.length; i++) {
- if (i % 2 == 0) {
- word.setCharAt(i, lower[i]);
- } else {
- word.setCharAt(i, upper[i]);
- }
- }
- }
- private static void RtoggleCaseLower(StringBuilder word) {
- lowercase(word);
- }
- private static void toggleCaseHigher(StringBuilder word) {
- String str = word.toString();
- char[] upper = str.toUpperCase().toCharArray();
- char[] lower = str.toLowerCase().toCharArray();
- for (int i = 0; i < upper.length; i++) {
- if (i % 2 == 0) {
- word.setCharAt(i, upper[i]);
- } else {
- word.setCharAt(i, lower[i]);
- }
- }
- }
- private static void nCap(StringBuilder word) {
- char first = word.charAt(0);
- uppercase(word);
- word.setCharAt(0, first);
- }
- private static void RnCap(StringBuilder word) {
- lowercase(word);
- }
- private static void RtoggleCaseHigher(StringBuilder word) {
- lowercase(word);
- }
- private static void runFunc(StringBuilder word, int choice, char c) {
- switch (choice) {
- case 1:
- prepend(word, c);
- break;
- case 2:
- append(word, c);
- break;
- case 3:
- deleteFirst(word);
- break;
- case 4:
- deleteLast(word);
- break;
- case 5:
- reverse(word);
- break;
- case 6:
- duplicate(word);
- break;
- case 7:
- reflect1(word);
- break;
- case 8:
- reflect2(word);
- break;
- case 9:
- capitalize(word);
- break;
- case 10:
- lowercase(word);
- break;
- case 11:
- uppercase(word);
- break;
- case 12:
- toggleCaseLower(word);
- break;
- case 13:
- toggleCaseHigher(word);
- break;
- case 14:
- nCap(word);
- break;
- }
- }
- private static void RrunFunc(StringBuilder word, int choice, char first, char last) {
- switch (choice) {
- case 1:
- Rprepend(word);
- break;
- case 2:
- Rappend(word);
- break;
- case 3:
- RdeleteFirst(word, first);
- break;
- case 4:
- RdeleteLast(word, last);
- break;
- case 5:
- Rreverse(word);
- break;
- case 6:
- Rduplicate(word);
- break;
- case 7:
- Rreflect1(word);
- break;
- case 8:
- Rreflect2(word);
- break;
- case 9:
- Rcapitalize(word, first);
- break;
- case 10:
- Rlowercase(word);
- break;
- case 11:
- Ruppercase(word);
- case 12:
- RtoggleCaseLower(word);
- break;
- case 13:
- RtoggleCaseHigher(word);
- break;
- case 14:
- RnCap(word);
- break;
- }
- }
- private class User {
- boolean cracked = false;
- String salt;
- String hash;
- String name[];
- String passClear = "???";
- private User(String fileLine) {
- String[] data = fileLine.split(":");
- salt = data[1].substring(0, 2);
- hash = data[1];
- name = data[4].split("\\s+");
- }
- private User() {
- }
- @Override
- public String toString() {
- String names = "";
- for (String part : name) {
- names = names + " " + part;
- }
- String print = salt + " " + hash + " " + names + " " + passClear;
- if (cracked) {
- return "YES " + print;
- }
- return "NO " + print;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement