Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

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

C# Bruteforce algorithmus

Diskussion: C# Bruteforce algorithmus im Forum Code Kitchen, in der Kategorie Software Home; Anzeige Hi! Ich suche einen brute force algorithmus für C# er soll möglichst schnell sein und halt alle möglichkeiten durchlaufen ...

Antwort
Alt 19.07.06, 23:04   #1 (permalink)
 
Registriert seit: 19.07.06
Floppy1009 Leistung: Facit NTK
Likes: 0
C# Bruteforce algorithmus

Anzeige

Hi!

Ich suche einen brute force algorithmus für C#
er soll möglichst schnell sein und halt alle möglichkeiten durchlaufen in der form etwa:

a
b
c
...
y
z
aa
ab
ac
...
etc

Hat da wer einen parat?


mfg
Floppy

ps:
wär cool wenn man angeben könnte welche buchstaben / zahlen / sonderzeichen er durchlaufen soll. muss aber nicht unbedingt sein. nen einfacher reicht mir auch.
thx

Floppy1009 ist offline   Mit Zitat antworten
Alt 19.07.06, 23:15   #2 (permalink)
 
Registriert seit: 08.11.05
Manuel Leistung: Facit NTK
Manuel eine Nachricht über ICQ schicken
Likes: 0
Standard

Ich kann zwar kein C# drum kann ich dir nur ne Idee geben wie du es lösen könntest, Coden musste es aber selber. Ich würds warscheinlich mit 2 Arrays machen, einem mit Feldern in der Anzahl der maximalen Buchstabe des Passworts und eins mit den Zeichen die verwendet werden. Dann kannste per Schleife erst im 1.Array beim 1. Wert alle Werte aus dem 2. Array nacheinander durchgehen usw. Ob das allerdings der schnellste Algorithmus ist weiß ich nicht, so würde ich es aber angehen wenn ich mir nen Bruteforcer schreiben würde.
Manuel ist offline   Mit Zitat antworten
   
HaBOT
 
- Anzeige -

Werbung ist gerade online    
Alt 20.07.06, 10:56   #3 (permalink)
Moderator
 
Benutzerbild von lightsaver
 
Registriert seit: 19.06.06
lightsaver Leistung: Pentium Ilightsaver Leistung: Pentium Ilightsaver Leistung: Pentium I
Likes: 51
Standard

also ich möchte ja fast behaupten, dass es keinen schnellen oder langsamen bruteforce-algorithmus gibt ;-)

bruteforce heißt doch letztendlich, dass du jede möglichkeit probierst. wie du das machst sollte dabei wohl ziemlich unerheblich sein, da du ja dennoch jede möglichkeit erzeugen musst.
lightsaver ist offline   Mit Zitat antworten
Alt 20.07.06, 13:21   #4 (permalink)
 
Registriert seit: 18.07.06
elvis13 Leistung: Facit NTK
Likes: 0
Standard

Du kannst aber Zeit "sparen" indem du moeglichst viel ausserhalb der Schleife(n) erledigst. Haengt auch stark davon ab, ob du etwas remote oder lokal "angreifen" willst.
elvis13 ist offline   Mit Zitat antworten
Alt 20.07.06, 13:59   #5 (permalink)
Themenstarter
 
Registriert seit: 19.07.06
Floppy1009 Leistung: Facit NTK
Likes: 0
Standard

nene lokal soll sich das ganze abspielen. ich will quasi nur eine vaiable (halt nen string) haben der alle möglichkeiten duchläuft.

ich hab das ganze schonmal für c++ entwickelt. da habe ich das halt mit nem char array gemacht, den ich um 1 immer erhöhe und wenn bei z angekommen habe ich das 2. feld und das 1. auf aa gestzt und dann wieder erhöht. nur war das halt schon nen bissel arbeit und ich hab den quelli nicht mehr. desshalb hab ich gehofft das einer grad sowas ma parat hat.

wenn nix hilft muss ich mich halt wieder dran setzten


achso und zum thema speed:
natürlich kann man zeit sparen. da man ja bei bruteforce sehr viele schleifendurchläufe hat, spielt in der schleife jede kleinste rechnung oder if-bedingung eine rolle. bei zb nur 7 zeichen (nur kleinbuchstaben) gibt es ja allein schon 8031810176 möglichkeiten. und jetzt überlegt mal ihr habt in diesen 8 millarden möglichkeiten sagen wir mal 2 if-bedingungen und ein rechenschritt mehr, macht das schon nen unterschied. bei 7 zeichen (klein-, großbuchstaben und zahlen) sind wir schon bei 3521614606208 möglichkeiten.

