AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte TBruteForce - Version 0.5a [Update: 28.04.2008]
Thema durchsuchen
Ansicht
Themen-Optionen

TBruteForce - Version 0.5a [Update: 28.04.2008]

Ein Thema von Meflin · begonnen am 25. Aug 2005 · letzter Beitrag vom 13. Jan 2011
Antwort Antwort
Seite 6 von 10   « Erste     456 78     Letzte »    
Benutzerbild von Meflin
Meflin
Registriert seit: 21. Aug 2003
TBruteForce
Wer hätt's gedacht - eine Brute Force Klasse für Delphi

Aktuelle Version: 0.5a
Download: im Anhang [6,39 KB]



Was ist TBruteForce?

TBruteForce ist eine Klasse, mit der die Implementierung einer BruteForcing-Funktion im eigenen Programm möglichst einfach und gleichzeitig möglichst universell ermöglicht werden soll. Die aktuelle Version verbraucht an sich kaum Arbeitsspeicher (es sei denn der Programmierer entscheidet sich dazu, die erzeugten Kombinationen in irgendeiner Form zwischenzuspeichern). Das bedeutet, dass für die Performance des Vorgangs (abgesehen von der Effektivität des Codes) allein die Prozessorgeschwindigkeit verantwortlich ist.
Bei einem 2GHz Prozessor(kern) liegt die blose Geschwindigkeit bei etwa 50.000.000 Kombinationen pro Sekunde, durch das Zusammensetzen der strings zur Ausgabe verringert sich die Geschwindigkeit auf etwa 2.000.000 Kombinationen pro Sekunde (hier besteht eindeutig Optimierungsbedarf ). Lässt man sich jetzt noch alle Kombinationen sichtbar ausgeben, beispielsweise in einer Konsole, so verringert sich die Geschwindigkeit weiter auf ca. 20.000 Kombinationen pro Sekunde.
So, ich hoffe nun hast Du eine ungefähre Vorstellung in welchen Geschwindigkeitsbereichen man sich mit der Klasse theoretisch und in der Praxis bewegen kann.



Verwendung

Um die Klasse in Betrieb zu nehmen, ist nichts weiter nötig, als die Unit BruteForce.pas in das Projektverzeichnis zu kopieren und in die uses der fraglichen Unit aufzunehmen.
Delphi-Quellcode:
uses
  BruteForce;
Um mit einem einfachen Beispiel zu beginnen: Wir wollen Kombinationen mit 5 Zeichen Länge erzeugen, der Zeichenvorrat soll dabei das Alphabet in Kleinbuchstaben sein. Oder anders ausgedrückt wir wollen alle Kombinationen von aaaaa, aaaab, aaaac, ... bis zzzzx, zzzzy, zzzzz bilden.
Delphi-Quellcode:
var
  BruteForce: TBruteForce;
begin
  // Instanzierung
  BruteForce := TBruteForce.Create;

  // Wir wollen 5 Stellen kombinieren, sg. "Nodes"
  BruteForce.NodeCount := 5;

  // Zeichenvorrat setzen, AlphaLowerCase ist eine Konstante die von der Unit bereitgestellt wird
  // Als ElementList erwartet die Klasse ein array of string. BFConstToDynArray wandelt ein
  // statisches array of string in ein dynamisches array of string um.
  BruteForce.ElementList := BFConstToDynArray(AlphaLowerCase);

  // Soderle. Bereits jetzt enthält BruteForce.Value die erste Kombinationen, in diesem Fall aaaaa.
  // Also müssen wir die gleich ausgeben.
  DoSomething(BruteForce.Value);

  // Jetzt gehts ans eigentliche BruteForcen, wir bilden die Kombinationen
  // BruteForce.NextValue bildet die nächste Kombinationen und gibt das Ergebnis als string zurück
  while not BruteForce.Finished do begin
    DoSomething(BruteForce.NextValue);
  end;

  // Wuppdi - jetzt sind wir schon fertig ;)
Wie viele Kombinationen die Klasse erzeugen wird lässt sich über
BruteForce.ToDo auslesen.


Jetzt ist es aber so, dass man jedem Node seinen eigenen Zeichenvorrat zuweisen kann. D.h. wir könnten beispielsweise auch Kombinationen der länge 5 erzeugen, bei denen die letzten beiden Zeichen Ziffern sind. Das ginge so:
Delphi-Quellcode:
var
  BruteForce: TBruteForce;
