com.portmods.handlers.crackers.dictionary.Wordlist.java Source code

Java tutorial

Introduction

Here is the source code for com.portmods.handlers.crackers.dictionary.Wordlist.java

Source

/*
 * 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 com.portmods.handlers.crackers.dictionary;

import com.portmods.Main;
import com.portmods.handlers.ConfigHandler;
import com.portmods.handlers.FoundPasswords;
import com.portmods.handlers.Passwords;
import com.portmods.handlers.User;
import org.apache.commons.codec.digest.UnixCrypt;

import javax.swing.*;
import java.io.*;
import java.util.ArrayList;
import java.util.List;

/**
 * @author up647200
 */

public class Wordlist implements Runnable {

    public static List<String> wordlist;

    private Passwords pw;
    private FoundPasswords fp;
    private ConfigHandler config;

    public Wordlist(Passwords pw, FoundPasswords fp, ConfigHandler config) {

        this.fp = fp;
        this.pw = pw;
        this.config = config;

    }

    @Override
    public void run() {

        try {

            System.out.println("Loading Dictionary");

            InputStream fileStream = null;

            if (config.getUseCustomDictionary()) {

                try {

                    fileStream = new FileInputStream(config.getCustomDictionary());

                } catch (Exception e) {

                    JOptionPane.showMessageDialog(null, e, "Error with Dictonary File.", JOptionPane.ERROR_MESSAGE);
                    System.exit(1);

                }

            } else {

                fileStream = Main.class.getResourceAsStream("/com/portmods/files/words.txt");

            }

            BufferedReader reader = new BufferedReader(new InputStreamReader(fileStream, "UTF-8"));

            /* declaring storage list */
            wordlist = new ArrayList<String>();
            String text = "";

            String line = reader.readLine();

            while (line != null) //wait for ever
            {
                text = line;
                line = reader.readLine();
                if (text.length() < 9 && text.length() > 2) {
                    wordlist.add(text);
                }

            }

        } catch (UnsupportedEncodingException e) {

            System.out.println("Error Loading Dictionary");

        } catch (IOException e) {

            System.out.println("Error Loading Dictionary");

        }

        System.out.println("Finished Loading Dictionary");
        System.out.println("Rule 1 : Do nothing to word");

        for (String s : wordlist) {

            String hash = UnixCrypt.crypt(s, "aa");

            for (User u : pw.getUsers()) {

                if (u.getHash().equals(hash)) {

                    System.out.println("Found password " + s + " for user " + u.getUserName());
                    fp.addPassword(u.getUserName(), s);

                }

            }

        }

        System.out.println("Rule 2 : Toggle case of every character");
        /* Chaning word characters one at time lowerecase to Uppercase and vice Veser. */
        for (String s : wordlist) {
            for (int i = 0; i < s.length(); i++) {
                char C = s.charAt(i); //take character from the word
                StringBuilder sbuilder = new StringBuilder(s); //word we want to inject the character into
                if (Character.isUpperCase(C)) {
                    sbuilder.setCharAt(i, Character.toLowerCase(C)); //changing the character to lowercase

                } else if (Character.isLowerCase(C)) {
                    sbuilder.setCharAt(i, Character.toUpperCase(C)); // change to uppercase
                }

                String hash = UnixCrypt.crypt(sbuilder.toString(), "aa");

                for (User u : pw.getUsers()) {

                    if (u.getHash().equals(hash)) {

                        System.out
                                .println("Found password " + sbuilder.toString() + " for user " + u.getUserName());
                        fp.addPassword(u.getUserName(), sbuilder.toString());

                    }

                }

            }

        }

        System.out.println("Rule 3 : adding random numbers and leters into the word");
        /* generating number and adding to the words*/
        for (String s : wordlist) {
            for (int i = 0; i < 10; i++) {
                StringBuilder sb = new StringBuilder(s);
                sb.append(i); //add an integer to each word.

                String out = sb.toString();

                if (out.length() <= 8) {

                    String hash = UnixCrypt.crypt(out, "aa");

                    for (User u : pw.getUsers()) {

                        if (u.getHash().equals(hash)) {

                            System.out.println("Found password " + sb.toString() + " for user " + u.getUserName());
                            fp.addPassword(u.getUserName(), sb.toString());

                        }

                    }

                }

            }

        }

        System.out.println("Rule 4: Toggle one charater at a time and replace a number");
        /* trying to toggle one charater at a time and replace a number*/
        for (String s : wordlist) {
            for (int j = 0; j < s.length(); j++) {
                for (int i = 0; i < 10; i++) {
                    char C = s.charAt(j); //take character from the word
                    StringBuilder sbuilder = new StringBuilder(s); //word we want to inject the character into
                    if (Character.isAlphabetic(C)) {
                        sbuilder.deleteCharAt(j); //remove character
                        sbuilder.insert(j, i); // add digit

                        String hash = UnixCrypt.crypt(sbuilder.toString(), "aa");

                        for (User u : pw.getUsers()) {

                            if (u.getHash().equals(hash)) {

                                System.out.println(
                                        "Found password " + sbuilder.toString() + " for user " + u.getUserName());
                                fp.addPassword(u.getUserName(), sbuilder.toString());

                            }

                        }
                    }

                }

                for (int x = 65; x < 123; x++) {
                    char C1 = (char) x;

                    char C = s.charAt(j); //take character from the word
                    StringBuilder sbuilder = new StringBuilder(s); //word we want to inject the character into
                    if (Character.isDigit(C)) {
                        sbuilder.setCharAt(j, C1);

                        String hash = UnixCrypt.crypt(sbuilder.toString(), "aa");

                        for (User u : pw.getUsers()) {

                            if (u.getHash().equals(hash)) {

                                System.out.println(
                                        "Found password " + sbuilder.toString() + " for user " + u.getUserName());
                                fp.addPassword(u.getUserName(), sbuilder.toString());

                            }

                        }

                    }

                }

            }

        }

        System.out.println("Rule 5 : Adding random letters and numbers to the end");
        /* adding ascii values to a text string */

        for (String s : wordlist) {
            int x = 1;
            StringBuilder sb = new StringBuilder(s);
            for (int i = 33; i < 123; i++) {
                char L1 = (char) i;
                String out = sb.toString();

                String out1 = out + L1;

                if (out1.length() > 8) {

                    break;

                } else {

                    String hash = UnixCrypt.crypt(out1, "aa");

                    for (User u : pw.getUsers()) {

                        if (u.getHash().equals(hash)) {

                            System.out.println("Found password " + out1 + " for user " + u.getUserName());
                            fp.addPassword(u.getUserName(), out1);

                        }

                    }

                }

                for (int j = 33; j < 123; j++) {
                    char L2 = (char) j;

                    String out2 = out + L1 + L2;

                    if (out2.length() > 8) {

                        break;

                    } else {

                        String hash = UnixCrypt.crypt(out2, "aa");

                        for (User u : pw.getUsers()) {

                            if (u.getHash().equals(hash)) {

                                System.out.println("Found password " + out2 + " for user " + u.getUserName());
                                fp.addPassword(u.getUserName(), out2);

                            }

                        }

                    }

                    for (int k = 33; k < 123; k++) {
                        char L3 = (char) k;

                        String out3 = out + L1 + L2 + L3;

                        if (out3.length() > 8) {

                            break;

                        } else {

                            String hash = UnixCrypt.crypt(out3, "aa");

                            for (User u : pw.getUsers()) {

                                if (u.getHash().equals(hash)) {

                                    System.out.println("Found password " + out3 + " for user " + u.getUserName());
                                    fp.addPassword(u.getUserName(), out3);

                                }

                            }

                        }
                        for (int l = 33; l < 123; l++) {
                            char L4 = (char) l;

                            String out4 = out + L1 + L2 + L3 + L4;

                            if (out4.length() > 8) {

                                break;

                            } else {

                                String hash = UnixCrypt.crypt(out4, "aa");

                                for (User u : pw.getUsers()) {

                                    if (u.getHash().equals(hash)) {

                                        System.out
                                                .println("Found password " + out4 + " for user " + u.getUserName());
                                        fp.addPassword(u.getUserName(), out4);

                                    }

                                }

                            }
                        }
                    }
                }
                if (out.length() < 8) {

                } else {

                    System.out.println(out);
                    break;
                }
            }
        }

        config.setDicModeFin(true);

    }
}