인코딩 / 디코딩.EXE를 베이스64로
저는.NETexe 파일을 Base-64 문자열로 인코딩한 다음 나중에 Powershell을 사용하여 Base64 문자열에서 .exe 파일로 디코딩합니다.
지금까지 .exe 파일을 생성한 것은 실행할 수 있는 응용 프로그램으로 윈도우에 인식할 수 없고 항상 인코딩 스크립트에 전달하는 파일과 길이가 다릅니다.
제가 여기서 잘못된 인코딩을 사용하고 있는 것 같은데 잘 모르겠습니다.
스크립트 인코딩:
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 )
문제의 원인은 다음과 같습니다.
Get-Content
없이.-raw
파일을 줄 배열로 분할하여 코드를 파괴합니다.Text.Encoding
이진 코드를 텍스트로 해석하여 코드를 파괴합니다.Out-File
이진 코드가 아닌 텍스트 데이터용입니다.
올바른 접근법은 IO를 사용하는 것입니다.파일 읽기모든 바이트:
$base64string = [Convert]::ToBase64String([IO.File]::ReadAllBytes($FileName))
해독할 모든 바이트 기록:
[IO.File]::WriteAllBytes($FileName, [Convert]::FromBase64String($base64string))
비슷한 일을 하고 싶어하는 사람들을 위해 대안을 추가하는 것입니다.윈도우는 다음과 함께 제공됩니다.certutil.exe
(인증서를 조작하는 도구) 파일을 64로 인코딩하고 디코딩할 수 있습니다.
certutil -encode test.exe test.txt
certutil -decode test.txt test.exe
이것은 Swonkie의 순수한 PowerShell 버전의 답변으로, 유틸리티에 액세스할 수 있는 경우에는 잘 작동하지만 PowerShell 답변이 아닙니다. 이것이 제가 필요로 했던 것입니다.
$SourceFile = "C:\Src\OriginalBinaryFile.dll"
$B64File = "C:\Src\DllAsB64.txt"
$Reconstituted = "C:\Src\ReConstituted.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를 특정 줄로 만든 경우 이 줄로 래핑됩니다.
------- 인증서 시작-------
-----------------------------
위의 PowerShell 명령은 이러한 라인을 제거한 후 디코딩합니다.Certutil은 이들을 무시하므로 자체 출력 또는 PowerShell 출력을 디코딩합니다.
언급URL : https://stackoverflow.com/questions/42592518/encode-decode-exe-into-base64
'programing' 카테고리의 다른 글
SELECT에 sql%rowcount를 사용할 수 있습니까? (0) | 2023.09.20 |
---|---|
특정 쿠폰을 사용하는 WooCommerce 주문 목록을 검색하는 방법은? (0) | 2023.09.20 |
C 프로그램을 최적화하기 위해 어떤 코딩 기법을 사용합니까? (0) | 2023.09.20 |
현재 선택한 항목을 보존하면서 HTML 선택 옵션을 값별로 정렬하는 가장 효율적인 방법은 무엇입니까? (0) | 2023.09.20 |
자바 프로젝트:ApplicationContext를 로드하지 못했습니다. (0) | 2023.09.20 |