begin
  BruteForce := TBruteForce.Create;
  BruteForce.NodeCount := 5;
  BruteForce.ElementList := BFConstToDynArray(AlphaLowerCase);
  // Jetzt kommts ;)
  BruteForce.Nodes[0].ElementList := BFConstToDynArray(Numeric);
  BruteForce.Nodes[1].ElementList := BFConstToDynArray(Numeric);

  DoSomething(BruteForce.Value);

  while not BruteForce.Finished do begin
    DoSomething(BruteForce.NextValue);
  end;
Dieser Code würde alle Kombinationen von aaa00, aaa01,... bis zzz99 ausgeben. Jetzt wunderst Du dich vielleicht, wieso wir den Zeichenvorrat der Nodes 0 und 1 ändern und nicht den der Nodes 3 und 4 (die Zahlen sollen ja rechts hin). Nunja, je weiter ein Node links steht, desto höherwertiger ist er. Deshalb wird der Node, der in der Ausgabe die "rechteste" Stelle repräsentiert über den Index 0 angesprochen. Puh, ich hoffe das ist einigermasen verständlich
Code:
Wort a a a 0 0
Node 4 3 2 1 0

To Do

Bei der Version 0.5a handelt es sich um ein experimentelles Release. Es sind noch kaum Fehlerbehandlungsroutinen eingebaut! Bis jetzt ist es auch so, dass NodeCount unbedingt vor ElementList gesetzt werden muss (ein Henne-Ei-Problem für das ich bis jetzt keine überzeugende Lösung gefunden habe).
Einbauen will ich noch eine Speichern/Laden Funktion, die Möglichkeit, den BruteForce-Vorgang in beliebig viele Pakete aufzuteilen (Multithreading, Parallel Computing), sowie eine Ausgabe der Kombinationen wahlweise als array of string (bzw. TBFElementList). Ich habe auch schon mit dem Gedanken gespielt, beliebige Dinge kombinierbar zu machen (beispielsweise Integer, Objekte, etc). Aber ich bin mir nicht sicher, ob sich der Aufwand lohnen würde.

Ich würde mich freuen, wenn von euch noch Vorschläge und Anregungen kämen, wie man die Komponente noch erweitern könnte



Changelog

Code:
28.04.2008: Version 0.5a "Pandora" released
     Neu: 100% Codebasis ;)
     Kein Multithreading mehr integriert
     Es ist keine Komponente mehr

