Author Topic: [Java] MD5 BruteForcer  (Read 2293 times)

0 Members and 1 Guest are viewing this topic.

Offline WizZ

  • NULL
  • Posts: 1
  • Cookies: 0
    • View Profile
[Java] MD5 BruteForcer
« on: October 23, 2010, 07:27:50 pm »
I Do Not Take Any Responsibility For The Effects Of This Source.
Code: [Select]
import java.security.*;
import java.util.*;

public class BruteForcer implements Runnable{

    public static String currentCombo;
    public static String encryptedCombo;
    public static String encryptedWord;
    public static int wordLength;
    public static int char1, char2, char3, char4, char5;

    public static char Char[] = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r',
                's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K',
                'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '0', '1', '2', '3',
                '4', '5', '6', '7', '8', '9'
    };

    public BruteForcer() {}

    public void run() {
        Scanner sc = new Scanner(System.in);
        System.out.println("Encrypted Word:");
        encryptedWord = sc.nextLine();
        resetChars();
        wordLength = 1;
        Decrypt(encryptedWord);
    }

    public static boolean compareDigestedMsg(String s1, String s2) {
        if(s1.contains(s2))
            return true;
        else
            return false;
    }

    public static void resetChars() {
        char1 = 0;
        char2 = 0;
        char3 = 0;
        char4 = 0;
        char5 = 0;
    }

    public static String DigestMsg(String s) {
        byte[] defaultBytes = s.getBytes();
        try {
            MessageDigest algorithm = MessageDigest.getInstance("MD5");
            algorithm.reset();
            algorithm.update(defaultBytes);
            byte messageDigest[] = algorithm.digest();
           
            StringBuffer hexString = new StringBuffer();

            for (int i = 0; i < messageDigest.length; i++) {
                hexString.append(Integer.toHexString(0xFF & messageDigest[i]));
            }

            s = hexString + "";
        } catch(NoSuchAlgorithmException e) {
                    e.printStackTrace();
        }
        return s;
    }

    public static void Decrypt(String s) {
        int i = 0;
        switch(wordLength) {
            case 1:
                for(i = 0; i < 62; i++) {
                    currentCombo = "" + Char[i];

                    if(compareDigestedMsg(s, DigestMsg(currentCombo))) {
                        System.out.println("[MATCH FOUND!] Combonation: " + currentCombo);                        wordLength = 1;
                        break;
                    }
                }
                if(!compareDigestedMsg(s, DigestMsg(currentCombo))) {
                    System.out.println("[WORD LENGTH: " + wordLength + "] has been processed: NO MATCHES!");
                    wordLength++;
                    Decrypt(encryptedWord);
                }
            break;

            case 2:
                resetChars();
                for(i = 0; i < 3844; i++) {

                    char2 = i % 62;

                    if(char2 == 0) {
                        if(i > 0)
                            char1++;
                    }

                    currentCombo = "" + Char[char1] + Char[char2];

                    if(compareDigestedMsg(s, DigestMsg(currentCombo))) {
                        System.out.println("[MATCH FOUND!] Combonation: " + currentCombo);
                        wordLength = 1;
                        break;
                    }
                }
                if(!compareDigestedMsg(s, DigestMsg(currentCombo))) {
                    System.out.println("[WORD LENGTH: " + wordLength + "] has been processed: NO MATCHES!");
                    wordLength++;
                    Decrypt(encryptedWord);
                }   
            break;

            case 3:
                resetChars();
               
                for(i = 0; i < 238328; i++) {
                    char3 = i % 62;

                    if(char3 == 0) {
                        if(i > 0) {
                            if(char2 < 61){
                                char2++;
                                if(Char[char2] == '9' && Char[char1] != '9')
                                    char1++;
                            } else {
                                char2 = 0;
                            }
                        }
                    }

                    currentCombo = "" + Char[char1] + Char[char2] + Char[char3];

                    if(compareDigestedMsg(s, DigestMsg(currentCombo))) {
                        System.out.println("[MATCH FOUND!] Combonation: " + currentCombo);
                        wordLength = 1;
                        break;
                    }
                }
                if(!compareDigestedMsg(s, DigestMsg(currentCombo))) {
                    System.out.println("[WORD LENGTH: " + wordLength + "] has been processed: NO MATCHES!");
                    wordLength++;
                    Decrypt(encryptedWord);
                }
            break;

            case 4:
                resetChars();
               
                for(i = 0; i < 14776336; i++) {
                    char4 = i % 62;

                    if(char4 == 0) {
                        if(i > 0) {
                            if(char3 < 61) {
                                char3++;
                                if(Char[char2] == '9')
                                    char2 = 0;
                                if(Char[char3] == '9' && Char[char2] != '9')
                                    char2++;
                                if(Char[char2] == '9' && Char[char1] != '9')
                                    char1++;
                            } else {
                                char3 = 0;
                            }
                        }
                    }

                    currentCombo = "" + Char[char1] + Char[char2] + Char[char3] + Char[char4];

                    if(compareDigestedMsg(s, DigestMsg(currentCombo))) {
                        System.out.println("[MATCH FOUND!] Combonation: " + currentCombo);
                        wordLength = 1;
                        break;
                    }
                }
                if(!compareDigestedMsg(s, DigestMsg(currentCombo))) {
                    System.out.println("[WORD LENGTH: " + wordLength + "] has been processed: NO MATCHES!");
                    wordLength++;
                    Decrypt(encryptedWord);
                }
            break;

            case 5:
                resetChars();
               
                for(i = 0; i < 916132832; i++) {
                    char5 = i % 62;

                    if(char5 == 0) {
                        if(i > 0) {
                            if(char4 < 61) {
                                char4++;
                                if(Char[char2] == '9')
                                    char2 = 0;
                                if(Char[char3] == '9')
                                    char3 = 0;
                                if(Char[char4] == '9' && Char[char3] != '9')
                                    char3++;
                                if(Char[char3] == '9' && Char[char2] != '9')
                                    char2++;
                                if(Char[char2] == '9' && Char[char1] != '9')
                                    char1++;
                            } else {
                                char4 = 0;
                            }
                        }
                    }

                    currentCombo = "" + Char[char1] + Char[char2] + Char[char3] + Char[char4];

                    if(compareDigestedMsg(s, DigestMsg(currentCombo))) {
                        System.out.println("[MATCH FOUND!] Combonation: " + currentCombo);
                        wordLength = 1;
                        break;
                    }
                }
                if(!compareDigestedMsg(s, DigestMsg(currentCombo))) {
                    System.out.println("[WORD LENGTH: " + wordLength + "] has been processed: NO MATCHES!");
                    wordLength++;
                    Decrypt(encryptedWord);
                }
            break;
        }
    }
    public static void main(String[] args) {
        BruteForcer bf = new BruteForcer();
        new Thread(bf).start();
        while(true) {}
    }
}

