Delphi-Forum.de Delphi-Library.de
C-Sharp-Forum.de C-Sharp-Library.de
Registrieren Login Suche Hilfe Sitemap
Delphi und Brute-Force
spacer
Autor Nachricht
vazrul
Hält's aus hier

Beiträge: 5
Dabei seit: 03.03.2010



BeitragVerfasst: Mi 03.03.10 21:54  Antworten mit Zitat Beitrag melden
Nabend ;)

mich interessiert die möglichkeit den brute force angriff in delpgi testweise zu programmieren(hatten in der schule verschlüsselungsverfahrn, fand das thema interessant)

Hab mich auch schon versucht, denke aber dass ich es extremst kompliziert geschrieben habe und es wahrscheinlich einen viel simpleren algorithmus gibt.

Zunächst was mein Programm macht:-
-Zufälliger 1-2 stelliger schlüssel generiert und in maskedit gespeichert.
-Delphi generiert verschiedene 1-2 stellige Kombinationen und vergleicht diese mit dem text in maskedit

generiert wird mit chr(1-255) also alle kombinationen des ASCII codes

der Quelltext: {diese button.click funktion wird nach dem generieren einens keys ausgeführt um nachzusehn ob er übereinstimmt}
ausblenden Delphi-Quelltext markieren
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:
procedure TForm1.Button2Click(Sender: TObject);
begin
if maskedit1.Text=pw then begin
showmessage(brute);
form1.close;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var i,lang,hilfe,hilfe2:integer; text,htext:string;
begin
lang:=0;
text:='';
for i:=1 to 255 do begin
brute:=chr(i);
maskedit1.Text:=brute;
button2.Click; // bis hierhin werden 1 stellige keys probiert
end;
brute:='';
hilfe:=1;
i:=1;
while hilfe<> 255 do begin
brute:=chr(hilfe) + chr(i);
maskedit1.Text:=brute;
button2.click;
i:=i+1;
if i= 255 then begin
i:=1;
hilfe:=hilfe+1; // hier werden 2 stellige probiert
end;

meine frage, kann man das ganze irgendwie vereinfachen? 3 stellige krieg ich schon auf diese weise nicht mehr hin, da die if bzw while verschachtelung über mein können hinausgeht. Was kann ich generell verbessern und gibts eine vorlage dazu?

lg und für jede hilfe dankbar


Zuletzt bearbeitet von vazrul am Mi 03.03.10 23:40, insgesamt 1-mal bearbeitet
Private Nachricht sendenPosting in privater Nachricht zitieren
platzwart
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star

Beiträge: 671
Erhaltene Danke: 2
Dabei seit: 12.12.2005


Win 7, Ubuntu 9.10
Delphi 2007 Pro, C++, Qt
BeitragVerfasst: Mi 03.03.10 22:40  Antworten mit Zitat Beitrag melden
Bitte benutz Delphi-Tags und rück den Quelltext anständig ein, so kann man garnix lesen...

_________________
Wissenschaft schafft Wissenschaft, denn Wissenschaft ist Wissenschaft, die mit Wissen und Schaffen Wissen schafft. (myself)
Private Nachricht sendenPosting in privater Nachricht zitieren
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic starofftopic star
Nussknacker 2009 - 1. Rang

Beiträge: 8056
Erhaltene Danke: 17
Dabei seit: 16.07.2004
Wohnort: Jahnsdorf

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, L0.9\FPC2.0
BeitragVerfasst: Mi 03.03.10 22:59  Antworten mit Zitat Beitrag melden
Könntest Du bitte deinen Quelltext in Delphi-Tags einfassen? Dadurch wird das so schön lesbar, wie bei mir ;-)

Aber zu deiner Frage: Ja, das geht zu vereinfachen; und wird dabei sogar noch mal um einiges schneller.

Aber fangen wir klein an. Als erstes räumen wir in deinem Code dazu mal kurz auf:

ausblenden Delphi-Quelltext markieren
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
procedure TForm1.Button1Click(Sender: TObject);
var
I: Integer; //Ein paar Zählvariablen; kommt immer gut, da paar zu haben
PW_Check: String; //Das "verschlüsselte", zu suchende Passwort
PW: String; //Unser aktuell geprüftes Passwort
begin
PW_Check := Edit1.Text; //Verschlüsseltes Passwort lesen
PW := ''; //Mit leerem Passwort initialisieren

//Bruteforcing ;-)
While PW_Check <> EncryptPW(PW) Do
GetNextPW;

ShowMessage('Huhu, gefunden! PW ist: ' + PW);
end;


Einfach, nicht? Die beiden Routinen EncryptPW und GetNextPW bauen wir gleich. Erstmal die einfachere von beiden: EncryptPW

