PowerShell의 바이트 배열

Salman Mehmood 2023년6월20일
  1. PowerShell에서 데이터를 바이트 배열로 변환
  2. PowerShell 5+에서 데이터를 바이트 배열로 변환
  3. PowerShell 7+에서 데이터를 바이트 배열로 변환
  4. PowerShell에서 바이트 배열을 문자열로 변환
  5. PowerShell에서 문자열을 바이트 배열로 변환
PowerShell의 바이트 배열

이 문서는 PowerShell 스크립팅 API를 사용하여 다양한 형태로 존재하는 데이터를 바이트 배열로 변환하는 방법을 보여 주는 것을 목표로 합니다.

PowerShell에서 데이터를 바이트 배열로 변환

작업을 자동화하고 데이터를 처리하는 동안 유용한 정보를 추출하거나 의미 있는 방식으로 데이터를 수정하기 위해 데이터를 특정 방식으로 처리해야 할 수 있습니다. PowerShell에서 이러한 데이터를 처리하면 특히 다른 데이터 유형에서 처리하기가 불편할 수 있습니다.

처리를 더 쉽게 하거나 처리 계산 수를 줄이려면 경우에 따라 데이터를 바이트 배열로 변환한 다음 원래 데이터 대신 해당 배열에 대해 작업을 수행하는 것이 이상적일 수 있습니다.

다음 코드를 고려하십시오.

$data = Get-Content "a.exe"

Get-Item "a.exe" | Format-List -Property * -Force
Write-Host "File Datatype: "$data.GetType().Name

이는 다음과 같은 결과를 제공합니다.

< Output redacted >
.
.
.
.
BaseName            : a
Target              :
LinkType            :
Length              : 400644
.
.
.
Extension           : .exe
Name                : a.exe
Exists              : True
.
.
.
.
.
Attributes          : Archive
File Datatype:  Object[]

위 출력에서 우리가 연 파일은 Windows 실행 파일(exe)입니다. Get-ItemFormat-List cmdlet을 사용하여 속성을 살펴본 후 파일, 특히 크기에 대해 의미 있는 통찰력을 얻을 수 있으며 이는 반복 중에 매우 유용할 수 있습니다.

이 상황의 불리한 측면 중 하나는 Get-Content cmdlet을 사용하여 검색된 파일 데이터가 Object[]가 반환된다는 것입니다.

시나리오 종속 작업을 위해 이를 Byte[]로 변환하는 방법을 살펴보겠습니다.

PowerShell 5+에서 데이터를 바이트 배열로 변환

다음 코드를 고려하십시오.

$file = "a.exe"

[byte[]]$data = Get-Content $file -Encoding Byte
Write-Host "File Datatype: "$data.GetType().Name

for($i=0; $i -lt 10; $i++) { Write-Host $data[$i] }

이는 다음과 같은 결과를 제공합니다.

File Datatype:  Byte[]
Byte No 0 :  77
Byte No 1 :  90
Byte No 2 :  144
Byte No 3 :  0
Byte No 4 :  3
Byte No 5 :  0
Byte No 6 :  0
Byte No 7 :  0
Byte No 8 :  4
Byte No 9 :  0
Byte No 10 :  0

유형 캐스팅 및 -Encoding 매개변수를 사용하면 파일을 바이트 배열로 직접 읽을 수 있습니다. GetType() 메서드를 사용하고 Name이라는 속성에 액세스하여 결과가 실제로 바이트 배열인지 확인할 수 있습니다.

데이터가 실제로 올바르게 변환되었는지 추가로 확인하기 위해 작은 for 루프를 작성하고 파일의 일부 바이트를 인쇄할 수 있습니다.

PowerShell 7+에서 데이터를 바이트 배열로 변환

다음 코드를 고려하십시오.

[byte[]]$data = Get-Content "a.exe" -AsByteStream

Write-Host $data.GetType().Name

이는 다음과 같은 결과를 제공합니다.

textByte[]

대부분의 구문은 버전 간에 동일합니다. 유일한 차이점은 -Encoding Byte-AsByteStream으로 대체되었다는 것입니다.

PowerShell에서 바이트 배열을 문자열로 변환

주어진 바이트 배열을 문자열로 변환하는 것은 쉽습니다. 다음 코드를 고려하십시오.

$array = @(0x54,0x68,0x65,0x20,0x6f,0x62,0x6a,0x65,0x63,0x74,0x20,0x6f,0x66,0x20,0x6c,0x69,0x66,0x65,0x20,0x69,0x73,0x20,0x6e,0x6f,0x74,0x20,0x74,0x6f,0x20,0x62,0x65,0x20,0x6f,0x6e,0x20,0x74,0x68,0x65,0x20,0x73,0x69,0x64,0x65,0x20,0x6f,0x66,0x20,0x74,0x68,0x65,0x20,0x6d,0x61,0x6a,0x6f,0x72,0x69,0x74,0x79,0x2c,0x20,0x62,0x75,0x74,0x20,0x74,0x6f,0x20,0x65,0x73,0x63,0x61,0x70,0x65,0x20,0x66,0x69,0x6e,0x64,0x69,0x6e,0x67,0x20,0x6f,0x6e,0x65,0x73,0x65,0x6c,0x66,0x20,0x69,0x6e,0x20,0x74,0x68,0x65,0x20,0x72,0x61,0x6e,0x6b,0x73,0x20,0x6f,0x66,0x20,0x74,0x68,0x65,0x20,0x69,0x6e,0x73,0x61,0x6e,0x65,0x2e)

$string = [System.Text.Encoding]::UTF8.GetString($array)
$string

그러면 다음과 같은 결과가 나타납니다.

The object of life is not to be on the side of the majority but to escape finding oneself in the ranks of the insane.

UTF8.GetString 메서드를 사용하여 UTF8로 인코딩된 바이트 배열을 문자열 표현으로 다시 변환할 수 있습니다. 다른 인코딩(예: ASCII)에서 이 방법을 사용하면 비정상적인 결과가 발생할 수 있으므로 텍스트 인코딩에 주의하십시오.

PowerShell에서 문자열을 바이트 배열로 변환

바이트 배열을 문자열 표현으로 변환하는 방법과 마찬가지로 문자열도 바이트 표현으로 변환할 수 있습니다.

다음 코드를 고려하십시오.

$string = "Never esteem anything as of advantage to you that will make you break your word or lose your self-respect."

$bytes = [System.Text.Encoding]::Unicode.GetBytes($string)
Write-Host "First 10 Bytes of String are: "

for($i=0; $i -lt 10; $i++) { Write-Host $bytes[$i] }

결과는 다음과 같습니다.

First 10 Bytes of String are:
78
0
101
0
118
0
101
0
114
0

유니코드 문자열의 바이트를 가져오기 위해 이 특정 시나리오에서 Unicode.GetBytes를 사용할 수 있습니다. 문자열이 유니코드인지 확인하십시오. 그렇지 않으면 변환으로 인해 중요한 데이터가 손실될 수 있습니다.

Salman Mehmood avatar Salman Mehmood avatar

Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.

LinkedIn

관련 문장 - PowerShell Array