Offline gh0st

  • Sir
  • ***
  • Posts: 575
  • Cookies: 8
  • #DEDSec
    • View Profile
Re: MD5 BruteForcer.
« Reply #1 on: December 03, 2010, 06:43:22 am »
did u do it?? if yes nice job the way to work is like in C++ Ive never coded in java but I coded one time a hello world and a basic I/O program in c++ , what ever I envy you 1 karma less for u
« Last Edit: December 03, 2010, 06:45:13 am by gh0st »

PublicEnemy

  • Guest
Re: MD5 BruteForcer.
« Reply #2 on: December 03, 2010, 10:23:58 am »
Brute forcing in Java... Performance \o/

Offline iLike

  • /dev/null
  • *
  • Posts: 8
  • Cookies: 1
  • IRC Geek.
    • View Profile
Re: MD5 BruteForcer.
« Reply #3 on: December 03, 2010, 02:30:41 pm »
Actually, PublicEnemy, Java isn't all so slow compared to what it was. (The language itself is comparable with C++ iirc)
It's the JVM that's slow as shit.

xor

  • Guest
Re: MD5 BruteForcer.
« Reply #4 on: December 12, 2010, 10:27:59 am »
Improvements:

  • Only cracks passwords up to 5 characters in length
  • Hard coded character set. Should use ascii values and a range.