09.05.2006: Version 0.3b und aktualisierte Demo released
     Neu: Wahl zwischen iterativem und rekurivem Algorithmus
     Neu: TMaxThreads property
     Neu: OnThreadStart Event
     Neu: KeyList jetzt direkt in TBruteForce implementiert, keine 2 Komponenten mehr
     TThreadStatus nicht mehr hardgecodet
     Und alles, was ich inzwischen vergessen habe :(

05.10.2005: Version 0.1.3 Beta RC 2 und aktualisierte Demo released
     Minibugfix beim OnProgressChangeEvent gefixt

03.10.2005: Version 0.1.3 Beta RC 1 und aktualisierte Demo released
     Bugfix: Komponente zählt jetzt richtig
     Bugfix: Memory Leak entfernt
     Performance: Callback Funktion OnProgressChange geht jetzt nicht mehr so auf die Performance

30.08.2005: Version 0.1.2 Beta und aktualisierte Demo released
     Bugfix: das Problem, das das OnLastThreadFinished Event öfter ausgeführt wird sollte behoben sein
     Bugfix: Kleine Unsauberheit beim Progresscounter behoben
     Bugfix: OnProgressChangeTolerance war etwas zu tolerant
     Neu: eine Exception wurde ergänzt

29.08.2005: Demo released

27.08.2005: Version 0.1.1 Beta und neue Demo released
     Bugfix: bei EndLength = 1 werden jetzt nicht mehr fälschlicherweise die 2-stelligen Keys erzeugt
     Neu: Event OnProgressChange
     Neu: public property OnProgressChangeTolerance
     Neu: Exception Handling

26.08.2005: Demo released

25.08.2005: Version 0.1 Beta released
Angehängte Dateien
Dateityp: rar tbruteforce.0.3b_108.rar (4,2 KB, 645x aufgerufen)
Dateityp: pas bruteforce_207.pas (6,4 KB, 348x aufgerufen)
 
Benutzerbild von Meflin
Meflin
 
#51
  Alt 3. Okt 2005, 17:35
03.10.2005: Version 0.1.3 Beta RC 1 und aktualisierte Demo released
  • Bugfix: Komponente zählt jetzt richtig
  • Bugfix: Memory Leak entfernt
  • Performance: Callback Funktion OnProgressChange geht jetzt nicht mehr so auf die Performance

Download im Anhang

Neue Demoanwendung:
Download im Anhang
Leo S.
  Mit Zitat antworten Zitat
Benutzerbild von Meflin
Meflin
 
#52
  Alt 5. Okt 2005, 16:05
peinlich peinlich... noch ein Bug gefunden

05.10.2005: Version 0.1.3 Beta RC 2 und aktualisierte Demo released
  • Minibugfix beim OnProgressChangeEvent gefixt

Download im Anhang

Demoanwendung wie immer im Anhang
Leo S.
  Mit Zitat antworten Zitat
Benutzerbild von Meflin
Meflin
 
#53
  Alt 9. Mai 2006, 18:56
tata... es ist so weit, ich weiß ihr konntet es alle kaum erwarten, hier ist das heisersehnte neue Release

09.05.2006: Version 0.3b und aktualisierte Demo released
  • Neu: Wahl zwischen iterativem und rekurivem Algorithmus
  • Neu: TMaxThreads property
  • Neu: OnThreadStart Event
  • Neu: KeyList jetzt direkt in TBruteForce implementiert, keine 2 Komponenten mehr
  • TThreadStatus nicht mehr hardgecodet
  • Und alles, was ich inzwischen vergessen habe
es hat sich viel geändert, die neue Komponente ist nun zu alten Versionen nicht mehr kompatibel! Und eben da sich so viel geändert hat hoffe ich auf rege Testbeteiligung, da sich nun auch wieder ganz neue Möglichkeiten für Bugs ergeben haben

TMaxThreads
legt fest, wie viele Threads die Komponente maximal gleichzeitig verwendet. Wie immer bedeutet 0 hier unbegrenzt

OnThreadStart
wird immer dann ausgeführt, wenn ein Thread gestartet wird

BruteForce.KeyList
hier werden nun die erzeugten Keys abgelegt, die seperate Komponente TKeyList ist direkt in der Klasse TBruteForce eingebunden

Algorithm
Wahl zwischen bfIterative und bfRecursive, also iterativem und rekursivem Algorithmus

TThreadStatus
nicht mehr hardgecodet, es gibt bis jetzt tsActive, tsComputing, tsFinished, tsSuspended

Kann sein dass ich noch ein paar Änderungen vergessen habe, das letzte Release ist lange her


Download der Komponente im ersten Post im Anhang
Die Demoanwendung gibts da ebenfalls im Anhang


bei Zeiten muss ich dann mal eben diesen ersten Post aktualisieren, stimmt auch nicht mehr alles so ganz, und die Übersicht leidet

Leo S.
  Mit Zitat antworten Zitat
Benutzerbild von Meflin
Meflin
 
#54
  Alt 13. Jul 2006, 20:06
Soderle.

Hiermit wird die Entwicklung an dieser Version der Komponente endgültig eingestellt!

In ausführlichen Tests sind mir keine weiteren Fehler begegnet, die Komponente dürfte also recht stabil laufen Allerdings wird es eine Nachfolgeversion geben, die allerdings auf einer völlig anderen Architektur beruht, die, ihr werdet es euch schon gedacht haben, natürlich viel besser ist als die jetzige

Wann ich es bei dieser neuen Version zu einem Release bringe kann ich allerdings noch nicht wirklich abschätzen.

Hiermit wird jedenfalls die Version 0.3b als Final erklärt, es wird keine weitere geben!

Den Anfangspost habe ich bei der Gelegenheit auch noch gleich neu gestaltet

greetz

Leo S.
  Mit Zitat antworten Zitat
fLaSh11
 
#55
  Alt 13. Jul 2006, 21:22
ich hätte da noch was an der Demo auszusetzen (das Bild ist wohl selbsterklärend... Weis wurde der eine Teil, da die ListBox beim Klick auf View Keys wohl überfordert wurde^^)
Angehängte Grafiken
Dateityp: jpg fehler_981.jpg (705,1 KB, 106x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von Meflin
Meflin
 
#56
  Alt 14. Jul 2006, 15:35
Zitat von fLaSh11:
ich hätte da noch was an der Demo auszusetzen (das Bild ist wohl selbsterklärend...
so selbsterklärend ist das nicht... interresant wäre ja wie du den Fehler produziert hast (also ich meine die Fortschrittsangabe). Dass dein RAM die Anzeige der Passwörter nicht packt... naja, da kann ja meine Demo nichts dafür

Leo S.
  Mit Zitat antworten Zitat
mOfl
 
#57
  Alt 25. Nov 2007, 02:22
Ich oute mich jetzt mal als leidenschaftlicher Threads-von-anno-Klondyke-Ausgraber, aber das beweist ja, dass dieses gute Werk auch heute noch Beachtung findet =)

Ich brauche für eine kleine Anwendung eine multithreadingfähige Bruteforce-Komponente - TBruteForce hört sich da recht gut an. Nur leider scheitere ich an einem schier unbedeutenden Punkt...

Installation
1. Dateien entpacken
2. Die TBruteForce.dpk Datei in Delphi öffnen
3. Das Package compilieren (dazu zuerst den Bibliothekspfad ergänzen)
4. Das Package installieren
5. Datei > Alles schließen

Entpacken schaff ich noch souverän, dpk in Delphi öffnen mach ich auch noch, als hätt ich mein Leben lang nichts anderes gemacht, aber wie und wo ergänze ich den Bibliothekspfad? Ich öffne die Datei also, klicke OK bei der Meldung, dass die *.res-Datei neu erzeugt wurde und dann hab ich da das kleine Fensterchen mit "Contains" und "Requires", wo ich auf Compile drücken kann. Wenn ich das einfach so mach, kommt natürlich ein Fehler - ich hab ja den ollen Bibliothekspfad nicht ergänzt, weil ich natürlich nicht weiß, was das ist und wo ich es eintrage

Ich tät mich ganz arg freuen, wenn einer kurz Zeit finden würde, mir die Welt der Bibliothekspfade näher zu bringen =)

Grüße Dani
  Mit Zitat antworten Zitat
Benutzerbild von rawsoul
rawsoul

 
Delphi 2005 Personal
 
#58
  Alt 25. Nov 2007, 02:50
Das geschieht über Tools -> Optionen -> Bibliotheken. Dort kannst du Directorys angeben, in diesem Falle den Source Ordner.
Frank Dumont
  Mit Zitat antworten Zitat
mOfl
 
#59
  Alt 25. Nov 2007, 21:30
Hm, tut mir leid, dass ich so unwissend bin, aber was genau muss ich da ändern? Tools -> Umgebungsoptionen -> Bibliothek und dann hab ich da Bibliothekspfad, BPL-Ausgabeverzeichnis, DCP-Ausgabeverzeichnis und Suchpfad. Ich schätze, ich muss bei "Bibliothekspfad" was hinzufügen, oder? Also klick ich auf ... und füge da ein Verzeichnis hinzu, aber welches? Was ist der Source Ordner? Der mit der BruteForce.pas oder der Ordner Programme\Delphi 7\Source? Sowohl bei dem einen, als auch beim anderen kommt beim anschließenden Klick auf "Compile" der [Fehler] BruteForce.pas(141): Ungültige Compileranweisung: 'REGION'.
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

 
Delphi 7 Professional
 
#60
  Alt 30. Nov 2007, 15:17
mich würds auch mal interessieren, was ich tun muss, um die Fehler:

[Fehler] BruteForce.pas(141): Ungültige Compileranweisung: 'REGION'
[Fehler] BruteForce.pas(474): Ungültige Compileranweisung: 'ENDREGION'
[Fehler] BruteForce.pas(479): Ungültige Compileranweisung: 'REGION'
[Fehler] BruteForce.pas(601): Ungültige Compileranweisung: 'ENDREGION'

wegzubekommen

rollstuhlfahrer
Bernhard
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 6 von 10   « Erste     456 78     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

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

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:44 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz