Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- UTF-32
- hxd
- x32dbg
- 분석 보고서
- Exe2Aut
- Self-Creation
- PEImageSwitching
- OllyDbg
- Advanced안티디버깅
- UTF-16
- ImageSwitching
- Dynamic안티디버깅
- IL코드
- 서비스프로세스
- CodeEngn
- dotPeek
- JIT
- CP949
- Static안티디버깅
- DebugBlocker
- 리버싱
- RedLine Stealer
- Python
- 디버깅
- PEImage
- 리버싱핵심원리
- Visual Studio
- .net
- 안티디버깅
- 서비스디버깅
Archives
- Today
- Total
-榮-
문자열 인코딩 개념 정리- ASCII / ANSI / EUC-KR / CP949 / UNICODE / UTF-8 본문
1. ASCII (American Standard Code for Information Interchange)
- ASCII는 최초의 문자열 인코딩
- 7bit로 구성
- 영어를 위한 문자, 숫자, 특수문자, 기호 등 128개 문자를 표현 (2^7 == 128)
- 영어를 위한 문자(American Standard Code)이기 때문에 다른 언어는 표현이 불가능
2. ANSI (American National Standard Institute)
- ANSI는 ASCII의 확장판 느낌으로 영어 이외의 다른 언어를 지원할 목적으로 만들어짐
- 8bit로 256개의 문자를 표현
- 앞의 7bit는 ASCII와 동일하며, 뒤의 1bit로 다른 언어의 문자표를 의미
- 각 언어별로 Code 값을 가짐 - CodePage
- ANSI = ASCII(7bit) + CodePage(1bit)
3. EUC-KR (Extended Unix Code-Korea)
- 한글 지원을 위해 유닉스 계열에서 나온 완성형 코드 조합
- 완성형 코드 - 완성된 문자 하나하나에 코드 번호를 부여한 것
- 반대의 개념, 조합형 코드 - 자음과 모음 각각에 코드 번호를 부여하여 초성, 중성, 종성을 조합하여 하나의 문자를 나타내는 방식
- 2Byte로 하나의 문자를 표현
- 한글 단어 2350자만 사전순으로 배열하여 모든 한글 단어를 표현하기에 역부족
4. CP949 (Code Page 949)
- 한글 지원을 위해 윈도우즈 계열에서 나온 환장 완성형 코드 조합
- 2Byte로 하나의 문자를 표현
- EUC-KR이 사용하지 않는 나머지 바이트열을 활용하여 대부분의 한글 단어를 표현 가능
- EUC-KR의 확장이므로 호환되며, EUC-KR에서 표현되지 않는 문자는 조합하여 표현
- 949는 한국 페이지 번호를 의미
- MS949, Windows-949라 부르기도 함
- 윈도우 메모장에서 ANSI 인코딩으로 저장하면 CP949 방식에 의해 인코딩 된다.
◎ UNICODE
- 전 세계의 모든 문자를 컴퓨터에서 일관되게 표현할 수 있도록 고안된 코드 조합
- 전 세계의 기기들이 통일된 인코딩 방식을 사용할 수 있도록 하기 위해 고안
- 2byte 숫자로 1:1 매핑시키는 ‘방식’
(유니코드를 표현하는 여러 가지 인코딩 방식들이 존재)
- UTF-8, UTF-16, UTF-32 등은 유니코드 기반의 문자들을 바이트열에 인코딩하는 방식
유니코드는 전 세계 문자들 각각에 맵핑된 코드들을 담고 있는 거대한 표이며, UTF-8 등의 인코딩 방식은 그러한 유니코드 표를 바탕으로 문자들을 바이트열에 표현하는 방식이라 생각
5-1. UTF-8 (Unicode Transformation Format - 8bit)
- 유니코드를 위한 가변 길이 문자 인코딩(멀티바이트) 방식 중 하나
- ANSI의 단점 보완을 목적으로 만들어짐
- 멀티바이트 개념을 사용하여 하나의 Character Set에 거의 모든 문자를 넣음
- ANSI는 다국어를 지원하기 위해 CodePage 정보를 미리 알고 있어야 한다.
- 멀티바이트란 표현해야 하는 문자에 따라 글자 크기를 가변으로 변경하여 사용하는 것
- 멀티바이트(1~4bytes)로 최대 1,112,064자를 표현 가능
- ANSI는 고정바이트(1byte) 형태로 최대 256자 표현 가능
- 첫 128자는 ASCII 코드 값으로 ANSI와 UTF-8이 동일
- 영어를 사용할 경우 1byte만 사용, 중동지역 언어 또는 많은 유럽 언어가 2bytes, 한국 중국, 일본 등 동아시아권 언어는 3bytes이상을 사용
5-2. UTF-16
- 16bit 기반으로 저장하는 UTF-8의 변형
- 자주 사용하는 문자는 2byte, 그렇지 않은 문자는 4byte로 표현
- 한글의 경우, UTF-16으로 저장하면 2bytes면 되어 용량의 이점이 있다.
- UTF-8로 저장하면 3bytes가 필요
- 경우에 따라서는 2bytes 이상을 사용할 경우도 있어 큰 이점은 아니다.
- Byte Ordering을 고려함에 따른 복잡성 증대와 ANSI와 호환이 안 되는 단점이 있다.
- Byte Ordering은 데이터가 저장되는 순서로, Rettle Endian과 Big Endian 방식이 있다.
5-3 UTF-32
- 모든 문자를 4byte의 고정 길이로 인코딩
- 코드 변형 규칙이나 가변 길이에 대한 특별한 고려를 하고 싶지 않을 때, 일관성 있고 단순한 방식으로 문자열을 처리할 수 있다는 장점
- 하나의 문자를 저장하는데 너무 많은 저장 공간이 사용되고 Byte Ordering을 고려함해야 하는 문제가 있어 자주 사용되지 않는다.