Ghost1987 Posted September 28, 2009 Share Posted September 28, 2009 (edited) This script replaces runasspc (free for private use only) software. I express my gratitude to trancexx for his SHA1ForFile function and Matthew Robinson (SkinnyWhiteGuy) for his Blowfish related encryption functions. Wouldn't have been able to finish this script without those functions. expandcollapse popup#cs ------------------------------------------------------------------------------- AutoIt Version: 3.3.0.0 Authors: EncryptedRunAs - Serj (Ghost_1987) _SHA1ForFile function - trancexx Blowfish related functions - Matthew Robinson (SkinnyWhiteGuy) Script Function: EncryptedRunAs. #ce ------------------------------------------------------------------------------- #NoTrayIcon ; #RequireAdmin #include <Array.au3> #include <ComboConstants.au3> #include <Constants.au3> #include <EditConstants.au3> #include <File.au3> #include <GUIConstantsEx.au3> #include <WinAPI.au3> #include <WindowsConstants.au3> Opt("MustDeclareVars", 1) Opt("TrayMenuMode", 1) Local $aUserEnum = _NetUserEnum() If @error Then MsgBox(0, "Error", _WinAPI_GetLastErrorMessage(), 30) Exit EndIf Local $sUserEnum = _ArrayToString($aUserEnum, "|", 1, $aUserEnum[0]+1) Global $key = DriveGetSerial(@HomeDrive) If @error Then MsgBox(0, "Error", "Crypt key error!", 30) Exit EndIf Global CONST $EncryptedStringSeparator = ";*x*;" If $CmdLine[0] == 1 Then EncryptedRunAs($CmdLine[1]) ElseIf $CmdLine[0] == 0 Then GUI($sUserEnum) Else Exit EndIf Func GUI($sUserEnum) Local $hWnd = GUICreate("EncryptedRunAs Options:", 420, 420, -1, -1, $WS_CAPTION + $WS_SYSMENU + $WS_MINIMIZEBOX) GUICtrlCreateGroup("Application", 10, 5, 400, 137) GUICtrlCreateLabel("Path:", 20, 25, 80, 20) Local $AppPath_Input = GUICtrlCreateInput("", 90, 22, 284, 20, $ES_AUTOHSCROLL + $ES_READONLY) Local $Browse_Button = GUICtrlCreateButton("...", 378, 21, 22, 22) GUICtrlCreateLabel("Parameters:", 20, 55, 80, 20) Local $AppParameters_Input = GUICtrlCreateInput("", 90, 52, 284, 20, $ES_AUTOHSCROLL) Local $CMDHelp_Button = GUICtrlCreateButton("?", 378, 51, 22, 22) GUICtrlCreateLabel("Execute in:", 20, 85, 80, 20) Local $WorkingDir_Combo = GUICtrlCreateCombo("", 90, 82, 284, 100, $CBS_AUTOHSCROLL + $GUI_SS_DEFAULT_COMBO + $CBS_SORT + $CBS_DISABLENOSCROLL) GUICtrlSetData($WorkingDir_Combo, StringTrimRight(@UserProfileDir, StringLen(@UserName) + 1) & "|" & @UserProfileDir & "|" & @TempDir & "|" & @ProgramFilesDir & "|" & @CommonFilesDir & "|" & @WindowsDir & "|" & @SystemDir) Local $WorkingDir_Button = GUICtrlCreateButton("»", 378, 81, 22, 22) Local $SHA1_CheckBox = GUICtrlCreateCheckbox("SHA1:", 20, 113, 50, 20) Local $SHA1_Input = GUICtrlCreateInput("SHA1_Enabled", 90, 112, 284, 20, $ES_AUTOHSCROLL + $ES_READONLY) GUICtrlSetFont($SHA1_Input, 8, 2) GUICtrlSetState($SHA1_CheckBox, $GUI_CHECKED) Local $SHA1Refresh_Button = GUICtrlCreateButton("»", 378, 111, 22, 22) GUICtrlCreateGroup("", -99, -99, 1, 1) GUICtrlCreateGroup("Authentication", 10, 145, 400, 109) GUICtrlCreateLabel("Login:", 20, 165, 50, 20) Local $Login_Combo = GUICtrlCreateCombo("", 90, 162, 284, 100) GUICtrlSetData($Login_Combo, $sUserEnum, @UserName) Local $LogonUserTest_Button = GUICtrlCreateButton("»", 378, 161, 22, 52) GUICtrlCreateLabel("Password:", 20, 195, 50, 20) Local $Password_Input = GUICtrlCreateInput("", 90, 192, 284, 20, $ES_PASSWORD + $ES_AUTOHSCROLL) GUICtrlCreateLabel("Logon:", 20, 225, 50, 20) Local $LogonFlag_Combo = GUICtrlCreateCombo("", 90, 222, 284, 100, $CBS_DROPDOWNLIST) GUICtrlSetData($LogonFlag_Combo, "Interactive logon with no profile.|Interactive logon with profile.", "Interactive logon with profile.") GUICtrlCreateGroup("", -99, -99, 1, 1) GUICtrlCreateGroup("Output", 10, 257, 400, 119) Local $Output_Edit = GUICtrlCreateEdit("Please input all data before encryption.", 20, 272, 380, 72, $ES_AUTOVSCROLL + $WS_VSCROLL + $ES_READONLY) Local $Shortcut_CheckBox = GUICtrlCreateCheckbox("Create shortcut to generated Crypt.key file", 20, 350, 340, 20) GUICtrlSetFont($Output_Edit, 9, 2) GUICtrlSetState($Shortcut_CheckBox, $GUI_CHECKED) GUICtrlCreateGroup("", -99, -99, 1, 1) Local $Open_Button = GUICtrlCreateButton("Open", 10, 384, 85, 27) Local $QuickSave_Button = GUICtrlCreateButton("Save", 105, 384, 85, 27) Local $Save_Button = GUICtrlCreateButton("...", 190, 384, 30, 27) Local $Test_Button = GUICtrlCreateButton("Test", 230, 384, 85, 27) Local $Quit_Button = GUICtrlCreateButton("Quit", 325, 384, 85, 27) GUICtrlSetState($QuickSave_Button, $GUI_DEFBUTTON) GUISetState(@SW_SHOW) While 1 Local $msg = GUIGetMsg(), $AppPath, $AppParameters, $WorkingDir, $UserName, $Password, $Logon_Combo_Flag, $SHA1_Flag, $AppSHA1, $CreateShortcut If $msg == $Browse_Button Then $SHA1_Flag = GUICtrlRead($SHA1_CheckBox) Local $BrowsePath = FileOpenDialog("Choose application to RunAs...", @WorkingDir & "\", "Programs (*.exe;*.com;*.cmd;*.bat)", 1 + 2, "", $hWnd) If @error Then GUICtrlSetData($Output_Edit, "No application was chosen!" & @CRLF) Else GUICtrlSetData($AppPath_Input, $BrowsePath) $WorkingDir = StripAppName($BrowsePath) GUICtrlSetData($WorkingDir_Combo, $WorkingDir, $WorkingDir) If $SHA1_Flag == 1 Then GUICtrlSetData($Output_Edit, "Calculating SHA1 hash..." & @CRLF) Local $aRetAppSHA1 = SHA1Wrapper($BrowsePath) GUICtrlSetData($SHA1_Input, $aRetAppSHA1[0]) GUICtrlSetData($Output_Edit, $aRetAppSHA1[1]) Else GUICtrlSetData($SHA1_Input, "SHA1_Disabled") GUICtrlSetData($Output_Edit, "SHA1 hash disabled." & @CRLF) EndIf EndIf EndIf If $msg == $CMDHelp_Button Then $AppPath = GUICtrlRead($AppPath_Input) If FileExists($AppPath) == 1 Then Run(@ComSpec & " /k", @WorkingDir) EndIf If $msg == $WorkingDir_Button Then $AppPath = GUICtrlRead($AppPath_Input) $WorkingDir = StripAppName($AppPath) GUICtrlSetData($WorkingDir_Combo, $WorkingDir, $WorkingDir) EndIf If $msg == $SHA1_CheckBox Then $AppPath = GUICtrlRead($AppPath_Input) $SHA1_Flag = GUICtrlRead($SHA1_CheckBox) If $SHA1_Flag == 1 Then GUICtrlSetData($SHA1_Input, "SHA1_Enabled") GUICtrlSetData($Output_Edit, "SHA1 hash enabled." & @CRLF) If FileExists($AppPath) == 1 Then GUICtrlSetData($Output_Edit, "Calculating SHA1 hash..." & @CRLF) Local $aRetAppSHA1 = SHA1Wrapper($AppPath) GUICtrlSetData($SHA1_Input, $aRetAppSHA1[0]) GUICtrlSetData($Output_Edit, $aRetAppSHA1[1]) EndIf Else GUICtrlSetData($SHA1_Input, "SHA1_Disabled") GUICtrlSetData($Output_Edit, "SHA1 hash disabled." & @CRLF) EndIf EndIf If $msg == $SHA1Refresh_Button Then $AppPath = GUICtrlRead($AppPath_Input) If FileExists($AppPath) == 1 Then GUICtrlSetData($Output_Edit, "Calculating SHA1 hash..." & @CRLF) Local $aRetAppSHA1 = SHA1Wrapper($AppPath) GUICtrlSetData($SHA1_Input, $aRetAppSHA1[0]) GUICtrlSetData($Output_Edit, $aRetAppSHA1[1]) EndIf EndIf If $msg == $LogonUserTest_Button Then $UserName = GUICtrlRead($Login_Combo) $Password = GUICtrlRead($Password_Input) Local $LogonUser = _LogonUser($UserName, $Password) If @error Then GUICtrlSetData($Output_Edit, "LogonUser WinAPI function error." & @CRLF & "Authentication check is impossible." & @CRLF) ElseIf $LogonUser == True Then GUICtrlSetData($Output_Edit, "Authentication successful." & @CRLF) ElseIf $LogonUser == False Then GUICtrlSetData($Output_Edit, "Authentication failed." & @CRLF) EndIf EndIf If $msg == $Open_Button Then Local $OpenCryptFilePath = FileOpenDialog("Open Crypt.key file for EncryptedRunAs...", @WorkingDir & "\", "Crypt file (*.key)", 1 + 2, "", $hWnd) If @error Then GUICtrlSetData($Output_Edit, "No Crypt.key file was chosen!" & @CRLF) Else EncryptedRunAs($OpenCryptFilePath) EndIf EndIf If $msg == $Save_Button Or $msg == $QuickSave_Button Or $msg == $Test_Button Then $AppPath = GUICtrlRead($AppPath_Input) $AppParameters = GUICtrlRead($AppParameters_Input) $WorkingDir = GUICtrlRead($WorkingDir_Combo) $UserName = GUICtrlRead($Login_Combo) $Password = GUICtrlRead($Password_Input) $Logon_Combo_Flag = GUICtrlRead($LogonFlag_Combo) $SHA1_Flag = GUICtrlRead($SHA1_CheckBox) $AppSHA1 = GUICtrlRead($SHA1_Input) $CreateShortcut = GUICtrlRead($Shortcut_CheckBox) If $Logon_Combo_Flag == "Interactive logon with no profile." Then Local $Logon_Flag = 0 ElseIf $Logon_Combo_Flag == "Interactive logon with profile." Then Local $Logon_Flag = 1 EndIf If FileExists($AppPath) == 1 And $AppSHA1 <> "SHA1_Failed" And FileExists($WorkingDir) == 1 Then Local $EncryptedString = StringToBinary(_Blowfish($key, $AppPath & $EncryptedStringSeparator & $AppParameters & $EncryptedStringSeparator & $WorkingDir & $EncryptedStringSeparator & $UserName & $EncryptedStringSeparator & $Password & $EncryptedStringSeparator & $Logon_Flag & $EncryptedStringSeparator & $AppSHA1, 0)) If $msg == $Save_Button Then Local $CryptFileSavePath = FileSaveDialog("Choose name and location for crypt file...", $AppPath, "Encrypted key (*.key)", 2 + 16, "crypt.key", $hWnd) If @error <> 1 Then Local $SaveCryptKeyFileRet = SaveCryptKeyFile($AppPath, $CryptFileSavePath, $EncryptedString, $CreateShortcut, $hWnd) GUICtrlSetData($Output_Edit, $SaveCryptKeyFileRet) Else GUICtrlSetData($Output_Edit, "Crypt file save cancelled." & @CRLF) EndIf EndIf If $msg == $QuickSave_Button Then Local $SaveCryptKeyFileRet = SaveCryptKeyFile($AppPath, 0, $EncryptedString, $CreateShortcut, $hWnd) GUICtrlSetData($Output_Edit, $SaveCryptKeyFileRet) EndIf If $msg == $Test_Button Then $CreateShortcut = 0 Local $SaveCryptKeyFileRet = SaveCryptKeyFile($AppPath, @TempDir & '\crypt.key', $EncryptedString, $CreateShortcut, $hWnd) GUICtrlSetData($Output_Edit, $SaveCryptKeyFileRet) Local $EncryptedRunAsRet = EncryptedRunAs(@TempDir & '\crypt.key') If $EncryptedRunAsRet == True Then GUICtrlSetData($Output_Edit, GUICtrlRead($Output_Edit) & "Test-run successful." & @CRLF) Else GUICtrlSetData($Output_Edit, GUICtrlRead($Output_Edit) & "Test-run failed." & @CRLF) EndIf FileDelete(@TempDir & '\crypt.key') WinActivate($hWnd) EndIf Else Local $errmsg = "" If FileExists($AppPath) == 0 Then $errmsg &= "Specified file does not exist." & @CRLF If FileExists($WorkingDir) == 0 Then $errmsg &= "Specified working directory does not exist." & @CRLF If $AppSHA1 == "SHA1_Failed" Then $errmsg &= "SHA1 hash computation failed." & @CRLF & "Please disable SHA1 hash computation!" & @CRLF GUICtrlSetData($Output_Edit, $errmsg) EndIf Local $LogonUser = _LogonUser($UserName, $Password) If @error Then GUICtrlSetData($Output_Edit, GUICtrlRead($Output_Edit) & "LogonUser WinAPI function error." & @CRLF & "Authentication check is impossible." & @CRLF) ElseIf $LogonUser == True Then GUICtrlSetData($Output_Edit, GUICtrlRead($Output_Edit) & "Authentication successful." & @CRLF) ElseIf $LogonUser == False Then GUICtrlSetData($Output_Edit, GUICtrlRead($Output_Edit) & "Authentication failed." & @CRLF) EndIf EndIf If $msg == $Quit_Button Or $msg == $GUI_EVENT_CLOSE Then Exit WEnd GUIDelete() EndFunc ;GUI Func SHA1Wrapper($AppPath) Local $hTimer = TimerInit() Local $AppSHA1 = _SHA1ForFile($AppPath) Local $aRet[2] If @error Then $aRet[0] = "SHA1_Failed" $aRet[1] = "SHA1 hash computation failed." & @CRLF SetError(1) Return $aRet Else Local $iTimer = TimerDiff($hTimer) $aRet[0] = $AppSHA1 $aRet[1] = "SHA1 hash computation completed successfully." & @CRLF & "SHA1 took " & $iTimer & " ms" & @CRLF SetError(0) Return $aRet EndIf EndFunc ;SHA1Wrapper Func StripAppName($AppPath) Dim $szDrive, $szDir, $szFName, $szExt Local $aPathRet = _PathSplit($AppPath, $szDrive, $szDir, $szFName, $szExt) If FileExists($aPathRet[2]) == 0 Then Return @TempDir Else Return $aPathRet[1] & $aPathRet[2] EndIf EndFunc ;StripAppName Func GetAppName($AppPath) Dim $szDrive, $szDir, $szFName, $szExt Local $aPathRet = _PathSplit($AppPath, $szDrive, $szDir, $szFName, $szExt) If IsArray($aPathRet) Then Return $aPathRet[3] Else Return "AppName" EndIf EndFunc ;GetAppName Func GetAppExtension($AppPath) Dim $szDrive, $szDir, $szFName, $szExt Local $aPathRet = _PathSplit($AppPath, $szDrive, $szDir, $szFName, $szExt) If IsArray($aPathRet) Then Return $aPathRet[4] Else Return "" EndIf EndFunc ;GetAppExtension Func SaveCryptKeyFile($AppPath, $CryptFileSavePath, $EncryptedString, $CreateShortcut, $hWnd) Local $sRet If $CryptFileSavePath == 0 Then $CryptFileSavePath = StripAppName($AppPath) & 'crypt.key' Endif Local $CryptFileOpenTest = FileOpen($CryptFileSavePath, 16 + 2) If $CryptFileOpenTest = -1 Then $sRet &= "Unable to create crypt file." & @CRLF Else FileWrite($CryptFileOpenTest, $EncryptedString) If @error Then $sRet &= "File cannot be written to." & @CRLF EndIf FileClose($CryptFileOpenTest) If $CreateShortcut == 1 Then Local $AppExtension = GetAppExtension($AppPath) If $AppExtension == ".exe" Then Local $IconPath = $AppPath Local $IconIndex = 0 Else Local $IconPath = @SystemDir & "\shell32.dll" Local $IconIndex = 2 EndIf Local $ShortcutSavePath = FileSaveDialog("Choose name and location for shortcut...", @DesktopDir, "Shortcut (*.lnk)", 2 + 16, GetAppName($AppPath) & ".lnk", $hWnd) If @error Then $sRet &= "Shortcut creation canceled." & @CRLF Else If @Compiled == 0 Then Local $ShortcutArgs = '"' & @ScriptFullPath & '" "' & $CryptFileSavePath & '"' ElseIf @Compiled == 1 Then Local $ShortcutArgs = '"' & $CryptFileSavePath & '"' EndIf FileCreateShortcut(@AutoItExe, $ShortcutSavePath, @ScriptDir, $ShortcutArgs, "", $IconPath, "", $IconIndex, @SW_SHOWNORMAL) If @error Then $sRet &= "Shortcut creation failed." & @CRLF EndIf If FileExists($ShortcutSavePath) == 1 Then $sRet &= "Shortcut created successfully." & @CRLF EndIf EndIf EndIf If FileExists($CryptFileSavePath) == 1 Then $sRet &= "Crypt file created successfully." & @CRLF Return $sRet EndFunc ;SaveCryptKeyFile Func EncryptedRunAs($CryptFilePath) Local $CryptFileOpenTest = FileOpen($CryptFilePath, 16) If $CryptFileOpenTest = -1 Then MsgBox(0, "Error", "Unable to open crypt file.", 30) Return False Exit Else Local $EncryptedString = FileRead($CryptFileOpenTest) If @error Then MsgBox(0, "Error", "File cannot be opened in read mode.", 30) Return False Exit EndIf FileClose($CryptFileOpenTest) Local $DecryptedString = _Blowfish($key, BinaryToString($EncryptedString), 1) Local $DecryptedArray = StringSplit($DecryptedString, $EncryptedStringSeparator, 1) If $DecryptedArray[0] == 7 Then Local $AppPath = $DecryptedArray[1] Local $AppParameters = $DecryptedArray[2] Local $WorkingDir = $DecryptedArray[3] Local $UserName = $DecryptedArray[4] Local $Password = $DecryptedArray[5] Local $Logon_Flag = $DecryptedArray[6] Local $AppSHA1Str = $DecryptedArray[7] If $AppParameters == "" Then Local $AppPathANDParameters = $AppPath Else Local $AppPathANDParameters = $AppPath & " " & $AppParameters EndIf If $AppSHA1Str == "SHA1_Disabled" Then RunAs($UserName, @ComputerName, $Password, $Logon_Flag, $AppPathANDParameters, $WorkingDir) If @error Then MsgBox(0, "Error", "RunAs failed:" & @CRLF & @TAB & _WinAPI_GetLastErrorMessage(), 30) Return False Exit EndIf Else Local $AppSHA1Gen = _SHA1ForFile($AppPath) If @error Then MsgBox(0, "Error", "SHA1 hash computation failed.", 30) Return False Exit EndIf If $AppSHA1Str == $AppSHA1Gen Then RunAs($UserName, @ComputerName, $Password, $Logon_Flag, $AppPathANDParameters, $WorkingDir) If @error Then MsgBox(0, "Error", "RunAs failed:" & @CRLF & @TAB & _WinAPI_GetLastErrorMessage(), 30) Return False Exit EndIf Else MsgBox(0, "Error", "File integrity check failed." & @CRLF & "SHA1 file hash is diffrent from encoded in crypt file.", 30) Return False Exit EndIf EndIf Else MsgBox(0, "Error", "Decryption failed. Error in crypt file integrity.", 30) Return False Exit EndIf EndIf Return True EndFunc ;EncryptedRunAs Func _NetUserEnum($sServer = "") ; array[0] contains number of elements Local $tBufPtr = DllStructCreate("ptr") Local $tEntriesRead = DllStructCreate("dword") Local $tTotalEntries = DllStructCreate("dword") Local $aRet = DllCall("Netapi32.dll", "int", "NetUserEnum", "wstr", $sServer, "dword", 1, "dword", 2, "ptr", DllStructGetPtr($tBufPtr), "dword", -1, "ptr", DllStructGetPtr($tEntriesRead), "ptr", DllStructGetPtr($tTotalEntries), "ptr", 0 ) If $aRet[0] Then Return SetError(1, $aRet[0], False) Local Const $UF_ACCOUNTDISABLE = 0x2 Local $iEntriesRead = DllStructGetData($tEntriesRead,1) Local $pBuf = DllStructGetData($tBufPtr,1) Local $aUserEnum[1] = [0] Local $sUserInfo1 = "ptr;ptr;dword;dword;ptr;ptr;dword;ptr" Local $tUserInfo1 = DllStructCreate ($sUserInfo1) Local $zUserInfo1 = DllStructGetSize($tUserInfo1) For $i=1 To $iEntriesRead $tUserInfo1 = DllStructCreate($sUserInfo1, $pBuf+($i-1)*$zUserInfo1) Local $tName = DllStructCreate("wchar[256]", DllStructGetData($tUserInfo1,1)) Local $tFlag = DllStructGetData($tUserInfo1,7) If BitAnd($tFlag, $UF_ACCOUNTDISABLE)=0 Then $aUserEnum[0] += 1 ReDim $aUserEnum[$aUserEnum[0]+1] $aUserEnum[$aUserEnum[0]] = DllStructGetData($tName,1) EndIf Next DllCall("Netapi32.dll", "int", "NetApiBufferFree", "ptr", $pBuf) Return $aUserEnum EndFunc ;_NetUserEnum Func _LogonUser($sUsername, $sPassword, $sServer = '.') ; Returns True if user exists Local $stToken = DllStructCreate("int") Local $aRet = DllCall("advapi32.dll", "int", "LogonUser", _ "str", $sUsername, "str", $sServer, "str", $sPassword, "dword", 3, "dword", 0, "ptr", DllStructGetPtr($stToken)) ; Local $hToken = DllStructGetData($stToken, 1) If @error Then Local $ErrorMsg = _WinAPI_GetLastErrorMessage() Return SetError(1, @error, $ErrorMsg) ElseIf $aRet[0] <> 0 Then Return True ElseIf $aRet[0] == 0 Then Return False EndIf EndFunc ;_LogonUser Func _Blowfish($key, $message, $decrypt) Local $i, $m, $len Local $xl, $xr, $result, $fill If IsDeclared("P") <> 1 Or IsDeclared("S") <> 1 Or IsDeclared("Gkey") <> 1 Then Global $P[18] Global $S[4][256] Global $Gkey = $key _BlowFish_Init($P, $S, $Gkey) ElseIf Not ($Gkey == $key) Then Global $P[18] Global $S[4][256] Global $Gkey = $key _BlowFish_Init($P, $S, $Gkey) EndIf If $decrypt == 0 Then $fill = 8 If Mod(StringLen($message), 8) <> 0 Then $fill = 8 - Mod(StringLen($message), 8) EndIf For $i = 1 To $fill $message &= Chr($fill) Next EndIf $len = StringLen($message) While $m < $len $xl = StringMid($message, $m + 1, 4) $xr = StringMid($message, $m + 5, 4) $m += 8 $xl = BitOR(BitShift(Asc(StringMid($xl, 1, 1)), -24), BitShift(Asc(StringMid($xl, 2, 1)), -16), BitShift(Asc(StringMid($xl, 3, 1)), -8), Asc(StringMid($xl, 4, 1))) $xr = BitOR(BitShift(Asc(StringMid($xr, 1, 1)), -24), BitShift(Asc(StringMid($xr, 2, 1)), -16), BitShift(Asc(StringMid($xr, 3, 1)), -8), Asc(StringMid($xr, 4, 1))) If $decrypt == 0 Then _BlowFish_Save($P, $S, $xl, $xr) Else _BlowFish_Decrypt($P, $S, $xl, $xr) EndIf $result &= Chr(BitAND(BitShift($xl, 24), 0xFF)) $result &= Chr(BitAND(BitShift($xl, 16), 0xFF)) $result &= Chr(BitAND(BitShift($xl, 8), 0xFF)) $result &= Chr(BitAND($xl, 0xFF)) $result &= Chr(BitAND(BitShift($xr, 24), 0xFF)) $result &= Chr(BitAND(BitShift($xr, 16), 0xFF)) $result &= Chr(BitAND(BitShift($xr, 8), 0xFF)) $result &= Chr(BitAND($xr, 0xFF)) WEnd ; Strip Null Bytes from end of string (Are present if decrypting) If $decrypt == 1 Then $fill = Asc(StringRight($result, 1)) $result = StringTrimRight($result, $fill) EndIf Return $result EndFunc ;_Blowfish Func _BlowFish_Init(ByRef $P, ByRef $S, $key) Local $ORIG_P[18] = [0x243f6a88, 0x85a308d3, 0x13198a2e, 0x03707344, 0xa4093822, 0x299f31d0, 0x082efa98, 0xec4e6c89, 0x452821e6, 0x38d01377, 0xbe5466cf, 0x34e90c6c, 0xc0ac29b7, 0xc97c50dd, 0x3f84d5b5, 0xb5470917, 0x9216d5d9, 0x8979fb1b] Local $ORIG_S0[256] = [0xd1310ba6, 0x98dfb5ac, 0x2ffd72db, 0xd01adfb7, 0xb8e1afed, 0x6a267e96, 0xba7c9045, 0xf12c7f99, 0x24a19947, 0xb3916cf7, 0x0801f2e2, 0x858efc16, 0x636920d8, 0x71574e69, 0xa458fea3, 0xf4933d7e, 0x0d95748f, 0x728eb658, 0x718bcd58, 0x82154aee, 0x7b54a41d, 0xc25a59b5, 0x9c30d539, 0x2af26013, 0xc5d1b023, 0x286085f0, 0xca417918, 0xb8db38ef, 0x8e79dcb0, 0x603a180e, 0x6c9e0e8b, 0xb01e8a3e, 0xd71577c1, 0xbd314b27, 0x78af2fda, 0x55605c60, 0xe65525f3, 0xaa55ab94, 0x57489862, 0x63e81440, 0x55ca396a, 0x2aab10b6, 0xb4cc5c34, _ 0x1141e8ce, 0xa15486af, 0x7c72e993, 0xb3ee1411, 0x636fbc2a, 0x2ba9c55d, 0x741831f6, 0xce5c3e16, 0x9b87931e, 0xafd6ba33, 0x6c24cf5c, 0x7a325381, 0x28958677, 0x3b8f4898, 0x6b4bb9af, 0xc4bfe81b, 0x66282193, 0x61d809cc, 0xfb21a991, 0x487cac60, 0x5dec8032, 0xef845d5d, 0xe98575b1, 0xdc262302, 0xeb651b88, 0x23893e81, 0xd396acc5, 0x0f6d6ff3, 0x83f44239, 0x2e0b4482, 0xa4842004, 0x69c8f04a, 0x9e1f9b5e, 0x21c66842, 0xf6e96c9a, 0x670c9c61, 0xabd388f0, 0x6a51a0d2, 0xd8542f68, 0x960fa728, 0xab5133a3, 0x6eef0b6c, 0x137a3be4, 0xba3bf050, 0x7efb2a98, _ 0xa1f1651d, 0x39af0176, 0x66ca593e, 0x82430e88, 0x8cee8619, 0x456f9fb4, 0x7d84a5c3, 0x3b8b5ebe, 0xe06f75d8, 0x85c12073, 0x401a449f, 0x56c16aa6, 0x4ed3aa62, 0x363f7706, 0x1bfedf72, 0x429b023d, 0x37d0d724, 0xd00a1248, 0xdb0fead3, 0x49f1c09b, 0x075372c9, 0x80991b7b, 0x25d479d8, 0xf6e8def7, 0xe3fe501a, 0xb6794c3b, 0x976ce0bd, 0x04c006ba, 0xc1a94fb6, 0x409f60c4, 0x5e5c9ec2, 0x196a2463, 0x68fb6faf, 0x3e6c53b5, 0x1339b2eb, 0x3b52ec6f, 0x6dfc511f, 0x9b30952c, 0xcc814544, 0xaf5ebd09, 0xbee3d004, 0xde334afd, 0x660f2807, 0x192e4bb3, 0xc0cba857, _ 0x45c8740f, 0xd20b5f39, 0xb9d3fbdb, 0x5579c0bd, 0x1a60320a, 0xd6a100c6, 0x402c7279, 0x679f25fe, 0xfb1fa3cc, 0x8ea5e9f8, 0xdb3222f8, 0x3c7516df, 0xfd616b15, 0x2f501ec8, 0xad0552ab, 0x323db5fa, 0xfd238760, 0x53317b48, 0x3e00df82, 0x9e5c57bb, 0xca6f8ca0, 0x1a87562e, 0xdf1769db, 0xd542a8f6, 0x287effc3, 0xac6732c6, 0x8c4f5573, 0x695b27b0, 0xbbca58c8, 0xe1ffa35d, 0xb8f011a0, 0x10fa3d98, 0xfd2183b8, 0x4afcb56c, 0x2dd1d35b, 0x9a53e479, 0xb6f84565, 0xd28e49bc, 0x4bfb9790, 0xe1ddf2da, 0xa4cb7e33, 0x62fb1341, 0xcee4c6e8, 0xef20cada, 0x36774c01, _ 0xd07e9efe, 0x2bf11fb4, 0x95dbda4d, 0xae909198, 0xeaad8e71, 0x6b93d5a0, 0xd08ed1d0, 0xafc725e0, 0x8e3c5b2f, 0x8e7594b7, 0x8ff6e2fb, 0xf2122b64, 0x8888b812, 0x900df01c, 0x4fad5ea0, 0x688fc31c, 0xd1cff191, 0xb3a8c1ad, 0x2f2f2218, 0xbe0e1777, 0xea752dfe, 0x8b021fa1, 0xe5a0cc0f, 0xb56f74e8, 0x18acf3d6, 0xce89e299, 0xb4a84fe0, 0xfd13e0b7, 0x7cc43b81, 0xd2ada8d9, 0x165fa266, 0x80957705, 0x93cc7314, 0x211a1477, 0xe6ad2065, 0x77b5fa86, 0xc75442f5, 0xfb9d35cf, 0xebcdaf0c, 0x7b3e89a0, 0xd6411bd3, 0xae1e7e49, 0x00250e2d, 0x2071b35e, 0x226800bb, _ 0x57b8e0af, 0x2464369b, 0xf009b91e, 0x5563911d, 0x59dfa6aa, 0x78c14389, 0xd95a537f, 0x207d5ba2, 0x02e5b9c5, 0x83260376, 0x6295cfa9, 0x11c81968, 0x4e734a41, 0xb3472dca, 0x7b14a94a, 0x1b510052, 0x9a532915, 0xd60f573f, 0xbc9bc6e4, 0x2b60a476, 0x81e67400, 0x08ba6fb5, 0x571be91f, 0xf296ec6b, 0x2a0dd915, 0xb6636521, 0xe7b9f9b6, 0xff34052e, 0xc5855664, 0x53b02d5d, 0xa99f8fa1, 0x08ba4799, 0x6e85076a] Local $ORIG_S1[256] = [0x4b7a70e9, 0xb5b32944, 0xdb75092e, 0xc4192623, 0xad6ea6b0, 0x49a7df7d, 0x9cee60b8, 0x8fedb266, 0xecaa8c71, 0x699a17ff, 0x5664526c, 0xc2b19ee1, 0x193602a5, 0x75094c29, 0xa0591340, 0xe4183a3e, 0x3f54989a, 0x5b429d65, 0x6b8fe4d6, 0x99f73fd6, 0xa1d29c07, 0xefe830f5, 0x4d2d38e6, 0xf0255dc1, 0x4cdd2086, 0x8470eb26, 0x6382e9c6, 0x021ecc5e, 0x09686b3f, 0x3ebaefc9, 0x3c971814, 0x6b6a70a1, 0x687f3584, 0x52a0e286, 0xb79c5305, 0xaa500737, 0x3e07841c, 0x7fdeae5c, 0x8e7d44ec, 0x5716f2b8, 0xb03ada37, 0xf0500c0d, 0xf01c1f04, _ 0x0200b3ff, 0xae0cf51a, 0x3cb574b2, 0x25837a58, 0xdc0921bd, 0xd19113f9, 0x7ca92ff6, 0x94324773, 0x22f54701, 0x3ae5e581, 0x37c2dadc, 0xc8b57634, 0x9af3dda7, 0xa9446146, 0x0fd0030e, 0xecc8c73e, 0xa4751e41, 0xe238cd99, 0x3bea0e2f, 0x3280bba1, 0x183eb331, 0x4e548b38, 0x4f6db908, 0x6f420d03, 0xf60a04bf, 0x2cb81290, 0x24977c79, 0x5679b072, 0xbcaf89af, 0xde9a771f, 0xd9930810, 0xb38bae12, 0xdccf3f2e, 0x5512721f, 0x2e6b7124, 0x501adde6, 0x9f84cd87, 0x7a584718, 0x7408da17, 0xbc9f9abc, 0xe94b7d8c, 0xec7aec3a, 0xdb851dfa, 0x63094366, 0xc464c3d2, _ 0xef1c1847, 0x3215d908, 0xdd433b37, 0x24c2ba16, 0x12a14d43, 0x2a65c451, 0x50940002, 0x133ae4dd, 0x71dff89e, 0x10314e55, 0x81ac77d6, 0x5f11199b, 0x043556f1, 0xd7a3c76b, 0x3c11183b, 0x5924a509, 0xf28fe6ed, 0x97f1fbfa, 0x9ebabf2c, 0x1e153c6e, 0x86e34570, 0xeae96fb1, 0x860e5e0a, 0x5a3e2ab3, 0x771fe71c, 0x4e3d06fa, 0x2965dcb9, 0x99e71d0f, 0x803e89d6, 0x5266c825, 0x2e4cc978, 0x9c10b36a, 0xc6150eba, 0x94e2ea78, 0xa5fc3c53, 0x1e0a2df4, 0xf2f74ea7, 0x361d2b3d, 0x1939260f, 0x19c27960, 0x5223a708, 0xf71312b6, 0xebadfe6e, 0xeac31f66, 0xe3bc4595, _ 0xa67bc883, 0xb17f37d1, 0x018cff28, 0xc332ddef, 0xbe6c5aa5, 0x65582185, 0x68ab9802, 0xeecea50f, 0xdb2f953b, 0x2aef7dad, 0x5b6e2f84, 0x1521b628, 0x29076170, 0xecdd4775, 0x619f1510, 0x13cca830, 0xeb61bd96, 0x0334fe1e, 0xaa0363cf, 0xb5735c90, 0x4c70a239, 0xd59e9e0b, 0xcbaade14, 0xeecc86bc, 0x60622ca7, 0x9cab5cab, 0xb2f3846e, 0x648b1eaf, 0x19bdf0ca, 0xa02369b9, 0x655abb50, 0x40685a32, 0x3c2ab4b3, 0x319ee9d5, 0xc021b8f7, 0x9b540b19, 0x875fa099, 0x95f7997e, 0x623d7da8, 0xf837889a, 0x97e32d77, 0x11ed935f, 0x16681281, 0x0e358829, 0xc7e61fd6, _ 0x96dedfa1, 0x7858ba99, 0x57f584a5, 0x1b227263, 0x9b83c3ff, 0x1ac24696, 0xcdb30aeb, 0x532e3054, 0x8fd948e4, 0x6dbc3128, 0x58ebf2ef, 0x34c6ffea, 0xfe28ed61, 0xee7c3c73, 0x5d4a14d9, 0xe864b7e3, 0x42105d14, 0x203e13e0, 0x45eee2b6, 0xa3aaabea, 0xdb6c4f15, 0xfacb4fd0, 0xc742f442, 0xef6abbb5, 0x654f3b1d, 0x41cd2105, 0xd81e799e, 0x86854dc7, 0xe44b476a, 0x3d816250, 0xcf62a1f2, 0x5b8d2646, 0xfc8883a0, 0xc1c7b6a3, 0x7f1524c3, 0x69cb7492, 0x47848a0b, 0x5692b285, 0x095bbf00, 0xad19489d, 0x1462b174, 0x23820e00, 0x58428d2a, 0x0c55f5ea, 0x1dadf43e, _ 0x233f7061, 0x3372f092, 0x8d937e41, 0xd65fecf1, 0x6c223bdb, 0x7cde3759, 0xcbee7460, 0x4085f2a7, 0xce77326e, 0xa6078084, 0x19f8509e, 0xe8efd855, 0x61d99735, 0xa969a7aa, 0xc50c06c2, 0x5a04abfc, 0x800bcadc, 0x9e447a2e, 0xc3453484, 0xfdd56705, 0x0e1e9ec9, 0xdb73dbd3, 0x105588cd, 0x675fda79, 0xe3674340, 0xc5c43465, 0x713e38d8, 0x3d28f89e, 0xf16dff20, 0x153e21e7, 0x8fb03d4a, 0xe6e39f2b, 0xdb83adf7] Local $ORIG_S2[256] = [0xe93d5a68, 0x948140f7, 0xf64c261c, 0x94692934, 0x411520f7, 0x7602d4f7, 0xbcf46b2e, 0xd4a20068, 0xd4082471, 0x3320f46a, 0x43b7d4b7, 0x500061af, 0x1e39f62e, 0x97244546, 0x14214f74, 0xbf8b8840, 0x4d95fc1d, 0x96b591af, 0x70f4ddd3, 0x66a02f45, 0xbfbc09ec, 0x03bd9785, 0x7fac6dd0, 0x31cb8504, 0x96eb27b3, 0x55fd3941, 0xda2547e6, 0xabca0a9a, 0x28507825, 0x530429f4, 0x0a2c86da, 0xe9b66dfb, 0x68dc1462, 0xd7486900, 0x680ec0a4, 0x27a18dee, 0x4f3ffea2, 0xe887ad8c, 0xb58ce006, 0x7af4d6b6, 0xaace1e7c, 0xd3375fec, 0xce78a399, _ 0x406b2a42, 0x20fe9e35, 0xd9f385b9, 0xee39d7ab, 0x3b124e8b, 0x1dc9faf7, 0x4b6d1856, 0x26a36631, 0xeae397b2, 0x3a6efa74, 0xdd5b4332, 0x6841e7f7, 0xca7820fb, 0xfb0af54e, 0xd8feb397, 0x454056ac, 0xba489527, 0x55533a3a, 0x20838d87, 0xfe6ba9b7, 0xd096954b, 0x55a867bc, 0xa1159a58, 0xcca92963, 0x99e1db33, 0xa62a4a56, 0x3f3125f9, 0x5ef47e1c, 0x9029317c, 0xfdf8e802, 0x04272f70, 0x80bb155c, 0x05282ce3, 0x95c11548, 0xe4c66d22, 0x48c1133f, 0xc70f86dc, 0x07f9c9ee, 0x41041f0f, 0x404779a4, 0x5d886e17, 0x325f51eb, 0xd59bc0d1, 0xf2bcc18f, 0x41113564, _ 0x257b7834, 0x602a9c60, 0xdff8e8a3, 0x1f636c1b, 0x0e12b4c2, 0x02e1329e, 0xaf664fd1, 0xcad18115, 0x6b2395e0, 0x333e92e1, 0x3b240b62, 0xeebeb922, 0x85b2a20e, 0xe6ba0d99, 0xde720c8c, 0x2da2f728, 0xd0127845, 0x95b794fd, 0x647d0862, 0xe7ccf5f0, 0x5449a36f, 0x877d48fa, 0xc39dfd27, 0xf33e8d1e, 0x0a476341, 0x992eff74, 0x3a6f6eab, 0xf4f8fd37, 0xa812dc60, 0xa1ebddf8, 0x991be14c, 0xdb6e6b0d, 0xc67b5510, 0x6d672c37, 0x2765d43b, 0xdcd0e804, 0xf1290dc7, 0xcc00ffa3, 0xb5390f92, 0x690fed0b, 0x667b9ffb, 0xcedb7d9c, 0xa091cf0b, 0xd9155ea3, 0xbb132f88, _ 0x515bad24, 0x7b9479bf, 0x763bd6eb, 0x37392eb3, 0xcc115979, 0x8026e297, 0xf42e312d, 0x6842ada7, 0xc66a2b3b, 0x12754ccc, 0x782ef11c, 0x6a124237, 0xb79251e7, 0x06a1bbe6, 0x4bfb6350, 0x1a6b1018, 0x11caedfa, 0x3d25bdd8, 0xe2e1c3c9, 0x44421659, 0x0a121386, 0xd90cec6e, 0xd5abea2a, 0x64af674e, 0xda86a85f, 0xbebfe988, 0x64e4c3fe, 0x9dbc8057, 0xf0f7c086, 0x60787bf8, 0x6003604d, 0xd1fd8346, 0xf6381fb0, 0x7745ae04, 0xd736fccc, 0x83426b33, 0xf01eab71, 0xb0804187, 0x3c005e5f, 0x77a057be, 0xbde8ae24, 0x55464299, 0xbf582e61, 0x4e58f48f, 0xf2ddfda2, _ 0xf474ef38, 0x8789bdc2, 0x5366f9c3, 0xc8b38e74, 0xb475f255, 0x46fcd9b9, 0x7aeb2661, 0x8b1ddf84, 0x846a0e79, 0x915f95e2, 0x466e598e, 0x20b45770, 0x8cd55591, 0xc902de4c, 0xb90bace1, 0xbb8205d0, 0x11a86248, 0x7574a99e, 0xb77f19b6, 0xe0a9dc09, 0x662d09a1, 0xc4324633, 0xe85a1f02, 0x09f0be8c, 0x4a99a025, 0x1d6efe10, 0x1ab93d1d, 0x0ba5a4df, 0xa186f20f, 0x2868f169, 0xdcb7da83, 0x573906fe, 0xa1e2ce9b, 0x4fcd7f52, 0x50115e01, 0xa70683fa, 0xa002b5c4, 0x0de6d027, 0x9af88c27, 0x773f8641, 0xc3604c06, 0x61a806b5, 0xf0177a28, 0xc0f586e0, 0x006058aa, _ 0x30dc7d62, 0x11e69ed7, 0x2338ea63, 0x53c2dd94, 0xc2c21634, 0xbbcbee56, 0x90bcb6de, 0xebfc7da1, 0xce591d76, 0x6f05e409, 0x4b7c0188, 0x39720a3d, 0x7c927c24, 0x86e3725f, 0x724d9db9, 0x1ac15bb4, 0xd39eb8fc, 0xed545578, 0x08fca5b5, 0xd83d7cd3, 0x4dad0fc4, 0x1e50ef5e, 0xb161e6f8, 0xa28514d9, 0x6c51133c, 0x6fd5c7e7, 0x56e14ec4, 0x362abfce, 0xddc6c837, 0xd79a3234, 0x92638212, 0x670efa8e, 0x406000e0] Local $ORIG_S3[256] = [0x3a39ce37, 0xd3faf5cf, 0xabc27737, 0x5ac52d1b, 0x5cb0679e, 0x4fa33742, 0xd3822740, 0x99bc9bbe, 0xd5118e9d, 0xbf0f7315, 0xd62d1c7e, 0xc700c47b, 0xb78c1b6b, 0x21a19045, 0xb26eb1be, 0x6a366eb4, 0x5748ab2f, 0xbc946e79, 0xc6a376d2, 0x6549c2c8, 0x530ff8ee, 0x468dde7d, 0xd5730a1d, 0x4cd04dc6, 0x2939bbdb, 0xa9ba4650, 0xac9526e8, 0xbe5ee304, 0xa1fad5f0, 0x6a2d519a, 0x63ef8ce2, 0x9a86ee22, 0xc089c2b8, 0x43242ef6, 0xa51e03aa, 0x9cf2d0a4, 0x83c061ba, 0x9be96a4d, 0x8fe51550, 0xba645bd6, 0x2826a2f9, 0xa73a3ae1, 0x4ba99586, _ 0xef5562e9, 0xc72fefd3, 0xf752f7da, 0x3f046f69, 0x77fa0a59, 0x80e4a915, 0x87b08601, 0x9b09e6ad, 0x3b3ee593, 0xe990fd5a, 0x9e34d797, 0x2cf0b7d9, 0x022b8b51, 0x96d5ac3a, 0x017da67d, 0xd1cf3ed6, 0x7c7d2d28, 0x1f9f25cf, 0xadf2b89b, 0x5ad6b472, 0x5a88f54c, 0xe029ac71, 0xe019a5e6, 0x47b0acfd, 0xed93fa9b, 0xe8d3c48d, 0x283b57cc, 0xf8d56629, 0x79132e28, 0x785f0191, 0xed756055, 0xf7960e44, 0xe3d35e8c, 0x15056dd4, 0x88f46dba, 0x03a16125, 0x0564f0bd, 0xc3eb9e15, 0x3c9057a2, 0x97271aec, 0xa93a072a, 0x1b3f6d9b, 0x1e6321f5, 0xf59c66fb, 0x26dcf319, _ 0x7533d928, 0xb155fdf5, 0x03563482, 0x8aba3cbb, 0x28517711, 0xc20ad9f8, 0xabcc5167, 0xccad925f, 0x4de81751, 0x3830dc8e, 0x379d5862, 0x9320f991, 0xea7a90c2, 0xfb3e7bce, 0x5121ce64, 0x774fbe32, 0xa8b6e37e, 0xc3293d46, 0x48de5369, 0x6413e680, 0xa2ae0810, 0xdd6db224, 0x69852dfd, 0x09072166, 0xb39a460a, 0x6445c0dd, 0x586cdecf, 0x1c20c8ae, 0x5bbef7dd, 0x1b588d40, 0xccd2017f, 0x6bb4e3bb, 0xdda26a7e, 0x3a59ff45, 0x3e350a44, 0xbcb4cdd5, 0x72eacea8, 0xfa6484bb, 0x8d6612ae, 0xbf3c6f47, 0xd29be463, 0x542f5d9e, 0xaec2771b, 0xf64e6370, 0x740e0d8d, _ 0xe75b1357, 0xf8721671, 0xaf537d5d, 0x4040cb08, 0x4eb4e2cc, 0x34d2466a, 0x0115af84, 0xe1b00428, 0x95983a1d, 0x06b89fb4, 0xce6ea048, 0x6f3f3b82, 0x3520ab82, 0x011a1d4b, 0x277227f8, 0x611560b1, 0xe7933fdc, 0xbb3a792b, 0x344525bd, 0xa08839e1, 0x51ce794b, 0x2f32c9b7, 0xa01fbac9, 0xe01cc87e, 0xbcc7d1f6, 0xcf0111c3, 0xa1e8aac7, 0x1a908749, 0xd44fbd9a, 0xd0dadecb, 0xd50ada38, 0x0339c32a, 0xc6913667, 0x8df9317c, 0xe0b12b4f, 0xf79e59b7, 0x43f5bb3a, 0xf2d519ff, 0x27d9459c, 0xbf97222c, 0x15e6fc2a, 0x0f91fc71, 0x9b941525, 0xfae59361, 0xceb69ceb, _ 0xc2a86459, 0x12baa8d1, 0xb6c1075e, 0xe3056a0c, 0x10d25065, 0xcb03a442, 0xe0ec6e0e, 0x1698db3b, 0x4c98a0be, 0x3278e964, 0x9f1f9532, 0xe0d392df, 0xd3a0342b, 0x8971f21e, 0x1b0a7441, 0x4ba3348c, 0xc5be7120, 0xc37632d8, 0xdf359f8d, 0x9b992f2e, 0xe60b6f47, 0x0fe3f11d, 0xe54cda54, 0x1edad891, 0xce6279cf, 0xcd3e7e6f, 0x1618b166, 0xfd2c1d05, 0x848fd2c5, 0xf6fb2299, 0xf523f357, 0xa6327623, 0x93a83531, 0x56cccd02, 0xacf08162, 0x5a75ebb5, 0x6e163697, 0x88d273cc, 0xde966292, 0x81b949d0, 0x4c50901b, 0x71c65614, 0xe6c6c7bd, 0x327a140a, 0x45e1d006, _ 0xc3f27b9a, 0xc9aa53fd, 0x62a80f00, 0xbb25bfe2, 0x35bdd2f6, 0x71126905, 0xb2040222, 0xb6cbcf7c, 0xcd769c2b, 0x53113ec0, 0x1640e3d3, 0x38abbd60, 0x2547adf0, 0xba38209c, 0xf746ce76, 0x77afa1c5, 0x20756060, 0x85cbfe4e, 0x8ae88dd8, 0x7aaaf9b0, 0x4cf9aa7e, 0x1948c25c, 0x02fb8a8c, 0x01c36ae4, 0xd6ebe1f9, 0x90d4f869, 0xa65cdea0, 0x3f09252d, 0xc208e69f, 0xb74e6132, 0xce77e25b, 0x578fdfe3, 0x3ac372e6] Local $data, $datal, $datar Local $i, $j, $k, $keyLen = StringLen($key) For $j = 0 To 255 $S[0][$j] = $ORIG_S0[$j] Next For $j = 0 To 255 $S[1][$j] = $ORIG_S1[$j] Next For $j = 0 To 255 $S[2][$j] = $ORIG_S2[$j] Next For $j = 0 To 255 $S[3][$j] = $ORIG_S3[$j] Next $j = 0 For $i = 0 To 17 $data = 0x00000000 For $k = 0 To 3 $data = BitOR(BitShift($data, -8), Asc(StringMid($key, $j + 1, 1))) $j += 1 If $j >= $keyLen Then $j = 0 EndIf Next $P[$i] = BitXOR($ORIG_P[$i], $data) Next $datal = 0x00000000 $datar = 0x00000000 For $i = 0 To 17 Step 2 _BlowFish_Save($P, $S, $datal, $datar) $P[$i] = $datal $P[$i + 1] = $datar Next For $i = 0 To 3 For $j = 0 To 255 Step 2 _BlowFish_Save($P, $S, $datal, $datar) $S[$i][$j] = $datal $S[$i][$j + 1] = $datar Next Next Return 0 EndFunc ;_BlowFish_Init Func _BlowFish_Save(ByRef $P, ByRef $S, ByRef $xl, ByRef $xr) ; Encode Each 64 Bit part of Message seperately Local $datal, $datar, $temp, $i $datal = $xl $datar = $xr For $i = 0 To 15 $datal = BitXOR($datal, $P[$i]) $datar = BitXOR($datar, F($S, $datal)) $temp = $datal $datal = $datar $datar = $temp Next $temp = $datal $datal = $datar $datar = $temp $datar = BitXOR($datar, $P[16]) $datal = BitXOR($datal, $P[17]) $xl = $datal $xr = $datar EndFunc ;_BlowFish_Save Func _BlowFish_Decrypt(ByRef $P, ByRef $S, ByRef $xl, ByRef $xr) ; Decode Each 64 Bit part of Message seperately Local $datal, $datar, $temp, $i $datal = $xl $datar = $xr For $i = 17 To 2 Step - 1 $datal = BitXOR($datal, $P[$i]) $datar = BitXOR($datar, F($S, $datal)) $temp = $datal $datal = $datar $datar = $temp Next $temp = $datal $datal = $datar $datar = $temp $datar = BitXOR($datar, $P[1]) $datal = BitXOR($datal, $P[0]) $xl = $datal $xr = $datar EndFunc ;_BlowFish_Decrypt Func F($S, $x) Local $a, $b, $c, $d, $y $d = BitAND($x, 0xFF) $x = BitShift($x, 8) $c = BitAND($x, 0xFF) $x = BitShift($x, 8) $b = BitAND($x, 0xFF) $x = BitShift($x, 8) $a = BitAND($x, 0xFF) $y = $S[0][$a] + $S[1][$b] $y = BitXOR($y, $S[2][$c]) $y += $S[3][$d] Return $y EndFunc ;_F Func _SHA1ForFile($sFile) Local $a_hCall = DllCall("kernel32.dll", "hwnd", "CreateFileW", "wstr", $sFile, "dword", 0x80000000, "dword", 3, "ptr", 0, "dword", 3, "dword", 0, "ptr", 0) If @error Or $a_hCall[0] = -1 Then Return SetError(1, 0, "") EndIf Local $hFile = $a_hCall[0] $a_hCall = DllCall("kernel32.dll", "ptr", "CreateFileMappingW", "hwnd", $hFile, "dword", 0, "dword", 2, "dword", 0, "dword", 0, "ptr", 0) If @error Or Not $a_hCall[0] Then DllCall("kernel32.dll", "int", "CloseHandle", "hwnd", $hFile) Return SetError(2, 0, "") EndIf DllCall("kernel32.dll", "int", "CloseHandle", "hwnd", $hFile) Local $hFileMappingObject = $a_hCall[0] $a_hCall = DllCall("kernel32.dll", "ptr", "MapViewOfFile", "hwnd", $hFileMappingObject, "dword", 4, "dword", 0, "dword", 0, "dword", 0) If @error Or Not $a_hCall[0] Then DllCall("kernel32.dll", "int", "CloseHandle", "hwnd", $hFileMappingObject) Return SetError(3, 0, "") EndIf Local $pFile = $a_hCall[0] Local $iBufferSize = FileGetSize($sFile) Local $a_iCall = DllCall("advapi32.dll", "int", "CryptAcquireContext", "ptr*", 0, "ptr", 0, "ptr", 0, "dword", 1, "dword", 0xF0000000) If @error Or Not $a_iCall[0] Then DllCall("kernel32.dll", "int", "UnmapViewOfFile", "ptr", $pFile) DllCall("kernel32.dll", "int", "CloseHandle", "hwnd", $hFileMappingObject) Return SetError(4, 0, "") EndIf Local $hContext = $a_iCall[1] $a_iCall = DllCall("advapi32.dll", "int", "CryptCreateHash", "ptr", $hContext, "dword", 0x00008004, "ptr", 0, "dword", 0, "ptr*", 0) If @error Or Not $a_iCall[0] Then DllCall("kernel32.dll", "int", "UnmapViewOfFile", "ptr", $pFile) DllCall("kernel32.dll", "int", "CloseHandle", "hwnd", $hFileMappingObject) DllCall("advapi32.dll", "int", "CryptReleaseContext", "ptr", $hContext, "dword", 0) Return SetError(5, 0, "") EndIf Local $hHashSHA1 = $a_iCall[5] $a_iCall = DllCall("advapi32.dll", "int", "CryptHashData", "ptr", $hHashSHA1, "ptr", $pFile, "dword", $iBufferSize, "dword", 0) If @error Or Not $a_iCall[0] Then DllCall("kernel32.dll", "int", "UnmapViewOfFile", "ptr", $pFile) DllCall("kernel32.dll", "int", "CloseHandle", "hwnd", $hFileMappingObject) DllCall("advapi32.dll", "int", "CryptDestroyHash", "ptr", $hHashSHA1) DllCall("advapi32.dll", "int", "CryptReleaseContext", "ptr", $hContext, "dword", 0) Return SetError(6, 0, "") EndIf Local $tOutSHA1 = DllStructCreate("byte[20]") $a_iCall = DllCall("advapi32.dll", "int", "CryptGetHashParam", "ptr", $hHashSHA1, "dword", 2, "ptr", DllStructGetPtr($tOutSHA1), "dword*", 20, "dword", 0) If @error Or Not $a_iCall[0] Then DllCall("kernel32.dll", "int", "UnmapViewOfFile", "ptr", $pFile) DllCall("kernel32.dll", "int", "CloseHandle", "hwnd", $hFileMappingObject) DllCall("advapi32.dll", "int", "CryptDestroyHash", "ptr", $hHashSHA1) DllCall("advapi32.dll", "int", "CryptReleaseContext", "ptr", $hContext, "dword", 0) Return SetError(7, 0, "") EndIf DllCall("kernel32.dll", "int", "UnmapViewOfFile", "ptr", $pFile) DllCall("kernel32.dll", "int", "CloseHandle", "hwnd", $hFileMappingObject) DllCall("advapi32.dll", "int", "CryptDestroyHash", "ptr", $hHashSHA1) Local $sSHA1 = Hex(DllStructGetData($tOutSHA1, 1)) DllCall("advapi32.dll", "int", "CryptReleaseContext", "ptr", $hContext, "dword", 0) Return SetError(0, 0, $sSHA1) EndFunc ;_SHA1ForFile Any comments or suggestions for improvement are welcomed. Tested on Windows 2000 SP4, Windows XP SP3, Windows Vista SP1 (UAC - Disabled). Edited September 28, 2009 by Ghost1987 Link to comment Share on other sites More sharing options...
JRowe Posted September 28, 2009 Share Posted September 28, 2009 (edited) Is RunAssPC related to Anus laptops?:edited for context.: Edited September 28, 2009 by JRowe [center]However, like ninjas, cyber warriors operate in silence.AutoIt Chat Engine (+Chatbot) , Link Grammar for AutoIt , Simple Speech RecognitionArtificial Neural Networks UDF , Bayesian Networks UDF , Pattern Matching UDFTransparent PNG GUI Elements , Au3Irrlicht 2Advanced Mouse Events MonitorGrammar Database GeneratorTransitions & Tweening UDFPoker Hand Evaluator[/center] Link to comment Share on other sites More sharing options...
Ghost1987 Posted September 28, 2009 Author Share Posted September 28, 2009 (edited) Is RunAssPC related to Anus laptops?:-Dhttp://www.robotronic.de/runasspc/Name pronounces like this: runasSpc Edited September 28, 2009 by Ghost1987 Link to comment Share on other sites More sharing options...
sportjohn Posted May 17, 2011 Share Posted May 17, 2011 Great script!! Really want to use it on our netowrk! But are you saying that this is a free alternative to runasspc? Or that you've re-wrote runasspc in AutoIT, so your script abides by runaspc's license and is only "free for private use"? Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now