1 Answers
Best Answer
PowerShell本身是支持base64格式的:
我们可以通过下面的函数,将一个PowerShell脚本文件转换成bat批处理文件。支持双击运行:
function Encrypt-Script{ param( [system.io.fileinfo]$File ) if($File.Exists){ $fileContent = Get-Content $File -Raw $bytes = [System.Text.Encoding]::Unicode.GetBytes($fileContent) $encodedCommand = [Convert]::ToBase64String($bytes) $batFile=$File.FullName+".bat" "call $PSHOME\powershell.exe -encodedCommand `"$encodedCommand`"" | Out-File $batFile -Encoding ascii Write-Host "加密的脚本已保存至 $batFile" } } Encrypt-Script -File 'E:\ps\WorkingHours.ps1'
函数允许后会在脚本的同一目录生成一个E:\ps\WorkingHours.ps1.bat 双击运行即可。
bat文件的里面的内容大概类似这样:
call C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -encodedCommand "IwC/i+6VaAB0AHQAcAA6AC8ALwBoAHIAaQBuAHQALgBzAGgALgBjAHQAc*******AA=="
解密的脚本可参考:
function Decrypt-Script { param([system.io.fileinfo]$File) $body = Invoke-Expression ((Get-Content $File.FullName -Raw ) -split ' ' | select -Last 1) $byte = [Convert]::FromBase64CharArray($body,0,$body.Length) $script = [System.Text.Encoding]::Unicode.GetString($byte) $psFile = $File.FullName + ".ps1" $script | Out-File $psFile Write-Host "解密的脚本已经保存到 $psFile" } Decrypt-Script -File E:\ps\WorkingHours.ps1.bat
不错奥
这个可以编写程序解密这个bat批处理文件吗?
已在原答案上更新了。
@Mooser Lee 请问该脚本加密是不是有长度限制?当我ps1中较多的demo时,它生成的bat文件不会生效。