分享

如何给PowerShell脚本加密

 os2jkyaa51x2ib 2018-06-24

PowerShell本身是支持base64格式的:
我们可以通过下面的函数,将一个PowerShell脚本文件转换成bat批处理文件。支持双击运行:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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文件的里面的内容大概类似这样:

1
call C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -encodedCommand "IwC/i+6VaAB0AHQAcAA6AC8ALwBoAHIAaQBuAHQALgBzAGgALgBjAHQAc*******AA=="

解密的脚本可参考:

1
2
3
4
5
6
7
8
9
10
11
12
13
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

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多