将.EXE编码/解码为Base64

schizoid04:

我有一个.NET exe文件,我想将其编码为Base-64字符串,然后在以后使用Powershell从Base64字符串解码为.exe文件。

到目前为止,我已经生成了一个.exe文件,但是Windows无法识别该文件为可以运行的应用程序,并且其长度始终与传递给编码脚本的文件长度不同。

我想我可能在这里使用了错误的编码,但是我不确定。

编码脚本:

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 )
wOxxOm:

该问题是由以下原因引起的:

  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))

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章