TrueCrypt Laufwerke einbinden

  • Hiho,

    also ich arbeite viel mit TC, da ich fast alles damit verschlüsselt habe.
    mein vorhaben ist nun das:

    ich habe mehrere externe hdds, die alle komplett mit TC verschlüsselt sind.
    ich möchte nun, dass jede platte einen festen laufwerksbuchstaben hat, sofern ich die hdd anschließe.
    das ganze soll natürlich mit so wenig aufwand wie möglich verbunden sein.

    ich habe zZ batch dateien, mit denen ich jeweils eine hdd mounten und dismounten kann. das ganze funzt aber leider nur bei 1 platte, da danach \Device\HarddiskX jeweils weitergezählt wird.

    jetzt habe ich mir überlegt, gibt es 2 möglichkeiten, wie ich das mit autoit lösen könnten.

    die einfach variante wäre, man kann direkt von der platte, die gerade angeschlossen wird, auslesen, welche "harddisk" es ist (output ist also \Device\Harddisk4\Partition1 als bsp). ist das möglich? mit den standardfunktionen anscheinend nicht.

    2.te möglichkeit wäre, ich würde im programm selber mitzählen. das blöde ist nur, beim dismounten einer bestimmten platte, müsste natürlich wieder zurück gezählt werden. hier bin ich mir noch nicht sicher, ob TC die HarddiskX evtl selber zurückzählt (sonst wäre das prob, HDD4 + HDD5 sind dran, 4 wird entfernt, 5 ist noch dran, die neue platte müsste nun also als 4 eingebunden werden).

    es sei denn, ihr habt andere vorschläge?

    • Offizieller Beitrag

    DriveGetSerial() ist an sich eine gute Idee, erfordert aber ein Script, was ständig im Hintergrund läuft. Wenn das sowieso der Fall ist, gut, ansonsten gäbe es noch die Möglichkeit mit USBDLM den jeweiligen Festplatten einen festen Buchstaben zuzuordnen und bei Anschluss ein Script zu starten. USBDLM ist auch sonst ein super Programm. Möchte das nicht mehr missen. [Werbung mach...] :)

  • also die plattenerkennung ist nicht das problem, das wollte ich eigentlich über DriveGetLabel machen (um dann zu wissen, welchen Laufwerkbuchstaben die gemountete platte bekommen soll).
    ob das tool die ganze zeit läuft, weiß ich noch nicht, wäre aber ansich kein prob.

    wie gesagt, das hauptprob ist das automatische einbinden mitTC über das script, da TC ja die platten nur mit diese bestimmten bezeichnung einbindet (\Device\HarddiskX\Partition1), soweit ich das sehe, autoit das aber nicht ohne weiteres auslesen kann.

    eine eigene zählroutine wäre die alternative, aber die fehleranfälligkeit scheint mir, könnte zu hoch sein ...

    USBLM macht in meinen augen keinen sinn, da es auch spätestens bei dem script zum einbinden über tc scheitern wird.

    • Offizieller Beitrag

    Versuchs mal hiermit:

    Spoiler anzeigen
    [autoit]


    #include <String.au3>
    #include <Array.au3>
    Dim $Output[1][2]
    _LogicalDiskToPartition()
    _ArrayDisplay($Output)

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


    Func _LogicalDiskToPartition()
    $wbemFlagReturnImmediately = 0x10
    $wbemFlagForwardOnly = 0x20
    $colItems = ""
    $strComputer = "localhost"
    $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
    $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_LogicalDiskToPartition", "WQL", _
    $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
    $i = 0
    If IsObj($colItems) then
    For $objItem In $colItems
    $aStr = _StringBetween($objItem.Antecedent, 'Disk #', '"')
    $Output[$i][0] = '\Device\Harddisk' & $aStr[0]
    $Output[$i][0] = StringReplace($Output[$i][0], ', Partition #', '\Partition')
    $Output[$i][0] = StringLeft($Output[$i][0], StringLen($Output[$i][0])-1) & (Number(StringRight($Output[$i][0],1))+1)
    $aStr = _StringBetween($objItem.Dependent, 'DeviceID="', '"')
    $Output[$i][1] = $aStr[0]
    $i += 1
    ReDim $Output[$i+1][2]
    Next
    Else
    Msgbox(0,"WMI Output","No WMI Objects Found for class: " & "Win32_LogicalDiskToPartition" )
    Endif
    EndFunc

    [/autoit]

    Das Array 'Output' enthält dann die Laufwerksbuchstaben sowie den dazugehörigen Datenträger (wie bei TrueCrypt).

  • Hallo sc4ry,

    bei meiner Arbeit an „The Stick“ (Scripte>The Stick) habe ich mich auch um eine Lösung für diesen Fall bemüht.
    Ein Autostart für jeden Stick an jedem PC. ;):rolleyes:^^
    Denn man kann ja nicht überall gleich sein Werkzeug auspacken oder Programme installieren.

    Voraussetzung:
    TC sollte auf jeder externen HDD vorhanden sein.
    Meine spezielle Autorun.inf

    Spoiler anzeigen
    [autoit]


    [autorun]
    label=Dein_Ritzelrocker04
    ICON=System\images3.ico
    open=PStart.exe
    action=PStart.exe
    UseAutoPlay=1

    [/autoit]


    Weiterhin viel Erfolg !

    • Offizieller Beitrag

    Weil es mich interessiert hat, habe ich mich mal rangesetzt und versucht so ein Script zu schreiben, aber es ist etwas komplizierter als ich dachte, weil ein verschlüsseltes (noch nicht gemountetes) TC-Laufwerk von Windows nicht als Datenträger erkannt wird und somit auch keine Seriennummer bekommt, die man mit DriveGetSerial() auslesen könnte. Man könnte die Funktion von Bugfix " _GetMountedUSB_Drives()" etwas abgeändert einsetzen, aber die erkennt externe Festplatten nur, wenn sie als Wechseldatenträger eingebunden werden.
    Ich bin jetzt noch ein wenig am experimentieren. Mal sehen, ob ich es hinkriege...

  • also bei mir wird (habe jetzt Vista, meine aber vorher bei XP war es genauso), die komplett verschlüsselte Platte unter Arbeitsplatz angezeigt.
    Jedoch als RAW und Windows würde es gerne, sofern man darauf zugreift, immer formatieren. d.h. die platte hat einen laufwerksbuchstaben und ein label (ob nicht formatierte platten nun eine serial haben, weiß ich grad nicht, label ist auf jeden fall immer identisch).

    ich würde dann anhand des labels wissen, welche platte es ist und diese dann mounten lassen (ist ja ähnlich wie mit serial, hauptsache eine eindeutige zuordnung).

    hab leider mein script noch nicht viel weiter bearbeiten können (ziehe grade um), ansonsten hät ich es schonmal eingestellt.

    • Offizieller Beitrag

    Äh? Wie geht das denn? Ein Label für ein "unformatiertes" Laufwerk?

    Ich habe meinen USB-Stick mit TrueCrypt komplett als Laufwerk verschlüsseln lassen und wenn der nur eingesteckt ist, also noch nicht mit TrueCrypt gemountet, dann hat der kein Label und ich kann das auch nicht ändern. Laufwerksbuchstabe ja, aber kein Label und keine Seriennummer.

    • Offizieller Beitrag

    Oh Mann! Manchmal ist die Lösung sooo einfach...

    Man braucht gar kein AutoIt-Script. Die ursprüngliche Idee mit USBDLM war schon richtig. Ich hätte mir nur die Kommandozeilen-Parameter von TrueCrypt mal durchlesen sollen. Einfach "/l" weglassen und es wird der nächste freie Buchstabe genommen.

    Die Lösung: Einfach diese Zeilen in die "USBDLM.ini" einfügen:

    Dann wird beim einstecken eines TrueCrypt-Laufwerks nach dem Password gefragt und das Laufwerk wird mit dem nächsten freien Buchstaben gemountet. Funktioniert auch mit mehreren Laufwerken.

  • genau das will ich ja eben nicht *g*

    Zitat

    ich habe mehrere externe hdds, die alle komplett mit TC verschlüsselt sind.
    ich möchte nun, dass jede platte einen festen laufwerksbuchstaben hat, sofern ich die hdd anschließe.

    noch einfach ist, /automount devices zu nehmen, dann werden alle HDDs nacheinander eingebunden. so habe ich es zZ, nur
    sind dann die platten immer mit anderen laufwerksbuchstaben versehen ;)

  • Hy Oscar, ich hab mich mal ein wenig mit COM-Objekten beschäftigt und hab da was nettes gemacht.

    Man sollte damit eine Festplatte anhand seiner einmaligen Signatur erkennen können.

    Spoiler anzeigen
    [autoit]


    #include <String.au3>
    #include <Array.au3>
    Dim $Output[1][3]
    _SignatureToHarddisk()
    _ArrayDisplay($Output)

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

    Func _SignatureToHarddisk()
    ;$output[1]=Harddisknumber $output[2]=Harddiskmodel $output[3]=HarddiskSignature
    $wbemFlagReturnImmediately = 0x10
    $wbemFlagForwardOnly = 0x20
    $colItems = ""
    $strComputer = "localhost"
    $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
    $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_DiskDrive", "WQL", _
    $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
    $i = 0
    If IsObj($colItems) then
    For $objItem In $colItems
    $Output[$i][0] = StringRight($objItem.DeviceID,1)
    $Output[$i][1] = $objItem.Model
    $Output[$i][2] = $objItem.Signature
    $i += 1
    ReDim $Output[$i+1][3]
    Next
    Else
    Msgbox(0,"WMI Output","No WMI Objects Found for class: " & "Win32_LogicalDiskToPartition" )
    Endif
    EndFunc

    [/autoit]

    Soweit ich bisher rausgefunden hab ist die Signatur einer Festplatte festgelegt!

    Ich weiss jedoch noch nicht wann oder ob Sie sich ändert. (prtitionieren, Partitions grössen verändern, mbr-ändern...)

    2 Mal editiert, zuletzt von Merlink (20. November 2008 um 08:49)