- Сообщения
- 8,673
- Репутация
- 2,486
dwerf как то привёл интересный пример хранения зашифрованного пароля в теле скрипта:
Однако данный метод требует ввода пользователя, без этого хранить пароль нет смысла, т.к после декомпиляций его сможет получить любой(?) желающий.
Я по наивности думал, что метод приведённый выше, позволяет хранить пароль в скрипте, даже для такой задачи как отправка письма по почте. Вот так я думал оно будет работать:
но естественно для этого требуется $sPassInput, которого у нас нет без ввода пользователя :(
Т.ч разыскивается метод хранения пароля внутри скрипта :beer:
Код:
#include <String.au3>
;Получаем зашифрованный пароль
;~ ClipPut(_StringEncrypt(1, "qwerty", "qwerty", 2))
$sCryptedPass = 'E3A867A30EFC51508A2B2290A4CBDC754A63F613FB9C7BC5'
$sPassInput = InputBox('Password', 'Enter your password (qwerty):', '', '*')
If @error Then Exit
If _StringEncrypt(0, $sCryptedPass, $sPassInput, 2) = $sPassInput Then
MsgBox(64, 'OK', '"' & $sPassInput & '" accepted.')
Else
MsgBox(48, 'Failed', '"' & $sPassInput & '" denied.')
EndIf
Однако данный метод требует ввода пользователя, без этого хранить пароль нет смысла, т.к после декомпиляций его сможет получить любой(?) желающий.
Я по наивности думал, что метод приведённый выше, позволяет хранить пароль в скрипте, даже для такой задачи как отправка письма по почте. Вот так я думал оно будет работать:
Код:
#include <String.au3>
#include <File.au3>
Global $aCOMError[2], $oCOMError = ObjEvent("AutoIt.Error", "__COMErrFunc")
If MsgBox(52, 'Mail Sender', 'Send mail?') = 6 Then
$s_SmtpServer = "smtp.gmail.com"
$s_FromName = "Tester"
$s_FromAddress = "[email protected]"
$s_ToAddress = "[email protected]"
$s_Subject = "Test mail"
$s_Body = "Hello from test"
$s_AttachFiles = ""
$s_CcAddress = ""
$s_BccAddress = ""
$s_Username = "mymail"
$s_Password = _StringEncrypt(0, "E3A867A30EFC51508A2B2290A4CBDC754A63F613FB9C7BC5", $sPassInput, 2) ;qwerty
$IPPort = 465
$ssl = 1
_INetSmtpMailCom($s_SmtpServer, $s_FromName, $s_FromAddress, $s_ToAddress, _
$s_Subject, $s_Body, $s_AttachFiles, $s_CcAddress, $s_BccAddress, $s_Username, $s_Password, $IPPort, $ssl)
MsgBox(64, 'Mail Sender', 'Mail sent.', 5)
EndIf
Func _INetSmtpMailCom($s_SmtpServer, $s_FromName, $s_FromAddress, $s_ToAddress, $s_Subject = "", $s_Body = "", $s_AttachFiles = "", $s_CcAddress = "", $s_BccAddress = "", $s_Username = "", $s_Password = "", $IPPort = 25, $ssl = 0)
Local $objEmail = ObjCreate("CDO.Message")
If Not IsObj($objEmail) Then Return SetError(1, 0, 0)
$objEmail.From = '"' & $s_FromName & '" <' & $s_FromAddress & '>'
$objEmail.To = $s_ToAddress
Local $i_Error = 0
Local $i_Error_desciption = ""
If $s_CcAddress <> "" Then $objEmail.Cc = $s_CcAddress
If $s_BccAddress <> "" Then $objEmail.Bcc = $s_BccAddress
$objEmail.Subject = $s_Subject
If StringInStr($s_Body, "<") And StringInStr($s_Body, ">") Then
$objEmail.HTMLBody = $s_Body
Else
$objEmail.Textbody = $s_Body & @CRLF
EndIf
If $s_AttachFiles <> "" Then
Local $S_Files2Attach = StringSplit($s_AttachFiles, ";")
For $x = 1 To $S_Files2Attach[0]
$S_Files2Attach[$x] = _PathFull($S_Files2Attach[$x])
If FileExists($S_Files2Attach[$x]) Then
$objEmail.AddAttachment($S_Files2Attach[$x])
Else
$i_Error_desciption = $i_Error_desciption & @LF & 'File not found to attach: ' & $S_Files2Attach[$x]
Return SetError(1, 0, 0)
EndIf
Next
EndIf
$objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
$objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = $s_SmtpServer
$objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = $IPPort
If $s_Username <> "" Then
$objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
$objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = $s_Username
$objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = $s_Password
EndIf
If $ssl Then
$objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
EndIf
$objEmail.Configuration.Fields.Update
$objEmail.Send
If @error Then Return SetError(2, 0, $aCOMError[1])
EndFunc
Func __COMErrFunc()
$HexNumber = Hex($oCOMError.number, 8)
$aCOMError[0] = $HexNumber
$aCOMError[1] = StringStripWS($oCOMError.description, 3)
ConsoleWrite("### COM Error ! Number: " & $HexNumber & " ScriptLine: " & $oCOMError.scriptline & " Description:" & $aCOMError[1] & @LF)
SetError(1)
EndFunc
но естественно для этого требуется $sPassInput, которого у нас нет без ввода пользователя :(
Т.ч разыскивается метод хранения пароля внутри скрипта :beer: