Created
February 13, 2014 11:16
-
-
Save anonymous/8973394 to your computer and use it in GitHub Desktop.
Create TrueCrypt-Container with AutoIt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <winapi.au3> | |
#include <Constants.au3> | |
AutoItSetOption("WinDetectHiddenText", 1) | |
Opt("WinTitleMatchMode", 3) | |
Global $PID_TC_Format = 0 | |
OnAutoItExitRegister("OnAutoItExit") | |
ConsoleWrite("_TC_Container_Create("") returned " & _TC_Container_Create(@ScriptDir & "\testcontainer.tc", "AES", "RIPEMD-160", 1024000, "1234", "NTFS", True, True) & @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", $TC_Container_Dynamic = False, $showIt = False) | |
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 | |
If $showIt = True Then | |
$PID_TC_Format = Run('"' & @ScriptDir & '\TrueCrypt\TrueCrypt Format.exe"', @ScriptDir, @SW_SHOW) | |
Else | |
$PID_TC_Format = Run('"' & @ScriptDir & '\TrueCrypt\TrueCrypt Format.exe"', @ScriptDir, @SW_HIDE) | |
EndIf | |
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 | |
If $TC_Container_Dynamic = True Then | |
ConsoleWrite('Step 09a: Set Container File Format to Dynamic ' & $TC_Container_Dynamic & @CRLF) | |
If ControlCommand($hWnd_TC_Volume_Creation_Wizard, "", "[CLASS:Button; TEXT:Dynamic]", "IsChecked", "") = 0 Then | |
ControlCommand($hWnd_TC_Volume_Creation_Wizard, "", "[CLASS:Button; TEXT:Dynamic]", "Check", "") | |
WinWait("TrueCrypt Volume Creation Wizard", "Dynamic container is a pre-allocated NTFS sparse file", 5) | |
ControlClick("TrueCrypt Volume Creation Wizard", "Dynamic container is a pre-allocated NTFS sparse file", '[CLASS:Button; INSTANCE:1]') | |
EndIf | |
EndIf | |
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) > 60000 Then | |
ConsoleWrite("Step 11: Progress at 100% but TC failed to notify about success for 60 seconds...failure?" & @CRLF) | |
$b_TC_Volume_Creation_Wizard_failed = True | |
ExitLoop | |
EndIf | |
WEnd | |
EndIf | |
If $b_TC_Volume_Creation_Wizard_failed = False And $TC_Container_Dynamic = True Then | |
$TC_Timer = TimerInit() | |
While 1 | |
If WinExists("[TITLE:TrueCrypt Volume Creation Wizard; CLASS:#32770]", "Note that the size of the dynamic container reported by Windows") = 1 Then | |
ControlClick("[TITLE:TrueCrypt Volume Creation Wizard; CLASS:#32770]", "Note that the size of the dynamic container reported by Windows", '[CLASS:Button; INSTANCE:1]') | |
ConsoleWrite("Step 12: Warn dialog about dynamic volume size closed successfully" & @CRLF) | |
$TC_Volume_Creation_Wizard_Error_Code = 12 | |
ExitLoop | |
EndIf | |
If TimerDiff($TC_Timer) > 15000 Then | |
ConsoleWrite("Step 12: Warn dialog about dynamic volume size was not found!" & @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() | |
$debug = ProcessClose($PID_TC_Format) | |
ConsoleWrite("Exiting TC debug: Return code(" & $debug & ") Error code(" & @error & ")" & @CRLF) | |
EndFunc ;==>OnAutoItExit |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment