Discord Server Red Security Twitter Donation to Red Security Red Security Youtube Channel Red Security Tumblr Profile
Login or Register to Hide ads and Accessing all features on the forum

Source code Brute Forcer C++

0 Replies, 4695 Views

Code:
// *** SIMPLE C++ BRUTE FORCE EXAMPLE CODE ***

#include <iostream>
#include <string>
using namespace std;

/* CHARACTER LISTS */
char lower[27]={'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'};
char upper[27]={'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'};
char numbs[11]={'0','1','2','3','4','5','6','7','8','9','\0'};
char symbls[30]={'!','?','.',':',',','-','_','#','$','*','+','%','&','/','\\','(',')','[',']','@','=',';','{','}','<','>','|','^','"','\0'};
char alphabet[95];                // This will contain the brute force alphabet

/* VARIABLES */
string password = "";            // We will brute-force this
string bruteword = "";            // The string we want to be =password
string pw = "";        // Just a help variable; contains the matching bruteword
string letters = "";            // Letters that will be added to the current character(alphabet[X]) in order to create the bruteword
bool pw_found = false;            // Password ain't found yet.
int maxChars = 15;                // Maximum length of the bruteword (can be changed by the user)
int minChars = 1;                // Minimum length o. t. BW ( " )
int alph_length = 0;            // Length of the char alphabet

/* VOIDS */
void asdf();        // Nonsense, but funny ;P
void createAlph();        // Creates brute alphabet
void check(string bruteword);        // Checks if bruteword = password
void brute (int charsInBW, int instance, string letters);        // BRUTE BRUTE BRUTE

/* PROGRAM CODE */
int  main()
{
   // START ROUTINE //
   cout << endl;
   cout << "Enter a password to attack: ";
   cin >> password;   

   cout << endl;
   cout << "Minimum length of the bruteword(default 1): ";
   cin >> minChars;
   cout << "Maximum length of the bruteword(default 15): ";
   cin >> maxChars;

   // CREATING THE ALPHABET ARRAY //
   createAlph();

   // Right before we start...
   cout << endl;
   cout << "**" << endl;
   cout << "Password string that will be attacked: '" << password << "'" << endl;
   alph_length = strlen(alphabet);
   cout << "Brute force alphabet: " << alphabet << endl;
   cout << "Characters: " << alph_length << endl;
   asdf();        // Some useless extra feature, I was bored
   cout << "**" << endl << endl;
   cout << "Press ENTER to start brute forcing..." << endl;
   cin.get();cin.get();        // Forces the application to wait for user input

   // LET'S GO! //
   for( int i=minChars; i<=maxChars ; i++)        // Bruteword needs [i] characters.
   {        // ( e.g. the brutewords with 1 character don't match? Then use 2 characters etc etc ... )
       brute(i,0,letters);   
   }        // Read the comments in void brute() for further information.

   // FOR()-LOOP STOPPED, PASSWORD FOUND OR NOT?
   if ( pw_found )
   {   // match!
       cout << "Bruteforcing stopped." << endl << endl;
       cout << "PASSWORD MATCH!!! -> " << pw << endl << endl;
       cout << "Press ESCAPE to close the application...";
       cin.get();        // Forces the application to wait for user input
   }
   else
   {    // no match ... :(
       cout << "Bruteforcing stopped." << endl << endl;
       cout << "*** No matching password has been found." << endl << endl;
       cout << "Press ESCAPE to close the application...";
       cin.get();        // Forces the application to wait for user input
   }

   return 0;
}

void brute(int charsInBW, int instance, string letters)
{   
   for(int b=0; b<alph_length ; b++ )        // There are [alph_length] characters in char array alphabet( e.g.'a'=position 0 and 'z'=position 25).
   {        // Now, alphabet[b] can display every single character in the chosen alphabet.
       if( !pw_found )        // Password still unknown?
       {
           if ( instance+1 != charsInBW )        // How many characters needs the bruteword(this is told by charsInBW)? If >1, then use this ( comparable to "picture in picture" or "mise en abyme" ) ...
           {        // It creates [charsInBW-1] running brute voids(and each one of them defines exactly 1 character in the bruteword) that run within a brute void that already started(e.g. the first instance started by int main).
               brute(charsInBW, instance+1, alphabet[b]+letters);        // "instance+1": One needed brute-instance less, because a new one ...
           }        // ... with alphabet[b]+(letters of other instances) in the "letters"-string has been started.
           else check(alphabet[b]+letters);    // This is the last instance which checks ...
       }        // ... if (current character)+(letters of all other instances) is =password.   
       else    // A matching password has been found!
       {
           b=alph_length;        // This stops the for()-loops in void brute...
           maxChars = pw.size();            // ... and in int main().
       }
   }
}

void check(string bruteword)
{
   cout << bruteword << endl;
   if ( bruteword == password )  // Bruteword matches?
   {
       pw_found = true;    // Stops the creation of instances in void brute.
       pw = bruteword;        // Writes a global string for displaying the matching bruteword in int main.
   }
}

void createAlph()        // Should be self explanatory ...
{
   cout << endl;
   string answ = "";                // This will store the user's answers during alphabet construction

   cout << "Attack with lower case letters(Y/N)? ";
   cin >> answ;
   if ( answ == "y" || answ == "Y" ) strncat_s(alphabet,sizeof(alphabet),lower,sizeof(lower));
   else if ( answ == "n" || answ == "N" ) cout << "*** No lower case letters." << endl;
   else cout << "*** Wrong input." << endl << "Lower case letters have NOT been added to the brute force alphabet." << endl;
   answ = "";         // Reset for possible rewrite

   cout << "Attack with numbers(Y/N)? ";
   cin >> answ;
   if ( answ == "y" || answ == "Y" ) strncat_s(alphabet,sizeof(alphabet),numbs,sizeof(numbs));
   else if ( answ == "n" || answ == "N" ) cout << "*** No numbers." << endl;
   else cout << "*** Wrong input." << endl << "Numbers have NOT been added to the brute force alphabet." << endl;
   answ = "";

   cout << "Attack with upper case letters(Y/N)? ";
   cin >> answ;
   if ( answ == "y" || answ == "Y" ) strncat_s(alphabet,sizeof(alphabet),upper,sizeof(upper));
   else if ( answ == "n" || answ == "N" ) cout << "*** No upper case letters." << endl;
   else cout << "*** Wrong input." << endl << "Upper case letters have NOT been added to the brute force alphabet." << endl;
   answ = "";

   cout << "Attack with symbols(Y/N)? ";
   cin >> answ;
   if ( answ == "y" || answ == "Y" ) strncat_s(alphabet,sizeof(alphabet),symbls,sizeof(symbls));
   else if ( answ == "n" || answ == "N" ) cout << "*** No symbols." << endl;
   else cout << "*** Wrong input." << endl << "Symbols have NOT been added to the brute force alphabet." << endl;
   answ = "";
}

void asdf()
{
   string first = "";
   string last = "";
   char cFirst=alphabet[0];
   char cLast=alphabet[alph_length-1];

   for(int i=1; i<=minChars;i++)
   {
       first=first+cFirst;
   }

   for(int i=1; i<=maxChars;i++)
   {
       last=last+cLast;
   }

   cout << "Going to attack from '" << first << "' to '" << last << "'!" << endl;
}
//
// END OF FILE



Users browsing this thread: 1 Guest(s)