Hackerboard WikiHaboBlog

[HaBo]

 
Code Kitchen Allgemeines Coder-Forum rund um das Programmieren eigenständiger, ausführbarer Programme.

Bruteforce in C++

Diskussion: Bruteforce in C++ im Forum Code Kitchen, in der Kategorie Software Home; Hi @ all, öfters wurde hier im Forum nach Bruteforce-Algorithmen gefragt. Hab' mal kurz spaßhalber einen Bruteforce-Algorithmus geschrieben, um zu ...

Antwort
Alt 05.08.06, 19:03   #1 (permalink)
 
Benutzerbild von Hackse
 
Registriert seit: 31.07.06
Hackse Leistung: 8086
Likes: 27
Standard Bruteforce in C++


Hi @ all,
öfters wurde hier im Forum nach Bruteforce-Algorithmen gefragt. Hab' mal kurz spaßhalber einen Bruteforce-Algorithmus geschrieben, um zu zeigen wie's gemacht wird. Am Anfang des Programms könnt ihr zwischen einer iterativen und einer rekursiven Version wählen, wobei zu sagen ist, dass die Anzahl der Rekursionen der Anzahl der durchlaufenen Permutationen entspricht und somit nach dem vollgehauenen Stack das Programm abbricht. Der rekursive Algorithmus ist ohnehin eher spaßhalber, da er auch kleine Redundanzen enthält.

Anyway, hab's gepackt mit dem iterativen Algorithmus testhalber ins FTP-Account meiner MS-XBOX einzubrechen.

Der Algorithmus ist nur ein Beispiel, das noch gut erweitert werden kann. Wer möchte kann dem Algo. gern noch Sonderzeichen hinzufügen, oder ihn bei einer bestimmten Sequenz starten oder stoppen lassen.

Der iterative Algorithmus lässt sich mit nur drei zusätzlichen Zeilen dazu bewegen Zip-Archive, Rar-Archive und FTP-Accounts zu knacken (und VIELE andere Dinge), doch diesen illegalen Teil werd' ich nicht posten können und beschränke mich somit rein auf das Anzeigen der Permutationen.

Sourcecode sollte selbsterklärend sein, die Bruteforce-Algorithmen hab' ich in englisch kommentiert. Getestet hab' ich den Algorithmus unter Debian GNU/Linux.

Compile: g++ -o bruteforce bruteforce.cpp

Greetz
Hackse

PS: Anbei der Sourcecode:

Code:
// bruteforce.cpp --> iterative and recursive bruteforce algorithm

// ---------------------- (C) HACKSE 2006 ----------------------

#include <iostream>

using namespace std;

//***************************** GLOBAL MEMBERS ******************************//

const char SPACE = char(32);
const unsigned short MAX_LEN=30; // max. len. of bstring
char bstring[MAX_LEN];           // bruteforce string
unsigned short len=0;            // current length ob bstring
unsigned int recdepths=0;	 // depths of recursive algorithm

//****************************** PROTOTYPES *********************************//

// getting next bruteforce-ascii-symbol
char next(char);

// initialization for <bruteforce()>
void init();

// appends ascii-symbol to bstring and inc. len by 1
bool append();

// recursive calculation of next bruteforce string (causes STACK OVERFLOW !!!)
void bruteforce_recu(unsigned short i=(len-1));

// iterative version of bruteforce algorithm
void bruteforce_iter();

// sets whole bstring to next permutation (for <bruteforce_iter)
bool next_permutation();

//**************************** MAIN-FUNCTION ********************************//

int main (int argc, char *argv[]) {
  init();
  cout<<" *** BRUTEFORCE *** (c) Hackse 2006"<<endl;
  cout<<" **********************************"<<endl<<endl;
  char reply=0;
  do {
    cout<<"(i)terative or (r)ecursive?: "; 
    cin>>reply;
  } while (reply != 'i' && reply !='r');  
  if (reply=='i'){
    cout<<"Starting iterative version of bruteforce ..."<<endl;
    sleep(2);
    bruteforce_iter();
  } else {
      cout<<"Starting recursive version of bruteforce until ";
      cout<<"STACK-OVERFLOW! ..."<<endl;
      sleep(2);
      bruteforce_recu();
  }
  return 0;
};

//********************* FUNCTION IMPLEMENTATION *****************************//

char next(char s){
  switch (s) { 
    case SPACE :   return 'a';   break;
    case 'z'   :   return 'A';   break;
    case 'Z'   :   return '0';   break;
    case '9'   :   return SPACE; break;
    default    :   return  1+s;
  }
}

void init(){  
  for (int i=0; i<MAX_LEN; i++)
    (i==0)?bstring[i]=SPACE:bstring[i]=0;
  len=1;  
  recdepths=0;
};

bool append(){
  if (len>=MAX_LEN) 
    return false;
  bstring[len]=SPACE;
  len++;
  return true;
};

void bruteforce_recu(unsigned short i){
  cout<<bstring<<" --> recursion depths: " <<++recdepths<<endl;
  bstring[i]=next(bstring[i]);         // calc. next bstring
  if (bstring[i] == SPACE){            // carry?
    if (i==0) {                        // first pos.?
      append();                        // append element to bstring
      bruteforce_recu(len-1);          // recursive call on last index
   }
   else
        bruteforce_recu(i-1);          // recursive call on "prev." index
  }
  else
        bruteforce_recu(len-1);        // recursive call on last index
  recdepths--;
};

bool next_permutation(){  
  for (int i=len-1; i>=0; i--){
    bstring[i]=next(bstring[i]);       // set next bstring 
    if (bstring[i]!=SPACE)             // check for carry 
      return true;                     // exit if no carry
    else
      if (i==0)                        // on first char ...  
        if (append())                  // try to append char on carry-event
	  return true;                 // appending char was successful
	else
	  return false;                // length of bstring exceeds MAX_LEN
  }
}

void bruteforce_iter(){
  do  
    cout<<bstring<<endl;
  while (next_permutation());
}
Hackse ist offline   Mit Zitat antworten
Antwort
   

Werbung ist gerade online    

[HaBo] » Software Home » Code Kitchen » Bruteforce in C++
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
C# Bruteforce algorithmus Floppy1009 Code Kitchen 16 04.09.06 16:10
Bruteforce für TrueCrypt Oi!Alex Cryptography & Encryption 7 19.05.06 15:51
BruteForce Bananshake (In)security allgemein 1 05.02.02 14:33


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61