ps: naja und ich weis wenn ichs richtig schnell haben will, muss ich das in asm schreiben



mfg
Floppy
Floppy1009 ist offline   Mit Zitat antworten
Alt 20.07.06, 14:06   #6 (permalink)
 
Registriert seit: 18.07.06
elvis13 Leistung: Facit NTK
Likes: 0
Standard

Zitat:
wenn nix hilft muss ich mich halt wieder dran setzten
Naja sicher hilft was, ich denke (vor allem) wenn du den Algo in C++ schon mal geschrieben hast duerfte es nicht so schwer sein ... Hast du viel Erfahrung in C#? Oder willst du einfach einen fertigen Algo vor die Nase bekommen?

Es geht doch nur um ein Bisschen herumhantieren mit char's, ist nicht soo schwer

Mike
elvis13 ist offline   Mit Zitat antworten
Alt 20.07.06, 14:44   #7 (permalink)
 
Registriert seit: 23.05.05
Xalon Leistung: Facit NTK
Xalon eine Nachricht über ICQ schicken
Likes: 0
Standard

Code:
#include <iostream>

int main(void)
 {
  for (int a = 0;a <= 99;a++)
   for(int b = 0;b <= 99;b++)  
     std::cout << a << b << std::endl;

  return 0;    
 }
Xalon ist offline   Mit Zitat antworten
Alt 20.07.06, 16:29   #8 (permalink)
Themenstarter
 
Registriert seit: 19.07.06
Floppy1009 Leistung: Facit NTK
Likes: 0
Standard

Zitat:
Hast du viel Erfahrung in C#?
ne eben noch nicht. bin seit vorgestern von meinen auch nicht überragenden c++ kenntnissen zu c# übergelaufen.

ich hatte bei meinem c++ code immer int werte (die den ascii zeichen entsprechen) dem char array zugewiesen. da ja die buchstaben alle nacheinander kommen, brauchte man ja nur um 1 erhöhen. dies geht aber bei c# nicht so.


Zitat:
#include <iostream>
int main(void)
{ for (int a = 0;a <= 99;a++)
for(int b = 0;b <= 99;b++)
std::cout << a << b << std::endl;
return 0; }
erstmal thx!
aber dies is c++ und es ist auch nicht für buchstaben. und es ist nur für 2 zeichen. ich müsste ja eine variable anzahl an zeichen bedienen können.
ich weis wenn man die ausgabezeile ändert wärs au c# aber naja wie gesagt bringt das nicht soo viel.
Floppy1009 ist offline   Mit Zitat antworten
Alt 20.07.06, 17:11   #9 (permalink)
Member of Honour
 
Benutzerbild von ivegotmail
 
Registriert seit: 28.05.03
ivegotmail Leistung: Z3
Likes: 1
Standard

Code:
using System;
using System.Text;

namespace BruteForce
{
	class MainClass
	{
		public static void Main(string[] args)
		{
			String loweralpha = "abcdefghijklmnopqrstuvwxyz";
			int wordLength = 2;
			for(int i=1; i<=wordLength;i++)
				BruteForce(loweralpha,i);
		}
		
		public static void BruteForce(String charset, int wordLength) { 
		    long startw = 0; 
		    long endw = (long)Math.Pow(charset.Length,wordLength); 
		    long[] d = new long[wordLength+1];
		    char[] charsetArray = charset.ToCharArray();
		    int charsetLength = charset.Length;
		    StringBuilder s = new StringBuilder("");
		    
		    for (int i=wordLength; i>=0; i--) 
		            d[i] = (long)Math.Pow(charsetLength, i); 
		    
		    while(startw < endw) { 
		    	s.Remove(0,s.Length);
		        long mw = startw;  
		        for (int i=wordLength; i>=0; i--) { 
		            int w = (int)(mw/d[i]); 
		            
		            if (i==wordLength) {
		            	if (w!=0) s.Append(charsetArray[w]);
		            }
		            else s.Append(charsetArray[w]);
		            
		            mw = mw-(w*d[i]); 
		        } 
		        
		        // Ausgabe verbraucht viel Rechenzeit 
		         Console.WriteLine(s);
		        
		        startw++; 
		    }   
		}
	}
}
__________________
http://livehabo.hackerboard.de | http://livebb.sourceforge.net
ivegotmail ist offline   Mit Zitat antworten
Alt 20.07.06, 17:40   #10 (permalink)
 