ausblenden Delphi-Quelltext markieren
1:
2:
3:
4:
procedure EncryptPW(PW: String): String;
begin
Result := PW; //Vorerst keine Verschlüsslung
end;


Nun der spannende Teil der Geschichte.

ausblenden Delphi-Quelltext markieren
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:
Procedure GetNextPW;
begin
//Erstes Zeichen ergänzen
If PW = '' Then
Begin
PW := #1;
exit;
end;

//Schauen, ob's einen Übertrag gibt
I := 1;
While (I <= Length(PW)) and (PW[I] = #255) do
Begin
//Rücksprung auf erstes Zeichen ausführen
PW[I] := #1;
//Nächstes Zeichen anvisieren
Inc(I);
end;

//Gültiges Zeichen innerhalb des Passwortes?
if I <= Length(PW) Then
Begin
//Zeichen erhöhen
Inc(PW[I]);
end
else
begin
//Neues Zeichen am Ende des Passwortes anhängen.
PW := PW + #1;
end;
end;


Die beiden zusätzlichen Routinen gehören beide zwischen die Zeile PW: String und dem begin.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Private Nachricht sendenPosting in privater Nachricht zitieren Webseite dieses Mitglieds besuchen
vazrul
Hält's aus hier

(Threadstarter)

Beiträge: 5
Dabei seit: 03.03.2010



BeitragVerfasst: Mi 03.03.10 23:30  Antworten mit Zitat Beitrag melden
erstmal vielen dank für eure antworten (besonders dir BenBE, hast mir sehr geholfen) ! ;-)

wie rück ich den text denn in delphi tags ein? tut mir leid für die frage aber würd ich gern wissen, mein text sieht wirklich wie 'dahingeklatscht'aus.

lg und danke nochmals
Private Nachricht sendenPosting in privater Nachricht zitieren
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic starofftopic star
Nussknacker 2009 - 1. Rang

Beiträge: 8056
Erhaltene Danke: 17
Dabei seit: 16.07.2004
Wohnort: Jahnsdorf

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, L0.9\FPC2.0
BeitragVerfasst: Mi 03.03.10 23:32  Antworten mit Zitat Beitrag melden
Einfach [delphi] vor und [/delphi] nach deinem Quelltext-Abschnitt einfügen.

Moderiert von user profile iconNarses: Pseudo-Tagging geändert.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Private Nachricht sendenPosting in privater Nachricht zitieren Webseite dieses Mitglieds besuchen
vazrul
Hält's aus hier

(Threadstarter)

Beiträge: 5
Dabei seit: 03.03.2010



BeitragVerfasst: Mi 03.03.10 23:39  Antworten mit Zitat Beitrag melden
//Gültiges Zeichen innerhalb des Passwortes?
if I <= Length(PW) Then

also gehst von dem brute forcing davon aus, dass das pw indirekt bekannt ist? verstehe die zeile nicht ganz ;-)
Hatte es so vor , dass beim ergeinis OnCreate vom Formular ein zufälliges PW mit einer zufälligen schlüssellänge generiert wird, was durch das brute forcing erst rausgefunden werden muss (ebenfalls die länge, welche unbekannt ist)
lässt sich sowas in delphi realisieren? (denke mal maximale schlüssellänge sei 4-5, da das brute forcing sonst zu viel zeit in anspruch nimmt oder? Fragen über fragen, bitte um rat ;)

lg
Private Nachricht sendenPosting in privater Nachricht zitieren
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic starofftopic star
Nussknacker 2009 - 1. Rang

Beiträge: 8056
Erhaltene Danke: 17
Dabei seit: 16.07.2004
Wohnort: Jahnsdorf

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, L0.9\FPC2.0
BeitragVerfasst: Mi 03.03.10 23:51  Antworten mit Zitat Beitrag melden
Nicht ganz. PW ist das Passwort, was gerade ausprobiert wird. Da dabei jedoch nur auf Zeichen innerhalb des PWs zugegriffen werden darf, stellt diese Abfrage sicher, dass wir mit der Schleife davor beim Eintragen des Übertrages nicht über das Ende hinaus gegangen sind.

Das zu erratende Passwort steht in PW_Check drinnen und wird beim ermitteln des Passwortes lediglich beim Vergleich, ob das richtige Passwort gefunden wurde, angefasst.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Private Nachricht sendenPosting in privater Nachricht zitieren Webseite dieses Mitglieds besuchen
vazrul
Hält's aus hier

(Threadstarter)

Beiträge: 5
Dabei seit: 03.03.2010



BeitragVerfasst: Do 04.03.10 18:59  Antworten mit Zitat Beitrag melden
so, wollte BenBe's vorerst nicht direkt kopieren und habs nun so programmiert:

