niklaskar
Goto Top

Zeit zum finden eines Passwortes messen (SCHULPROJEKT!)

Hallo,

ich bin gerade für ein Schulprojekt dabei, ein Programm zu programmieren um Aussagen über die Sicherheit eines Passwortes zu treffen. Das Ziel des Projektes ist es, das Internet ein wenig sicherer zu machen, indem den Leuten anhand von erschreckenden Werten aufgezeigt wird wie grob fahrlässig sie handeln, in dem Moment, in dem sie ein kurzes Passwort oder ein Passwort ohne Sonderzeichen wählen um damit ihre Konten abzusichern.
Ich habe das Programm bereits in PHP geschrieben, bis mir die Unzuverlässigkeit von PHP aufgefallen ist.
Nun habe ich mich an Batch-Programmierung gewagt, dieses Projekt zu verwirklichen.
In dem Ablauf werden zwei Programme aufzurufen. Das erste generiert einen md5 Hash, das zweite versucht mittels durchprobieren, das richtige Passwort herauszufinden.
Nun muss ich nur noch die Zeit, die das finden des Passwortes (soweit erfolgreich) in Anspruch genommen hat herausfinden und in eine Textdatei loggen, so dass ich die Daten nachher mit Excel verarbeiten kann.
Dazu habe ich bisher folgenden Code:
@Echo Off
REM zufaelligen String generieren
Setlocal EnableDelayedExpansion
Set _RNDLength=3
Set _Alphanumeric=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789
Set _Str=%_Alphanumeric%987654321
:_LenLoop
IF NOT "%_Str:~18%"=="" SET _Str=%_Str:~9%& SET /A _Len+=9& GOTO :_LenLoop  
SET _tmp=%_Str:~9,1%
SET /A _Len=_Len+_tmp
Set _count=0
SET _RndAlphaNum=
:_loop
Set /a _count+=1
SET _RND=%Random%
Set /A _RND=_RND%%%_Len%
SET _RndAlphaNum=!_RndAlphaNum!!_Alphanumeric:~%_RND%,1!
If !_count! lss %_RNDLength% goto _loop
REM String in Datei schreiben
echo.>%temp%\tmp
set/p=%_RndAlphaNum%<%temp%\tmp>md5.txt
del %temp%\tmp
REM md5 Hash der Datei bilden
for /f "tokens=*" %%i in ('md5 md5.txt') do set password=%%i  
REM datei löschen
del md5.txt
REM Ursprungs String herausfinden
finder.exe --hash %password%
Die Ausgabe der finder.exe ist dabei folgendermaßen:
System / Thread #0: Collision found: 2hf
Info   / Thread #0: Candidate/Hash pairs tested: 12 176 ( 1.22e+004 ) in 3ms
Info   / Thread #0: Allocated key space: 2.42e+028 candidates, 0.00% done
Warning/ Average speed removed (not enough session time, need 500ms)
Hat einer von euch eine Idee, wie ich die benötigte Zeit, den String, den Hash und die Anzahl der probierten Hashes so in eine Datei exportiere, dass ich diese dann gesammelt in Excel einlesen kann?

Vielen Dank schonmal!!!

Gruß Niklas

Content-Key: 216001

Url: https://administrator.de/contentid/216001

Printed on: April 18, 2024 at 06:04 o'clock

Member: Endoro
Endoro Sep 03, 2013 at 20:40:12 (UTC)
Goto Top
Hi,
ich würde die in Zeilen uns Spalten mit Komma, Tab oder sonstwie getrennt ausgeben.
Du kannst auch feste Spaltenbreiten nehmen, Excel importiert das auch.
lg.
Member: niklaskar
niklaskar Sep 03, 2013 at 21:06:38 (UTC)
Goto Top
Zitat von @Endoro:
Hi,
ich würde die in Zeilen uns Spalten mit Komma, Tab oder sonstwie getrennt ausgeben.
Du kannst auch feste Spaltenbreiten nehmen, Excel importiert das auch.
lg.