Registriert seit: 18.07.06
elvis13 Leistung: Facit NTK
Likes: 0
Standard

Zu ivegotmail's Algorithmus:

Man koennte zwecks Performance noch einiges Ausserhalb der Schleife lassen, das waere konkret:

charset.Length und charset.ToCharArray() verbrauchen bei jedem Aufruf ziemlich viel Zeit (sogar bei Strings die 2 Zeichen lang sind), ich hab mal davon gelesen (sorry kann Quelle nicht Zitieren da nicht mehr parat), also die beiden "Werte" einfach in einer Variable intern lagern ...

Ansonsten hast du ja dank ivegotmail die beste Voraussetzung fuer dein Programm

Viel spass noch...

Mike
elvis13 ist offline   Mit Zitat antworten
Alt 20.07.06, 17:44   #11 (permalink)
CDW
Moderator
 
Benutzerbild von CDW
 
Registriert seit: 20.07.05
CDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: Opteron
Likes: 202
Standard

@ivegotmail: sind Strings unter C# nicht immutable? Und wird das Ganze dann nicht gerade dadurch (unveränderbarkeitt) gebremst, so dass man mit Char-Arrays vielleicht sehr spürbare Perfomancesteigerung erziehlen würde? Gerade die String-Object Verwaltung und Ähnliches dürfte bei solchen Aufgaben der Flaschenhals sein (imho ist es nicht viel anders, wenn man cout nutzt - die ganzen Extraprüfungen usw müssten doch extremst bremsen ) .
__________________
Noch mal, für alle Pseudo-Geeks: 1+1=0. -> 10 wäre Überlauf!
Selig, wer nichts zu sagen hat und trotzdem schweigt.
CDW ist offline   Mit Zitat antworten
Alt 20.07.06, 17:46   #12 (permalink)
 
Registriert seit: 18.07.06
elvis13 Leistung: Facit NTK
Likes: 0
Standard

True That, ich habe jetzt kein C# bei der Hand, aber jetzt kommt mir gerade die Idee, gibts sowas wie in java StringBuffer vielleicht auch in C#?

Mike
elvis13 ist offline   Mit Zitat antworten
Alt 20.07.06, 19:13   #13 (permalink)
Member of Honour
 
Benutzerbild von ivegotmail
 
Registriert seit: 28.05.03
ivegotmail Leistung: Z3
Likes: 1
Standard

jo Strings sind immutable und bei C# gibt es StringBuilder. ich hab den code oben mal entsprechend verbessert.
__________________
http://livehabo.hackerboard.de | http://livebb.sourceforge.net
ivegotmail ist offline   Mit Zitat antworten
Alt 21.07.06, 13:01   #14 (permalink)
Themenstarter
 
Registriert seit: 19.07.06
Floppy1009 Leistung: Facit NTK
Likes: 0
Standard

das is doch genau das was ich suche!!!

aller besten dank!!!!
Floppy1009 ist offline   Mit Zitat antworten
Alt 28.07.06, 09:39   #15 (permalink)
 
Registriert seit: 05.02.06
Greenberet Leistung: Facit NTK
Likes: 0
Standard

man kann die geschwindigkeit noch ein bischen verbessern.
Die Hochzahl wird jedes mal neu berechnet auch wenn sie sich nach ner zeit wiederholen. Sprich am anfang einmal berechnen und in einem Array schreiben und diesen dann jedes mal auslesen wäre schneller.

Zusätzlich könnte man noch ein bischen performance raus holen indem man den StringBuilder einfach nur immer wieder löscht anstatt ihn neu zu instanzieren.
Greenberet ist offline   Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Software Home » Code Kitchen » C# Bruteforce algorithmus
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
Bruteforce in C++ Hackse Code Kitchen 10 18.04.12 17:24
Bruteforce-Algorithmus kippt meinen Prozessor aus ?? Stein Code Kitchen 11 08.04.07 14:20
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