ausblenden volle Höhe Delphi-Quelltext markieren
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:
procedure TForm1.FormCreate(Sender: TObject);
var ran,i:integer;
begin
brute:='';
randomize;
pw:='';
ran:=random(81)+48;
i:=random(3)+1;
while i<>0 do begin
i:=i-1;
pw:=pw+chr(ran);
ran:=random(81)+48;
end;
maskedit1.Text:='';
showmessage(pw);
end;

procedure TForm1.Button2Click(Sender: TObject); //kontrolle des generierten
begin
if maskedit1.Text=pw then begin
showmessage(brute);
form1.close;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var i,j,k,lang,hilfe,hilfe2:integer;
begin
for i:=47 to 130 do begin // kleinbuchstaben und zahlen im ASCII code
brute:=chr(i);
maskedit1.Text:=brute;
button2.Click;
end; // Ende des durchlaufs für 1 stellige keys
// key wird bei FormCreate zufällig mit 1/2/3 stellen erzeugt.
brute:='';
for i:=48 to 129 do begin
for j:=48 to 129 do begin
brute:=chr(i)+chr(j);
maskedit1.Text:=brute;
button2.Click;
end; // ende des durchlaufs für 2 stellige keys
end;
brute:='';
for i:= 47 to 130 do begin
for j:= 47 to 130 do begin
for k:= 47 to 130 do begin
brute:=chr(i)+chr(j)+chr(k);
maskedit1.Text:=brute;
button2.Click;
end; // ende des durchlaufs für 3 stellige keys
end;



es tut sogar was es soll ;-)
allerdings läuft während dem bruteforcing gar nichts, ich weiß nie ob das programm am decrypten ist
oder längst abgestürzt. Wollte nebenher nen timer einbaun der die benötigte zeit mist bei Button1.click mit
timer1.enabled welcher dann die sekunden zählt.

allerdings kommts soweit gar net und er führt nur das bruteforcing aus.

Was mich ebenfalls stört, nach der showmessage in Button2.click soll form1.close ausgeführt werden, soweit kommts aber nicht da nach der showmessage die .exe abstürzt

weiß jemand rat? (und ja ich weiß dass brute forcing sehr rechnintensiv ist^^)

lg
Private Nachricht sendenPosting in privater Nachricht zitieren
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic starofftopic star
Nussknacker 2009 - 1. Rang

Beiträge: 8056
Erhaltene Danke: 17
Dabei seit: 16.07.2004
Wohnort: Jahnsdorf

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, L0.9\FPC2.0
BeitragVerfasst: Fr 05.03.10 00:46  Antworten mit Zitat Beitrag melden
Du führst zwar deine Rechenschritte aus, gibst der VCL aber keine Möglichkeit auf Ereignisse von außen zu reagieren. Dadurch sieht es so aus, als ob das Programm hängen würde.

Um dies zu umgehen, musst du in regelmäßigen Abständen Application.ProcessMessages; ausführen. Dann reagiert die Anwendung. Dabei solltest du dann aber beachten, dass du deine Buttons entsprechend disablest, da der Benutzer sonst mehrfach verschachtelt in deine Bruteforce-Routine gelangt.

Bei deiner Lösung mal noch eine Frage: Warum ist bei zweistelligen Passwörtern von 48, bei den anderen aber ab 47?

Ansonsten bei meiner Variante soweit durchgestiegen, oder ausgestiegen? Wenn ja, wo?

P.S.: Mein Nick schreibt sich BenBE ;-)

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Private Nachricht sendenPosting in privater Nachricht zitieren Webseite dieses Mitglieds besuchen
vazrul
Hält's aus hier

(Threadstarter)

Beiträge: 5
Dabei seit: 03.03.2010



BeitragVerfasst: Fr 05.03.10 15:27  Antworten mit Zitat Beitrag melden
erstmal danke für die antwort ;-) Application.ProcessMessages , wo sollte ich dass deiner meinung nach einbaun? Hab des nur programmiert weil ich es noch selber versuchen wollte, hat nichts damit zu tun dass ich bei deiner Musterlösung nicht durchblicke ;)

lg
Private Nachricht sendenPosting in privater Nachricht zitieren
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic starofftopic star
Nussknacker 2009 - 1. Rang

Beiträge: 8056
Erhaltene Danke: 17
Dabei seit: 16.07.2004
Wohnort: Jahnsdorf

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, L0.9\FPC2.0
BeitragVerfasst: Fr 05.03.10 21:40  Antworten mit Zitat Beitrag melden
Application.ProcessMessages musst Du an eine Stelle setzen, die regelmäßig aufgerufen wird. Also z.B. als Teil deiner Button2Click-Event-Prozedur vor der Prüfung des Passwortes.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Private Nachricht sendenPosting in privater Nachricht zitieren Webseite dieses Mitglieds besuchen
Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.


Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.
Beiträge vom vorherigen Thema anzeigen:   
home home