我想通过一个 bat 文件将文件发送到我的 Gmail 帐户,并在该 bat 文件中加密我的电子邮件信息,这样如果有人打开该 bat 文件,他们就无法从中获取电子邮件信息。
我的脚本
我正在使用这个动态脚本批处理脚本,根据我从“使用 bat 文件将文件发送到电子邮件地址而不公开电子邮件信息?“帖子。目前这个脚本运行良好,但我必须将敏感值硬编码到其中,这是我尽可能避免的。
@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 = "[email protected]" >> "%PSScript%"
ECHO $EmailFrom = "[email protected]" >> "%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
我希望能够使用加密值而不是某些变量的实际值,这样当运行此脚本时,如果有人看到它,他们就无法轻易看到那些敏感值。
答案1
使用 PowerShell 混淆敏感字符串以通过批处理脚本发送电子邮件
您可以使用在“使用 Base64 编码通过 PowerShell 进行简单混淆”发布到...
对您想要混淆的敏感字符串进行编码,使那些没有大量技术知识的人无法轻易破译,因为他们可能会在运行时看到或复制脚本逻辑
设置进程以清理并删除批处理脚本和动态生成的 PowerShell 脚本,在执行后运行必要的逻辑
获取编码字符串值
无论您想要混淆什么值,您都需要按照以下逻辑将该值放在双引号中$SensitiveString
,然后执行$OString
以获取编码值。
这些将是你硬编码到下面的值批处理脚本而不是使用纯文本格式的敏感值本身。
$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
您可以使用现有的批处理脚本并进行一些调整,以便可以在批处理脚本逻辑中传递或设置编码值,并让 PowerShell 脚本中的其他逻辑解码这些值以供使用。完成后,PowerShell 脚本和批处理脚本将被删除。
批处理脚本
@ECHO OFF
:: -- Set senvitive values and file attachment path
SET "GmailAccount=RwBtAGEAaQBsAEEAYwBjAG8AdQBuAHQAVQBzAGUAcgBuAGEAbQBlAF8AXwBCAGkAdABjAGgA"
SET "GmailPassword=QQBSAGUAYQBsAEQAdQBtAGIAQQBzAHMAUABhAHMAcwB3AG8AcgBkAA=="
SET "Attachment=<FullAttachmentPath>"
:: -- Set other email values
SET "[email protected]"
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 = "[email protected]" >> "%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