Encode / Decode .EXE into Base64



我有一个.NET EXE文件,我想将其编码为基本-64字符串,然后在以后的点上解码为从base64字符串的.exe文件,并使用powershell。

我到目前为止所拥有的生成了.exe文件,但是,该文件不可识别为可以运行的应用程序,并且与我''的文件总是不同的长度m传递到编码脚本。

我认为我可能在这里使用错误的编码,但我不确定。

编码脚本:

Function Get-FileName($initialDirectory)
{   
 [System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms") | Out-Null
$OpenFileDialog = New-Object System.Windows.Forms.OpenFileDialog
$OpenFileDialog.initialDirectory = $initialDirectory
$OpenFileDialog.filter = "All files (*.*)| *.*"
$OpenFileDialog.ShowDialog() | Out-Null
$FileName = $OpenFileDialog.filename
$FileName
} #end function Get-FileName
$FileName = Get-FileName
$Data = get-content $FileName
$Bytes = [System.Text.Encoding]::Unicode.GetBytes($Data)
$EncodedData = [Convert]::ToBase64String($Bytes)

解码脚本:

$Data = get-content $FileName
$Bytes = [System.Text.Encoding]::UTF8.GetBytes($Data)
$EncodedData = [System.Text.Encoding]::Unicode.GetString([System.Convert]::FromBase64String($Bytes))
$EncodedData | Out-File ( $FileName )

问题是由:

引起的
  1. Get-Content不用-raw将文件拆分为一系列行,从而破坏了代码
  2. Text.Encoding将二进制代码解释为文本,从而破坏了代码
  3. Out-File用于文本数据,而不是二进制代码

正确的方法是使用io.file readallBytes:

$base64string = [Convert]::ToBase64String([IO.File]::ReadAllBytes($FileName))

和writeallbytes解码:

[IO.File]::WriteAllBytes($FileName, [Convert]::FromBase64String($base64string))

只是为希望执行类似任务的人添加替代方案:Windows带有certutil.exe(可以操纵证书的工具),该工具可以base64编码和解码文件。

certutil -encode test.exe test.txt
certutil -decode test.txt test.exe

这是Swonkie答案的纯Powershell版本,尽管您可以访问该实用程序,但它不是PowerShell的答案,但我需要的是我所需要的。

$SourceFile    = "C:SrcOriginalBinaryFile.dll"
$B64File       = "C:SrcDllAsB64.txt"
$Reconstituted = "C:SrcReConstituted.dll"
[IO.File]::WriteAllBytes($B64File,[char[]][Convert]::ToBase64String([IO.File]::ReadAllBytes($SourceFile)))
[IO.File]::WriteAllBytes($Reconstituted, [Convert]::FromBase64String([char[]][IO.File]::ReadAllBytes($B64File)))

作为旁注。如果dllasb64.txt是由certutil创建的,则将由这些行包裹。

------开始证书-----

-----结束证书------

删除这些行后,上面的powershell命令将解码它。CERTUTIL忽略它们,因此它将解码其自己的输出或PowerShell输出。

最新更新