[B] File Shredder Modul Verfasst am: 19.06.2009, 19:00
Hi Leute
Hab mir gedacht ich sollte euch mal wieder nen source schreiben den ihr vielleicht gebrauchen könnt.
Name: DestroyFile() Funktion: Überschreibt und löscht Dateien Rückgabe: True oder False
Beschreibung: Das ganze ist ein fertiges Modul. Ihr braucht den Code also nur in ein Modul einfügen und die Function "DestroyFile" aufrufen.
Syntax:
Code:
DestroyFile(Filepath, Loops, Blocksize)
Filepath - Ganz klar wird hier der Pfad zur Datei erwartet.
Loops - Optional. Entspricht den Wiederholungen, muß aber nicht angegeben werden. Default ist 1
Blocksize - Optional. Bestimmt die Größe der Blocks mit der die Datei überschrieben werden. Muß nicht angegeben werden. Default ist 1048576 Bytes. Das ist 1MB.
Zusätzliche Optionen und Informationen Mit "fShredder." könnt ihr Informationen von der Funktion während dem überschreiben zurückerhalten.
fShredder.ActLoop - Gibt zurück bei der wievielten Wiederholung er ist. fShredder.ActPosition - Gibt zurück an welcher Position in der Datei er sich gerade befindet. fShredder.bStop - Kann auf True gesetzt werden um das ganze abzubrechen.
Wichtiges über die Function 1. Es wird überprüft ob es sich wirklich um eine Datei handelt und ob sie existiert. 2. Die Attribute der Datei werden auf normal gesetzt. (Versteckte oder Geschützte Dateien würden sonst Probleme machen) 3. Randomize wird mit der Api Gettickcount (Wie lange Windows schon läuft) initialisiert. 4. Die Datei wird in Blöcken überschrieben. Normal 1MB Blöcke. Diese Blöcke bestehen aus einem Random erzeugten Zeichen. 5. Blockgröße ist einstellbar. 6. Wiederholungen sind einstellbar 7. Function übergibt Infos an Variablen um z.B. eine Progressbar zu füttern oder die aktuelle Geschwindigkeit anzeigen zu können. 8. Datei wird per Api gelöscht. 9. DoEvents wird nur alle 10 Aufrufe ausgeführt, bzw. falls ein Tastatur oder Maus Event ansteht.
'Apis Private Declare Function GetInputState Lib "user32" () As Long Private Declare Function GetTickCount Lib "kernel32" () As Long Private Declare Function DeleteFile Lib "kernel32.dll" Alias "DeleteFileA" (ByVal lpFileName As String) As Long
'Deklarationen Private Type tOptions ActLoop As Long 'Gibt die aktuelle Wiederholung zurück ActPosition As Long 'Gibt die aktuelle Position zurück. Gut für Progressbars etc. Stop As Boolean 'Boolean Variable um den Vorgang evt. abzubrechen End Type
Public fShredder As tOptions
Public Function DestroyFile(ByVal sFilepath As String, Optional ByVal iLoops As Integer = 1, Optional ByVal iBlocksize As Long = 1048576) As Boolean On Error GoTo Err:
'Deklarationen Dim ff As Integer Dim sBuffer As String Dim i As Long, iFilesize As Long, iByteCount As Long Dim nBlocksize As Long
'Überprüfen ob es eine Datei ist und existiert If IsFile(sFilepath) And Not fShredder.Stop Then
'Attribute der Datei ändern Call SetAttr(sFilepath, vbNormal)
'Datei Binär öffnen ff = FreeFile Open sFilepath For Binary As #ff
'Dateigröße ermitteln iFilesize = LOF(ff)
'iBlocksize berechnen If iFilesize < iBlocksize Then iBlocksize = iFilesize
'Randomize initialisieren mit der Zeit wie lange Windows schon läuft Call Randomize(GetTickCount)
'Schleife für iLoops For i = 1 To iLoops
fShredder.ActLoop = i iByteCount = 0 nBlocksize = iBlocksize
'Schleife zum überschreiben der Datei Do Until iByteCount >= iFilesize Or fShredder.Stop
'Block in Datei schreiben Put #ff, (iByteCount + 1), sBuffer
'Aktuelle Position neu berechnen iByteCount = (iByteCount + nBlocksize) fShredder.ActPosition = iByteCount
'Überprüfen ob weniger Bytes übrig sind als Blocksize groß ist If (iFilesize - iByteCount) < nBlocksize Then nBlocksize = (iFilesize - iByteCount)
MyDoEvents Loop Next i
'Datei schließen Close #ff
DoEvents
'Datei löschen If Not fShredder.Stop Then If DeleteFile(sFilepath) = 0 Then GoTo Err: End If Else GoTo Err: End If
'Falls Stop gedrückt wurde zu Err: springen If fShredder.Stop Then GoTo Err:
'Kein Error DestroyFile = True
Exit Function Err: Close #ff DestroyFile = False End Function
Public Function IsFile(sFilepath As String) As Boolean On Error Resume Next IsFile = (GetAttr(sFilepath) And 24) = 0 End Function
Public Sub MyDoEvents() Static xCount As Integer If GetInputState() Then DoEvents ElseIf xCount = 10 Then DoEvents xCount = 0 Else xCount = xCount + 1 End If End Sub [/code]Über Credits würde ich mich freuen wenn ihr jetzt vielleicht Lust und Laune habt einen Fileshredder bzw. irgendein Security tool damit zu machen