Jump to content

TrueCrypt Containers


Recommended Posts

Hey guys,

I'm wondering if there's a way to create Truecrypt containers using an Autoit script? At this point Truecrypt only supports command line creation on Mac and Linux, but not Windows (as some of you will know). Is there a way it can be done? Or am I going to have to wait till Windows supports it

Thanks in advance

Link to comment
Share on other sites

Here's a function to create a TrueCrypt container by automating the GUI, not an UDF (yet), will see if and how I continue the development, but here's what I already got:

Edit:

Prerequisite of course is, that TrueCrypt Format.exe is located here @ScriptDir & '\TrueCrypt\TrueCrypt Format.exe"'... I copied TrueCypt to the scriptdir to have it easily accessible... otherwise change that file-location respectively :).

#include <winapi.au3>
#include <Constants.au3>

AutoItSetOption("WinDetectHiddenText", 1)
Opt("WinTitleMatchMode", 3)

Global $PID_TC_Format = 0

ConsoleWrite("_TC_Container_Create("") returned " & _TC_Container_Create("") & @TAB & @error & @crlf)

Func _TC_Container_Create($TC_Container_Location, $TC_Container_Encryption = "AES", $TC_Container_Hash = "RIPEMD-160", $TC_Container_Size_KB = 10000, $TC_Container_Password = "test", $TC_Container_Filesystem = "NTFS")

    Local $b_TC_Volume_Creation_Wizard_failed = False, $hWnd_TC_Volume_Creation_Wizard = 0, $TC_Volume_Creation_Wizard_Error_Code = 0

    ; NTFS min Size = 2829 KB
    ; FAT min Size = 275 KB
    ; ControlSetText() if it's just text you're sending. It's much faster.

    If Not $TC_Container_Location Then $TC_Container_Location = @ScriptDir & "\Test.tc"
    If $TC_Container_Size_KB < 275 Then $TC_Container_Size_KB = 275
    If $TC_Container_Size_KB < 2829 Then $TC_Container_Filesystem = "FAT"

    If FileExists($TC_Container_Location) Then
        If MsgBox(262420, "TCMyFiles", "The Target File" & @CRLF & @CRLF & $TC_Container_Location & @CRLF & @CRLF & "already exists. Do you want to overwrite the file?") <> 6 Then
            SetError(99)
            Return 0
        EndIf
        FileDelete($TC_Container_Location)
    Else
        $TC_Check_Location = FileOpen($TC_Container_Location,10)
        if $TC_Check_Location <> -1 then
            FileClose($TC_Check_Location)
            FileDelete($TC_Container_Location)
        Else
            SetError(96)
            Return 0
        endif
    EndIf
    
    $PID_TC_Format = Run('"' & @ScriptDir & '\TrueCrypt\TrueCrypt Format.exe"', @ScriptDir, @SW_HIDE)
    ;$PID_TC_Format = Run('"' & @ScriptDir & '\TrueCrypt\TrueCrypt Format.exe"', @ScriptDir, @SW_SHOW)

    ProcessWait($PID_TC_Format, 5)

    If $PID_TC_Format = 0 Then
        MsgBox(0, 'Error', '"TrueCrypt Format.exe" new PID could not be detected.')
        SetError(98)
        Return 0
    Else
        If WinWait("[TITLE:TrueCrypt Volume Creation Wizard; CLASS:CustomDlg]", "", 10) = 0 Then
            MsgBox(0, 'Error', '"TrueCrypt Volume Creation Wizard" window not found...')
            SetError(97)
            Return 0
        Else

            $hWnds = WinList("[TITLE:TrueCrypt Volume Creation Wizard; CLASS:CustomDlg]", "")

            For $i = 0 To UBound($hWnds) - 1
                If WinGetProcess($hWnds[$i][1]) = $PID_TC_Format Then $hWnd_TC_Volume_Creation_Wizard = $hWnds[$i][1]
            Next

            If $hWnd_TC_Volume_Creation_Wizard <> 0 Then
                ConsoleWrite('Step 01: Found TrueCrypt Volume Creation Wizard hWnd: ' & $hWnd_TC_Volume_Creation_Wizard & @CRLF)
                $TC_Volume_Creation_Wizard_Error_Code = 1
            Else
                $b_TC_Volume_Creation_Wizard_failed = True
            EndIf

            If $b_TC_Volume_Creation_Wizard_failed = False Then
                $TC_Timer = TimerInit()
                While TimerDiff($TC_Timer) < 5000
                    If StringInStr(WinGetText($hWnd_TC_Volume_Creation_Wizard), "Encrypt the system partition or entire system drive") Then
                        ControlClick($hWnd_TC_Volume_Creation_Wizard, '', '[CLASS:Button; INSTANCE:3]')
                        ConsoleWrite('Step 02: Create File Container' & @CRLF)
                        $TC_Volume_Creation_Wizard_Error_Code = 2
                        ExitLoop
                    Else
                        $b_TC_Volume_Creation_Wizard_failed = True
                    EndIf
                WEnd
            EndIf

            If $b_TC_Volume_Creation_Wizard_failed = False Then
                $TC_Timer = TimerInit()
                While TimerDiff($TC_Timer) < 5000
                    If StringInStr(WinGetText($hWnd_TC_Volume_Creation_Wizard), "Volume Type") Then
                        ControlClick($hWnd_TC_Volume_Creation_Wizard, '', '[CLASS:Button; INSTANCE:3]')
                        ConsoleWrite('Step 03: Select Standard Type' & @CRLF)
                        $TC_Volume_Creation_Wizard_Error_Code = 3
                        ExitLoop
                    Else
                        $b_TC_Volume_Creation_Wizard_failed = True
                    EndIf
                WEnd
            EndIf

            If $b_TC_Volume_Creation_Wizard_failed = False Then
                $TC_Timer = TimerInit()
                While TimerDiff($TC_Timer) < 5000
                    If StringInStr(WinGetText($hWnd_TC_Volume_Creation_Wizard), "Volume Location") Then
                        ControlSetText($hWnd_TC_Volume_Creation_Wizard, '', '[CLASS:Edit; INSTANCE:1]', $TC_Container_Location, 1)
                        If ControlGetText($hWnd_TC_Volume_Creation_Wizard, '', '[CLASS:Edit; INSTANCE:1]') = $TC_Container_Location Then
                            ControlClick($hWnd_TC_Volume_Creation_Wizard, '', '[CLASS:Button; INSTANCE:3]')
                            ConsoleWrite('Step 04: Set Container location to ' & $TC_Container_Location & @CRLF)
                            $TC_Volume_Creation_Wizard_Error_Code = 4
                            ExitLoop
                        EndIf
                    Else
                        $b_TC_Volume_Creation_Wizard_failed = True
                    EndIf
                WEnd
            EndIf

            If $b_TC_Volume_Creation_Wizard_failed = False Then
                $TC_Timer = TimerInit()
                While TimerDiff($TC_Timer) < 5000
                    If StringInStr(WinGetText($hWnd_TC_Volume_Creation_Wizard), "Encryption Options") Then
                        ControlCommand($hWnd_TC_Volume_Creation_Wizard, "", "[CLASS:ComboBox; INSTANCE:1]", "SelectString", $TC_Container_Encryption)
                        If ControlCommand($hWnd_TC_Volume_Creation_Wizard, "", "[CLASS:ComboBox; INSTANCE:1]", "GetCurrentSelection", "") = $TC_Container_Encryption Then
                            ControlClick($hWnd_TC_Volume_Creation_Wizard, '', '[CLASS:Button; INSTANCE:3]')
                            ConsoleWrite('Step 05: Set Encryption Algorithm to ' & $TC_Container_Encryption & @CRLF)
                            $TC_Volume_Creation_Wizard_Error_Code = 5
                            ExitLoop
                        EndIf
                    Else
                        $b_TC_Volume_Creation_Wizard_failed = True
                    EndIf
                WEnd
            EndIf

            If $b_TC_Volume_Creation_Wizard_failed = False Then
                $TC_Timer = TimerInit()
                While TimerDiff($TC_Timer) < 5000
                    If StringInStr(WinGetText($hWnd_TC_Volume_Creation_Wizard), "Volume Size") Then
                        If _WinAPI_GetWindowLong(ControlGetHandle($hWnd_TC_Volume_Creation_Wizard, '', '[CLASS:Button; INSTANCE:6]'), $GWL_STYLE) <> 1342373897 Then
                            ControlClick($hWnd_TC_Volume_Creation_Wizard, "", ControlGetHandle($hWnd_TC_Volume_Creation_Wizard, '', '[CLASS:Button; INSTANCE:6]'))
                        ElseIf _WinAPI_GetWindowLong(ControlGetHandle($hWnd_TC_Volume_Creation_Wizard, '', '[CLASS:Button; INSTANCE:6]'), $GWL_STYLE) = 1342373897 Then
                            ConsoleWrite('Step 06: Select KB as Container Size' & @CRLF)
                            $TC_Volume_Creation_Wizard_Error_Code = 6
                            ExitLoop
                        EndIf
                    Else
                        $b_TC_Volume_Creation_Wizard_failed = True
                    EndIf
                WEnd
            EndIf

            If $b_TC_Volume_Creation_Wizard_failed = False Then
                $TC_Timer = TimerInit()
                While TimerDiff($TC_Timer) < 5000
                    If StringInStr(WinGetText($hWnd_TC_Volume_Creation_Wizard), "Volume Size") Then
                        ControlSetText($hWnd_TC_Volume_Creation_Wizard, '', '[CLASS:Edit; INSTANCE:1]', $TC_Container_Size_KB, 1)
                        If ControlGetText($hWnd_TC_Volume_Creation_Wizard, '', '[CLASS:Edit; INSTANCE:1]') = $TC_Container_Size_KB Then
                            ControlClick($hWnd_TC_Volume_Creation_Wizard, '', '[CLASS:Button; INSTANCE:3]')
                            ConsoleWrite('Step 07: Set Container Size to ' & $TC_Container_Size_KB & ' KB' & @CRLF)
                            $TC_Volume_Creation_Wizard_Error_Code = 7
                            ExitLoop
                        EndIf
                    Else
                        $b_TC_Volume_Creation_Wizard_failed = True
                    EndIf
                WEnd
            EndIf

            If $b_TC_Volume_Creation_Wizard_failed = False Then
                $TC_Timer = TimerInit()
                While TimerDiff($TC_Timer) < 5000
                    If StringInStr(WinGetText($hWnd_TC_Volume_Creation_Wizard), "Volume Password") Then
                        ControlClick($hWnd_TC_Volume_Creation_Wizard, '', '[CLASS:Button; INSTANCE:6]')
                        ControlSetText($hWnd_TC_Volume_Creation_Wizard, '', '[CLASS:Edit; INSTANCE:1]', $TC_Container_Password, 1)
                        If ControlGetText($hWnd_TC_Volume_Creation_Wizard, '', '[CLASS:Edit; INSTANCE:1]') = $TC_Container_Password Then
                            ControlSetText($hWnd_TC_Volume_Creation_Wizard, '', '[CLASS:Edit; INSTANCE:2]', $TC_Container_Password, 1)
                            If ControlGetText($hWnd_TC_Volume_Creation_Wizard, '', '[CLASS:Edit; INSTANCE:2]') = $TC_Container_Password Then
                                ControlClick($hWnd_TC_Volume_Creation_Wizard, '', '[CLASS:Button; INSTANCE:3]')
                                ConsoleWrite('Step 08: Set Container Password to "' & $TC_Container_Password & '"' & @CRLF)
                                $TC_Volume_Creation_Wizard_Error_Code = 8
                                ExitLoop
                            EndIf
                        EndIf
                    Else
                        $b_TC_Volume_Creation_Wizard_failed = True
                    EndIf
                WEnd
                ControlClick("[TITLE:TrueCrypt Volume Creation Wizard; CLASS:#32770]", '', '[CLASS:Button; INSTANCE:1]')
            EndIf

            If $b_TC_Volume_Creation_Wizard_failed = False Then
                $TC_Timer = TimerInit()
                While TimerDiff($TC_Timer) < 5000
                    If WinExists("[TITLE:TrueCrypt Volume Creation Wizard; CLASS:#32770]", "") = 1 Then ControlClick("[TITLE:TrueCrypt Volume Creation Wizard; CLASS:#32770]", '', '[CLASS:Button; INSTANCE:1]')
                    If StringInStr(WinGetText($hWnd_TC_Volume_Creation_Wizard), "Volume Format") Then
                        ControlCommand($hWnd_TC_Volume_Creation_Wizard, "", "[CLASS:ComboBox; INSTANCE:1]", "SelectString", $TC_Container_Filesystem)
                        If ControlCommand($hWnd_TC_Volume_Creation_Wizard, "", "[CLASS:ComboBox; INSTANCE:1]", "GetCurrentSelection", "") = $TC_Container_Filesystem Then
                            ConsoleWrite('Step 09: Set Container File Format to ' & $TC_Container_Filesystem & @CRLF)
                            $TC_Volume_Creation_Wizard_Error_Code = 9
                            ControlClick($hWnd_TC_Volume_Creation_Wizard, '', '[CLASS:Button; INSTANCE:3]')
                            ExitLoop
                        EndIf
                    Else
                        $b_TC_Volume_Creation_Wizard_failed = True
                    EndIf
                WEnd
            EndIf

            If $b_TC_Volume_Creation_Wizard_failed = False Then
                $TC_Container_Creation_Progress = ""
                $TC_Container_Creation_Progress_Save = ""
                $TC_Timer = TimerInit()
                While 1
                    $TC_Container_Creation_Progress = StringReplace(ControlGetText($hWnd_TC_Volume_Creation_Wizard, '', '[CLASS:Static; INSTANCE:12]'), "%", "")
                    If ($TC_Container_Creation_Progress <> $TC_Container_Creation_Progress_Save) AND $TC_Container_Creation_Progress <> 100 Then
                        $TC_Timer = TimerInit()
                        $TC_Container_Creation_Progress_Save = $TC_Container_Creation_Progress
                        ConsoleWrite("Step 10: Container creation progress: " & $TC_Container_Creation_Progress & "%" & @CRLF)
                    EndIf
                    If $TC_Container_Creation_Progress = 100.000 Then 
                        ConsoleWrite("Step 10: Container creation progress: " & $TC_Container_Creation_Progress & "%" & @CRLF)
                        $TC_Volume_Creation_Wizard_Error_Code = 10
                        ExitLoop
                    endif
                    If TimerDiff($TC_Timer) > 5000 Then
                        ConsoleWrite("Step 10: No progress in 5 seconds... failure?" & @CRLF)
                        $b_TC_Volume_Creation_Wizard_failed = True
                        ExitLoop
                    EndIf
                WEnd
            EndIf

            If $b_TC_Volume_Creation_Wizard_failed = False Then
                $TC_Timer = TimerInit()
                While 1
                    If WinExists("[TITLE:TrueCrypt Volume Creation Wizard; CLASS:#32770]", "The TrueCrypt volume has been successfully created.") = 1 Then
                        ControlClick("[TITLE:TrueCrypt Volume Creation Wizard; CLASS:#32770]", '', '[CLASS:Button; INSTANCE:1]')
                        ConsoleWrite("Step 11: Container creation finished successfully" & @CRLF)
                        $TC_Volume_Creation_Wizard_Error_Code = 11
                        ExitLoop
                    EndIf
                    If TimerDiff($TC_Timer) > 15000 Then
                        ConsoleWrite("Step 11: Progress at 100% but TC failed to notify about success for 15 seconds...failure?" & @CRLF)
                        $b_TC_Volume_Creation_Wizard_failed = True
                        ExitLoop
                    EndIf
                WEnd
            EndIf

        EndIf
    EndIf

    SetError($TC_Volume_Creation_Wizard_Error_Code)
    If $b_TC_Volume_Creation_Wizard_failed = true Then
        Return 0
    Else
        Return 1
    EndIf

EndFunc   ;==>_TC_Container_Create

Func OnAutoItExit()
    ProcessClose($PID_TC_Format)
EndFunc   ;==>OnAutoItExit
Edited by KaFu
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...