Aber wie lese ich erst mal Zeit, Passwort, Hash, Anzahl Hashes aus?
Exportieren tue ich das ganze doch am besten mit einer Art Separator getrennt und dann am Ende der Zeile nochmal einen, oder?
z.B. so?
67000,passwort1,6e6fdf956d04289354dcf1619e28fe77,2345323;
634823,geheimespw,253d0ba904f79d7a6ed7fc20cd5849d6,8848484884;
Member: Endoro
Endoro Sep 04, 2013 at 17:22:09 (UTC)
Goto Top
Hi,
in deiner Ausgabe von finder sind die entsprechenden Daten nicht drin.

Als Feldtrenner kannst du Kommas nehmen, wenn die im Passwort nicht vorkommen.
Am Zeilenende ist nichts weiter erforderlich, da seht schon (unsichtbar) 0Dh0Ah.
lg.
Member: niklaskar
niklaskar Sep 04, 2013 at 20:24:42 (UTC)
Goto Top
Hi,

Hash ist schon als variable gespeichert, %_RndAlphaNum%
System / Thread #0: Collision found: 2hf
Dieser Teil beherbergt das Passwort, und zwar der String, nach "Collision found". In diesem Falle ist das Passwort "2hf".
Die Anzahl der Hashes die probiert wurden, sowie die Zeit sind auch zu sehen.
Info   / Thread #0: Candidate/Hash pairs tested: 12 176 ( 1.22e+004 ) in 3ms
In diesem Falle wurden 12 176 Hashes probiert und dies in einer Zeit von 3ms.

Hast du eine Idee, wie ich diese Werte in Variablen speichern kann?

Gruß Niklas
Member: Endoro
Endoro Sep 04, 2013 at 21:05:22 (UTC)
Goto Top
Hi,
das ist klar soweit.
Was soll mit den 'Fehlern' (kein PW gefunden) passieren und wie wird der Fehler bemerkt ?
  1. errorlevel
  2. Ausgabe von finder.exe
lg.
Member: niklaskar
niklaskar Sep 05, 2013 at 05:19:05 (UTC)
Goto Top
Hi,

diese Fehler sollten nicht auftreten, da ich ja immer die richtige Stringlänge vorgebe und bei der Methode, jeden möglichen String auszuprobieren, der richtige einfach rauskommen muss ;)
Es geht ja nicht um "richtig unbekannte" Passwörter, diese werden ja vorher per Zufall mit einer bestimmten Länge erzeugt.
Deswegen denke ich, kann man diesen Fall vernachlässigen um das Programm so einfach wie möglich zu halten.

lg
Member: Endoro
Endoro Sep 05, 2013 updated at 06:38:02 (UTC)
Goto Top
Hi,
der Code geht davon aus, dass finder.exe seine Ausgabe auf STDOUT (den Bildschirm) macht.
Er wird mit Sonderzeichen wie %!*=~"^ möglicherweise nicht oder nicht richtig funktionieren.
@ECHO OFF &SETLOCAL ENABLEDELAYEDEXPANSION
SET "pat1=Collision found: "  
SET "pat2=pairs tested: "  
FOR /f "delims=" %%a IN ('finder.exe --hash %password% ^| findstr /c:"%pat1%" /c:"%pat2%"') DO (  
	SET "line=%%a"  
	IF "!line:%pat1%=!" neq "!line!" (  
		SET "password=!line:*%pat1%=!"  
	) ELSE (
		SET "endline=!line:*%pat1%=!"  
		FOR /f "tokens=3delims=:(" %%b IN ("!endline!") DO SET "numhashes=%%b"  
		SET "numhashes=!numhashes: =!"  
		FOR %%b IN (!endline!) DO SET "hashtime=%%b"  
		SET "hashtime=!hashtime:~0,-2!"  
	)
)
ECHO %hashtime%,%password%,%_RndAlphaNum%,%numhashes%
Wobei ich jetzt nicht genau weiss, warum das Passwort noch mal eingelesen werden muss ...
lg.
Member: niklaskar
niklaskar Sep 09, 2013 at 09:19:24 (UTC)
Goto Top
Stimmt, da hast du Recht, das Passwort ist ja eigentlich bekannt.
Dein Codeschnipsel produziert anscheinend eine Endlosschleife. Wenn man das @echo off wegkommentiert, zeigt dich, dass das Bash Script bei ich glaube Linie 14 stehen bleibt.
Linie 16 wird auf jeden fall nicht mehr ausgegeben.
Member: Endoro
Endoro Sep 09, 2013 updated at 20:41:22 (UTC)
Goto Top
Hi,
ich hab es hier mit dem von dir geposteten Output von finder getestet.
Wenn der nicht stimmt, geht gar nix.
Du könntest den nochmal checken und ein weiteres Beispiel hier reinschreiben.
Ggf muss eine robustere Lösung her.
lg.

