• Halli Hallo,

    Ich hatte in letzer Zeit ein wenig langeweile und zu wenig zu tun. Irgendwie bin ich dann darauf gekommen schon lange nichts mehr mit AutoIT geschrieben zu haben.
    Nach ein par Stunden chatten mit einem kollegen ist mir dann auch endlich eine idee gekommen was ich machen könnte.

    Hide my Stuff
    Funktionsweise:
    Die Dateinamen werden verschlüsselt und mit der endung *.tmp abgespeichert. Praktischerweise können sie auch direkt wieder entschlüsselt werden.
    Die Datei selbst wird nicht verändert, es ist also trotzdem noch möglich die Datei zu öffnen (mit dem richtigen Programm) oder auch wieder um zu benennen.
    Es werden immer ALLE Dateien im Ordner verschlüsselt. Unterordner werden ignoriert!
    Es wird eine 0000test.tmp1 datei angelegt um die verschlüsselung zu testen (und wird nach den entschlüsseln wieder gelöscht)
    Versteckte Dateien werden erkannt und verschlüsselt (bleiben versteckt). Allerdings können versteckte Ordner nicht ausegwählt werden.
    Quick: in einer settings Datei können standard passwort und Pfad festgelegt werden.

    Sinn der Sache:
    Schliesst Dateien aus der Suche nach Dateinamen/typ aus.
    Verhindert das Bilder/Videos via medien index indiziert werden.

    Bugs:
    Bereits verschlüsselte Dateien können ein zweites und drites und viertes mal verschlüsselt werden.
    Es können nur ganze ordner verschlüsselt werden die nicht schon verschlüsselte dateien beinhalten. (Diese werden sonst doppelt verschlüsselt)
    Sollten sich besondere Zeichen im Dateinamen befinden kann die verschlüsselung evtl übersprungen werden.

    To do:
    Irgend eine möglichkeit finden beim encrypt1() die .tmp dateien aus dem array der gefundenen Dateien zu löschen!(Irgendjemand gerade eine Idee wie? _arraybinarysearch und _arraydfindall funktioniert nicht)
    Suchindex überarbeiten das eine Auswahlliste erscheint welche dateien in dem Ordner man verschlüsseln will und welche nicht.
    Evtl den Kopf der Datei löschen und in der Check datei abspeichern, damit die Dateien gar nicht mehr geöffnet werden können. (dies würde aber wohl die Performance beeinträchtigen... ich hab nun 1.5gb (256 dateien) in rund 5 sekunden verschlüsselt.)

    Spoiler anzeigen

    Quellcode:

    autoit.de/wcf/attachment/19132/

    [autoit]


    #include <Array.au3>
    #Include <File.au3>
    #include <String.au3>
    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #NoTrayIcon
    Global $dateipfad, $code

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    #Region ### START Koda GUI section ### Form=
    $Form2 = GUICreate("Hide my Stuff", 256, 120, -1, -1)
    $code = GUICtrlCreateInput("password", 8, 32, 233, 21, BitOR($ES_PASSWORD,$ES_AUTOHSCROLL))
    $ButtonEncrypt = GUICtrlCreateButton("Encrypt", 86, 64, 75, 25, 0)
    $ButtonDecrypt = GUICtrlCreateButton("Decrypt", 159, 64, 75, 25, 0)
    $EnterPassLabel = GUICtrlCreateLabel("Enter password", 8, 12, 77, 17)
    $ButtonFolder = GUICtrlCreateButton("Folder", 8, 64, 65, 25, 0)
    $Checkbox1 = GUICtrlCreateCheckbox("Quick", 16, 96, 45, 17)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $ButtonEncrypt
    If GUICtrlRead( $Checkbox1) = $GUI_CHECKED Then
    $code = IniRead("settings", "quick", "code", "password")
    $dateipfad = IniRead("settings", "quick", "dateipfad", "")
    EndIf
    encrypt1()
    MsgBox(0, "Done", "Folder: "&$dateipfad&" encrypted")
    Case $ButtonDecrypt
    If GUICtrlRead( $Checkbox1) = $GUI_CHECKED Then
    $code = IniRead("settings", "quick", "code", "password")
    $dateipfad = IniRead("settings", "quick", "dateipfad", "")
    EndIf
    decrypt1()
    MsgBox(0, "Done", "Folder: "&$dateipfad&" decrypted")
    Case $ButtonFolder
    $dateipfad= FileSelectFolder( "Ordner Auswählen", @HomePath, 4)
    EndSwitch
    WEnd

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func encrypt1()
    $nr = 1
    $orinames =_FileListToArrayMultiSelect($dateipfad,"*",",",1)
    _ArrayDisplay ($orinames, "Files to encrypt") ;shows all files in folder, deactivate if you don't like it
    FileWrite($dateipfad&"\0000"&(_StringEncrypt(1, "test", $code)&".tmp1"),"0") ;create password check
    Do
    $oriname = _ArrayToString($orinames, "",$nr, $nr)
    $orinameC = _StringEncrypt( 1, $oriname, $code)
    ;~ MsgBox(0, "", $oriname&@CRLF&$orinameC&".tmp")
    FileMove($dateipfad&"\"&$oriname, $dateipfad&"\"&$orinameC&".tmp", 1)
    $nr = $nr+1
    Until $nr >= $orinames[0]+1
    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func decrypt1()
    $nr =1
    $orinamesDC =_FileListToArrayMultiSelect($dateipfad,"*.tmp1",",",1) ;check for correct password, start
    $orinameDC = _ArrayToString($orinamesDC, "",1, 1)
    $orinameDCC = StringTrimLeft((StringTrimRight($orinameDC,5)),4)
    ;~ _ArrayDisplay ($orinamesDC)
    If _StringEncrypt( 0, $orinameDCC, $code) <> "test" Then
    MsgBox(0, "Error", "Wrong password")
    Exit
    Else
    FileDelete($dateipfad&"\0000"&$orinamedcc&".tmp1")
    $orinamesDC =_FileListToArrayMultiSelect($dateipfad,"*.tmp",",",1) ;end of password check
    ;~ _ArrayDisplay ($orinamesDC)
    EndIf
    Do
    $orinameDC = _ArrayToString($orinamesDC, "",$nr, $nr)
    $orinameDCC= StringRegExpReplace( $orinameDC, ".tmp", "")
    $orinameD = _StringEncrypt( 0, $orinameDCC, $code)
    ;~ MsgBox(0, "", $orinameDC&@CRLF&$orinameD)
    FileMove( $dateipfad&"\"&$orinameDC, $dateipfad&"\"&$orinameD, 1)
    $nr = $nr+1
    Until $nr >= $orinamesDC[0]+1
    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _FileListToArrayMultiSelect($dir,$searchlist,$Separator,$iFlag = 0)
    Local $FileList[1] = [0], $Filelist1, $iN, $Num, $search
    $search = StringSplit($searchlist, $Separator)
    If $search[0] > 0 Then
    For $iN = 1 To $search[0]
    $Filelist1 = _FileListToArray($dir, $search[$iN], $iFlag)
    If Not @error Then
    $Num = UBound($FileList)
    _ArrayConcatenate($FileList, $Filelist1)
    $FileList[0] = $FileList[0] + $FileList[$Num]
    _ArrayDelete($FileList, $Num)
    EndIf
    Next
    EndIf
    Return $FileList
    EndFunc

    [/autoit]

    Jegliche Rückmeldungen sind willkommen!


    mfg

    Haldi

  • Naja, das es dies macht ob ich will oder nich sehe ich es als Bug an!
    Wenn ich es hinbekomme dies mit einer Checkbox freiwillig zu machen dann kann man es als Feature betrachten.

  • Quick: in einer settings Datei können standard passwort und Pfad festgelegt werden.


    Und wie kommt mein Passwort und der Pfad in die INI? Ich konnte im Source kein einziges IniWrite entdecken.

    Unter Dateien verschlüsseln verstehe ich etwas mehr als nur den Dateinamen zu verschlüsseln.

    mfg autoBert

  • peethebee
    No Risk no Fun. Nein Scherz, hast du eine andere Idee was man verwenden könnte ? *.tmp sind die Einzigen dateien die mir in den Sinn gekommen sind die nicht auffällig sind wenn sie en mass vorkommen, und auch etwas grösser sind. Ausser .zip oder .rar archiven ! Aber kann man ein .rar beim ersten versuch nicht öffnen ist es defekt und wird gelöscht!
    Evtl wäre es möglich mit Admin rights die Datei schreibgeschützt zu machen ?

    autoBert
    Natürlich steht das da nirgens! Das ist auch ein riesen "Sicherheitsfehler" soetwas überhaupt einzubauen.... Ich habs nur der Faulheit halber drin gelassen. Wer will kann sich die settings.ini selbst erstellen und mit ihr arbeiten.
    IniRead("settings", "quick", "dateipfad", "") Zeigt ja an wie die Datei ausgelesen wird,
    [quick]
    code=1234
    dateipfad=C:\Testfolder

    Und die Dateien werden ja nicht Verschlüsselt, darum heisst das Skript auch "Hide my Stuff" und nicht "Encrypt" Genau das ist ja der sinn dahinter. Das Dateien nicht verändert werden, die prodezur in sekundenschnelle vorbei ist. (wobei ich zugeben muss das ich keine Ahnung habe wie lange es dauert eine Datei zu verschlüsseln.... mindestens solange wie es dauern würde sie zu kopieren oder?)