Den Kennwortwert verschlüsseln, der zum Senden einer E-Mail über eine bat-Datei verwendet wird?

955
mina nageh

Ich möchte eine Datei über eine BAT-Datei an mein Gmail-Konto senden und meine E-Mail-Informationen in dieser BAT-Datei verschlüsseln, sodass jemand, der die BAT-Datei öffnet, die E-Mail-Informationen nicht abrufen kann.

Mein Skript

Ich verwende dieses dynamische Skript "Batch Script" für die Hilfe, die ich aus dem Beitrag " Senden einer Datei an eine E-Mail-Adresse mithilfe einer bat-Datei erhalten hat, ohne die E-Mail-Informationen anzuzeigen ". Im Moment funktioniert dieses Skript gut, aber ich muss empfindliche Werte hart in das Skript schreiben, was ich möglichst nicht meide.

@ECHO OFF  SET GmailAccount=<GmailAccountName> SET GmailPassword=<GmailPassword> SET Attachment=<FullAttachmentPath>  CALL :PowerShell CD /D "%PowerShellDir%" Powershell -ExecutionPolicy Bypass -Command "& '%PSScript%' '%GmailAccount%' '%GmailPassword%' '%Attachment%'" IF EXIST "%~FN0" DEL /Q /F "%~FN0" EXIT  :PowerShell SET PowerShellDir=C:\Windows\System32\WindowsPowerShell\v1.0 SET PSScript=%temp%\~tmpSendeMail.ps1 IF EXIST "%PSScript%" DEL /Q /F "%PSScript%"  ECHO $Username = $args[0]>> "%PSScript%" ECHO $EmailPassword = $args[1]>> "%PSScript%" ECHO $Attachment = $args[2]>> "%PSScript%" ECHO >> "%PSScript%" ECHO $Username = $Username >> "%PSScript%" ECHO $EmailTo = "EmailAddress@domain.com" >> "%PSScript%" ECHO $EmailFrom = "noreply@Whatever.notify" >> "%PSScript%" ECHO $Subject = "Email Subject" >> "%PSScript%" ECHO $Body = "Email Body" >> "%PSScript%" ECHO $SMTPServer = "smtp.gmail.com" >> "%PSScript%" ECHO $SMTPMessage = New-Object System.Net.Mail.MailMessage($EmailFrom, $EmailTo, $Subject, $Body) >> "%PSScript%" ECHO $Attachment = New-Object System.Net.Mail.Attachment($Attachment) >> "%PSScript%" ECHO $SMTPMessage.Attachments.Add($Attachment) >> "%PSScript%" ECHO $SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587) >> "%PSScript%" ECHO $SMTPClient.EnableSsl = $true >> "%PSScript%" ECHO $SMTPClient.Credentials = New-Object System.Net.NetworkCredential($Username, $EmailPassword) >> "%PSScript%" ECHO $SMTPClient.Send($SMTPMessage) >> "%PSScript%" GOTO :EOF 

Ich möchte in der Lage sein, verschlüsselte Werte anstelle der tatsächlichen Werte für bestimmte Variablen zu verwenden. Wenn dieses Skript ausgeführt wird, wenn jemand es sieht, können diese sensiblen Werte nicht ohne weiteres erkannt werden.

0
Lassen Sie mich wissen, ob ich Ihnen weiterhin dabei helfen kann und es vollständig gelöst werden kann. Pimp Juice IT vor 5 Jahren 3

1 Antwort auf die Frage

1
Pimp Juice IT

Verschleiern Sie empfindliche Zeichenfolgen mit PowerShell, um eine E-Mail über ein Batch-Skript zu senden

Sie können eine strategische Variante des PowerShell-Codes verwenden, der im Beitrag "Einfache Verschleierung mit PowerShell unter Verwendung von Base64 Encoding" erwähnt wird, um ...

  1. Kodieren Sie die sensiblen Zeichen, die verschleiert werden sollen, damit die nicht so leicht entschlüsselbaren für jeden ohne viel technisches Know-how verfügbar sind, das möglicherweise die Skriptlogik zur Laufzeit sehen oder kopieren kann

  2. Richten Sie den Bereinigungs- und Bereinigungsprozess des Batch-Skripts und des dynamisch generierten PowerShell-Skripts ein, nachdem beide ausgeführt wurden und die erforderliche Logik ausführen

Codierte Zeichenkettenwerte abrufen

