2017-03-04 10 views
6

Base-64 문자열로 인코딩하고 나중에 Powershell을 사용하여 Base64 문자열의 .exe 파일로 디코딩하는 .NET exe 파일이 있습니다. ..EXE를 Base64로 인 코드/디코드

내가 지금까지 가지고있는 은 .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) 
+1

"hello"와 같은 것을 인코딩 할 수 있는지 확인하기 위해 바이트 스트림을 사용하는 인코딩 및 디코딩 기능을 사용하여 테스트 케이스를 작성하는 것이 좋습니다. 또한 Get-Content에서 Raw 스위치를 전달하려고합니다. IDE 또는 VSCode에서 테스트하면 변수를보고 디버그 할 수 있습니다. –

답변

14

문제가 발생되었다 : -raw없이

  1. Get-Content는 Fi를 분할 따라서 코드
  2. Text.Encoding 파괴 라인의 배열로 제작 텍스트 따라서
  3. Out-File가 텍스트 데이터가 아닌 이진 코드 정확한 접근법 IO를 사용하는

위한 코드를 파괴로 이진 코드를 해석한다. 파일 ReadAllBytes :

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

WriteAllBytes는 디코딩 :

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

감사합니다. 나는 오늘 이것을 시험해보고 결과를보고 할 것이다. – schizoid04

+0

명확히하기 위해, 내가 변환 한 후에 위에서 언급 한 $ base64String에서 out-File을 사용할 수 있습니까? – schizoid04

+0

이것은 마치 마법처럼 작용했습니다. 고마워요, 친절하시기 바랍니다 :) – schizoid04

7

비슷한 작업을 수행하려는 사람들을위한 대안을 추가하십시오. Windows는 파일을 base64로 인코딩하고 디코딩 할 수있는 certutil.exe (인증서를 조작하는 도구)을 제공합니다.

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

그래서 인코딩을 위해 [인코딩 할 파일]이고 [결과 base64를위한 파일]이라고 가정합니다. (구문에 관해서는 해당 명령을 사용합니까?) – schizoid04

+0

이 버전과 함께 제공되는 버전을 알고 있습니까? (모두?)이 도구가 포함되어 있지 않은 워크 스테이션 (비 서버 OS)의 최신 버전 (7 이상)이 있습니까? 이 솔루션은 최종 사용자 워크 스테이션에서 실행되는 ITSM 도구에 의해 실행됩니다. – schizoid04

+0

나는 현재 사용되는 모든 Windows 버전에이 도구가 있다고 생각합니다. 그러나 확실하게 알고 싶다면 자신의 연구를 수행하십시오. – Swonkie