PS: ich hab mal was robusteres aufgeschrieben:
@ECHO OFF &SETLOCAL
SET "pat=pairs tested: "  
FOR /f "tokens=3,5delims=():" %%a IN ('finder.exe --hash %password% ^| findstr /c:"%pat%"') DO (  
	SET "numhashes=%%a"  
	SET "hashtime=%%b"  
)
SET "numhashes=%numhashes: =%"  
SET "hashtime=%hashtime:~4,-2%"  
ECHO %hashtime%,%password%,%_RndAlphaNum%,%numhashes%
Member: Endoro
Endoro Sep 10, 2013 at 17:51:17 (UTC)
Goto Top
Okey, ich habs noch mal überarbeitet, Falls es immer noch nicht geht, muss ich den Output mit "finder.exe" prüfen.
@ECHO OFF &SETLOCAL
SET "pat=pairs tested: "  
FOR /f "tokens=3,5delims=():" %%a IN ('finder.exe --hash %password% ^| findstr /c:"%pat%"') DO (  
	SET "numhashes=%%a"  
	SET "hashtime=%%b"  
)
SET "numhashes=%numhashes: =%"  
FOR /F "delims=inms " %%a in ("%hashtime%") do SET "hashtime=%%a"  
ECHO %hashtime%,%password%,%_RndAlphaNum%,%numhashes%
lg.
Member: niklaskar
niklaskar Sep 12, 2013 at 16:18:22 (UTC)
Goto Top
Super, funktioniert wie ne eins ! face-smile
Genau das brauchte ich face-smile
Danke dir

Lg Niklas
Member: niklaskar
niklaskar Sep 13, 2013 at 05:31:33 (UTC)
Goto Top
Habe nun gerade ein längeres Passwort (5 Stellen) probiert. Dort dauert die Entschlüsselung länger als 999ms und dadurch hat sich so ein bisschen die Ausgabe geändert, das Programm gibt jetzt xs yms aus.
Info   / Thread #0: Candidate/Hash pairs tested: 54 132 066 ( 5.41e+007 ) in 4s
988ms
Info   / Thread #0: Allocated key space: 2.42e+028 candidates, 0.00% done
Info   / Thread #0: Average speed: ~ 10 851 082 ( 1.09e+007 ) h/s
Hast du dazu vielleicht noch ne Idee, wie man das in die Variable bringen kann?
Das ganze könnte ja z.B. nach dem Motto abgespeichert werden
12s 765ms => 12.765

Danke dir!
Member: Endoro
Endoro Sep 13, 2013 at 07:57:30 (UTC)
Goto Top
Hi,
ich würde das als Millisekunden speichern und die Formatierung mit Excel später erledigen:
@ECHO OFF &SETLOCAL
SET "pat=pairs tested: "  
FOR /f "tokens=3,5delims=():" %%a IN ('finder.exe --hash %password% ^| findstr /c:"%pat%"') DO (  
	SET "numhashes=%%a"  
	SET "hashtime=%%b"  
)
SET "numhashes=%numhashes: =%"  
SET "hashtime=%hashtime:*in=%"  
FOR /F "tokens=1,2delims=ms " %%a in ("%hashtime%") do SET "hashtime=%%a%%b"  
ECHO %hashtime%,%password%,%_RndAlphaNum%,%numhashes%
Member: niklaskar
niklaskar Sep 16, 2013 at 19:19:49 (UTC)
Goto Top
Hi,

der Codeschnipsel weigert sich zu funktionieren, die Variable %hashtime wird gar nicht mit Werten gefüllt, sondern bleibt leer.
(Ich denke) Deswegen gibt das gesamte Skript nur
*in=,,, =
aus.