Welchen Wert Sie auch verschleiern möchten, Sie werden diesen Wert in doppelte Anführungszeichen setzen $SensitiveStringund dann ausführen $OString, um den kodierten Wert zu erhalten.

Hierbei handelt es sich um die Werte, die Sie in das unten stehende Batch-Skript hartcodieren, anstatt die sensiblen Werte selbst in einem Nur-Text-Format zu verwenden.

$SensitiveString = "ARealDumbPassword" ## -- Put sensitive string value to encode here $OString = [Convert]::ToBase64String([System.Text.Encoding]::Unicode.GetBytes($SensitiveString)) $ConvertedString = [System.Text.Encoding]::Unicode.GetString([System.Convert]::FromBase64String($OString)) $OString ## -- Get encoded string value 

Sie können das vorhandene Batch-Skript mit wenigen Anpassungen verwenden, sodass die codierten Werte in die Batch-Skript-Logik übergeben oder festgelegt werden können und über die andere Logik im PowerShell-Skript verfügen, um diese Werte für die Verwendung zu decodieren. Sobald dies geschehen ist, werden das PowerShell-Skript und das Batch-Skript gelöscht.

Batch-Skript

@ECHO OFF  :: -- Set senvitive values and file attachment path SET "GmailAccount=RwBtAGEAaQBsAEEAYwBjAG8AdQBuAHQAVQBzAGUAcgBuAGEAbQBlAF8AXwBCAGkAdABjAGgA" SET "GmailPassword=QQBSAGUAYQBsAEQAdQBtAGIAQQBzAHMAUABhAHMAcwB3AG8AcgBkAA==" SET "Attachment=<FullAttachmentPath>"  :: -- Set other email values SET "EmailTo=Bob@BobMail.com" SET "EmailSubject=This is the subject of the email" SET "EmailBody=This is the body of the email"  CALL :PowerShell CD /D "%PowerShellDir%" Powershell -ExecutionPolicy Bypass -Command "& '%PSScript%' '%GmailAccount%' '%GmailPassword%' '%Attachment%'" IF EXIST "%PSScript%" DEL /Q /F "%PSScript%" IF EXIST "%~FN0" DEL /Q /F "%~FN0" IF EXIST "%PSScript%" DEL /Q /F "%PSScript%" EXIT  :PowerShell SET PowerShellDir=C:\Windows\System32\WindowsPowerShell\v1.0 SET PSScript=%temp%\~tmpSendeMail.ps1 IF EXIST "%PSScript%" DEL /Q /F "%PSScript%"  ECHO $Username = $args[0] >> "%PSScript%" ECHO $Username = [System.Text.Encoding]::Unicode.GetString([System.Convert]::FromBase64String($Username)) >> "%PSScript%" ECHO $EmailPassword = $args[1] >> "%PSScript%" ECHO $EmailPassword = [System.Text.Encoding]::Unicode.GetString([System.Convert]::FromBase64String($EmailPassword))>> "%PSScript%" ECHO $Attachment = $args[2] >> "%PSScript%" ECHO $Attachment = [System.Text.Encoding]::Unicode.GetString([System.Convert]::FromBase64String($Attachment)) >> "%PSScript%" ECHO >> "%PSScript%" ECHO $Username = $Username >> "%PSScript%" ECHO $EmailTo = "%EmailTo%" >> "%PSScript%" ECHO $EmailFrom = "noreply@Whatever.notify" >> "%PSScript%" ECHO $Subject = "%EmailSubject%" >> "%PSScript%" ECHO $Body = "%EmailBody%" >> "%PSScript%" ECHO $SMTPServer = "smtp.gmail.com" >> "%PSScript%" ECHO $SMTPMessage = New-Object System.Net.Mail.MailMessage($EmailFrom, $EmailTo, $Subject, $Body) >> "%PSScript%" ECHO $Attachment = New-Object System.Net.Mail.Attachment($Attachment) >> "%PSScript%" ECHO $SMTPMessage.Attachments.Add($Attachment) >> "%PSScript%" ECHO $SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587) >> "%PSScript%" ECHO $SMTPClient.EnableSsl = $true >> "%PSScript%" ECHO $SMTPClient.Credentials = New-Object System.Net.NetworkCredential($Username, $EmailPassword) >> "%PSScript%" ECHO $SMTPClient.Send($SMTPMessage) >> "%PSScript%" GOTO :EOF 

Unterstützende Ressourcen