본문 바로가기

취약점 분석/SEH Unicode

ascii to unicode 변환 (codepage별 정리)

반응형

Ascii to Unicode 변환 (Codepage 별로 정리)

많은 사람들이 ascii에 그냥 00붙는 거 아니냐? 하곤 한다.

- ex) 0x01   --> 0x01 0x00

- ex) 0x0a  --> 0x0a 0x00

절반만 맞다.

 

int MultiByteToWideChar(
   UINT CodePage,   --- 어떤 unicode로 변환할래?
   DWORD dwFlags,
   LPCSTR lpMultiByteStr,  --- 변환 할 문자열이 담긴 곳
   int cbMultiByte,
   LPWSTR lpWideCharStr,  --- 변환 결과 문자열이 담길 곳
   int cchWideChar
);

ascii -> unicode로 변환은 MultiByteToWideChar 함수를 통하는데,

여기서 CodePage에 따라 어떤 유니코드로 변환될 지가 결정된다.

 

즉, CodePage 값에 따라 Ascii -> Unicode 변환 결과가 달라진다는 말이다.

CodePage 인자만 별도로 나열해 보자.

Value Description
CP_ACP ANSI code page
CP_MACCP Not supported
CP_OEMCP OEM code page
CP_SYMBOL Not supported
CP_THREAD_ACP Not supported
CP_UTF7 UTF-7 code page
CP_UTF8 UTF-8 code page

 

아스키는 7bit로 문자를 표현한다. (범위 : 0~127 == 0x00~0x7f)

따라서 아스키로 표현 가능한 문자는 ascii 그대로에 00만 추가로 붙는다. (일반적으로 많이 알고 있는)

0x00 0x00 ~ 0x7f 0x00

 

하지만 0x7f를 초과 범위부터는 어떤 유니코드냐에 따라서 달라진다.

로 정리한다. (표로 넣으려 했더니 너무 번거로워서 그냥 텍스트 캡쳐해서 올린다..-_-)

SEH Unicode 등에 적절하게 상황에 맞게 참조하자.

 

 

반응형

'취약점 분석 > SEH Unicode' 카테고리의 다른 글

[Anyburn 4.3 x86] SEH Unicode Exploit 분석  (0) 2020.01.06