Шифрование значения пароля, используемого для отправки электронной почты через файл bat?

591
mina nageh

Я хочу отправить файл в свою учетную запись Gmail через файл bat и зашифровать информацию о моей электронной почте в этом файле 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 = "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 

Я хотел бы иметь возможность использовать зашифрованные значения, а не фактические значения для определенных переменных, и поэтому, когда этот скрипт запускается, если кто-то его видит, он не может легко увидеть эти конфиденциальные значения.

0
Дайте мне знать, если я смогу продолжать помогать вам с этим и полностью решить его. Pimp Juice IT 5 лет назад 0

1 ответ на вопрос

1
Pimp Juice IT

Обфускация чувствительных строк с помощью PowerShell для отправки электронного письма с помощью пакетного сценария

Вы можете использовать стратегический вариант кода PowerShell, упомянутый в публикации «Простое запутывание с помощью PowerShell с использованием кодировки Base64», чтобы ...

  1. Кодируйте чувствительные строки, которые вы хотите замаскировать, чтобы те, которые не так легко расшифровать, никому без большого технического ноу-хау, которое могло бы потенциально видеть или копировать логику скрипта во время выполнения

  2. Настройте процесс для очистки и удаления пакетного сценария и динамически генерируемого сценария 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 

enter image description here

Вы можете использовать существующий пакетный сценарий с некоторыми корректировками, чтобы закодированные значения можно было передавать или устанавливать в логике пакетного сценария и использовать другую логику в сценарии 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 "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 

Вспомогательные ресурсы