1. 정규 표현식이란?

정규 표현식(Regular Expression) 일정한 패턴을 이용하여 패턴에 맞는 텍스트를 찾거나 조작하는 데에 사용되는 문자열을 말합니다.

이번 1 에서는 정규 표현식의 필요성과 메타 문자, 그리고 활용 방안에 대해서 알아보도록 하겠습니다.

정규 표현식이 필요한 이유에 대해 알아 보기 위해 아래 예제를 살펴 보도록 하겠습니다
.

사용자 삽입 이미지


위의 내용을 모두 나열하면
1 Grade Dorumugs Class, 1 Grade Matthew Class, 1 Grade Kayser Class, 2 Grade Dorumugs Class ...... 3Grade Matthew Class, 3 Grade Kayser Class 9개의 문자열로 표현이 가능합니다.

Grade
숫자를, Class 문자열을 포함합니다. 9개의 문자열을 모두 검색하기 위해서 검색 도구에 9개의 문자열을 모두 입력한다면 검색 시간이 매우 많이 걸릴 것이며 경우의 수가 늘어나는 경우 그 시간이 기하급수적으로 증가할 것입니다.

정규 표현식을 이용하여 특정한 패턴을
[숫자] Grade [문자열] Class와 같이 만들 수 있다면 한 줄로 위의 9개의 경우를 모두 표현할 있습니다.

Grade
경우 숫자로만 표시되어 1,2,3,6 포함하고 C,D,K 등의 문자열이 포함될 없습니다. 따라서 검색을 위해서는 문자열이 아닌 숫자로만 표현이 가능하도록 지정해야 할 것입니다.

1 Grade
부터 6 Grade 까지 존재한다고 가정하는 경우 정규 표현식을 이용하여 [1-6] Grade 으로 표현할 있습니다. 여기서 사용되는 특수문자는 메타문자라고 하며 각각의 사용방법과 의미가 존재하며 다음 장에서 살펴 보도록 하겠습니다.

사용자 삽입 이미지


Class
경우 [A-Za-z]+ 등으로 모든 문자열로 표시할 있습니다. 메타문자 ++ 앞의 문자가 1 이상 반복되는 것을 의미합니다. 따라서 [A-Za-z]+ 알파벳 대소문자로 시작하여 것이 1 이상 반복 되어 즉 영문자로 이루어진 단어를 뜻하게 됩니다.

정규표현식은 찾고자 하는 문자열을 문서에서 찾을 때 사용이 많이 됩니다
.

시스템 관리자나 네트워크 관리자는 특정 문자열 검색이나 로그에서 특정 텍스트를 추출해야할 경우에 정규 표현식을 자주 마주치게 됩니다
. 보안 관리자의 경우 디지털 포렌직이나 침해 대응 업무를 할 때 정규 표현식이 많이 사용됩니다.

만 라인이 넘는 특정 파일에서
IP 주소만 찾는 다던가 URL 주소를 추출해야하는 경우하는 경우 정규 표현식 없이는 모든 라인을 모두 검사해야 원하는 결과를 얻을 수 있을 것입니다.


2.  메타문자

메타 문자는 정규 표현식 안에서 특정한 의미를 갖는 특수문자를 말합니다. 메타 문자를 이용하여 반복과 범위 등을 나타낼 있습니다.


주요 메타문자의 활용 방법을 알아보기 위해 아래의 예제를 살펴보도록 하겠습니다
.

사용자 삽입 이미지


아래의 예제는 메타문자
[ . ] 사용방법을 알아보기 위한 예제 입니다. [ . ] 임의의 문자를 나타냅니다.

사용자 삽입 이미지


위 예제에 같이 정규 표현식
A.. A 시작하는 3글자의 문자열을 의미합니다. 메타문자 [ . ] 모든 문자 1개를 나타내기 때문에 모든 문자가 포함될 있습니다. 따라서 A.. A 시작하는 Ahn, Age, Ask등을 나타냅니다.

다음 예제는 반복에 사용되는 메타문자
[ * ], [ + ], [ ? ], [ { } ] 등에 대해서 살펴보도록 하겠습니다.

먼저 메타문자
[ * ] 정규 표현식에서 앞의 문자를 0 이상 반복함을 의미합니다.

사용자 삽입 이미지


Ah*
사용하는 경우 h 0 이상 반복되는 경우를 나타냅니다. 따라서 A, Ah, Ahh, Ahh…. 등을 나타낼 수 있습니다.

메타 문자
[ + ]는 앞의 글자를 1 이상 반복함을 의미합니다.

사용자 삽입 이미지

 

정규표현식 Ah+ Ah, Ahh, Ahhh 포함하지만 h+h 1 이상 반복함을 나타내므로 A는 포함되지 않습니다.

메타문자
[ ? ]는 앞의 문자가 1 또는 0개가 포함되는 경우를 나타냅니다.

사용자 삽입 이미지


정규표현식
Ah?nLab은 따라서 h 있거나 없는 경우를 포함하므로 AnLab AhnLab 포함할 있습니다.

메타문자
{ n }는 앞의 문자열이 n 반복됨을 의미합니다.

사용자 삽입 이미지


{ 2 }
라는 메타문자는 앞의 문자를 두번 반복한다는 의미입니다. 앞의 [ . ] 문자열 하나를 말하기 때문에 문자 2개가 경우를 나타내어 A _ _ Lab 나타낼 있습니다.

메타문자
{ a , b }는 앞의 문자열을 a ~ b 반복함을 의미합니다.

사용자 삽입 이미지


위 그림의 { 2,3 } 메타문자는 앞의 문자값이 2~3 반복 되는 의미입니다. 현재 [ . ] { 2,3 }앞에 있으므로 아무 문자열 2~3개가 들어오는 경우를 나타냅니다.

따라서 이 경우
A _ _ L a b, A _ _ _ L a b 나타내어 AhnLab, AmenLab 포함할 있습니다.

사용자 삽입 이미지

[ ^ ]
메타문자는 ^뒤에 표시된 문자열로 시작함을 의미하니다. 따라서 A 시작하고 h 포함하는 모든 문자열을 포함합니다. 예제에서 AhnLab Ah~ha~ 문자열이 포함됩니다.

메타문자
[ $ ] 는 앞의 문자로 끝나는 것을 의미합니다. 아래 예제와 같이 LAB$로 정규표현식을 사용하는 경우 $B에만 영향을 줍니다. 하지만 B앞에 LA을 포함해야 하므로 결국 LAB 끝나야함을 의미합니다.

사용자 삽입 이미지


따라서
LAB 끝나는 AhnLAB, KimLAB 포함하며 KimBAB 해당되지 않습니다.

다음은 메타문자 자체를 표현할 때 어떻게 표현해야하는지 알아보도록 하겠습니다
. 메타문자 [ . ] 개의 문자열을 나타냅니다. 하지만 . 자체를 표현하기 위해서는 메타문자 [ \ ] 사용하여 \. 으로 표현하면 됩니다.

사용자 삽입 이미지


위의 패턴은 메타문자인
.을 쓰기위한 방법입니다 앞에 \문자를 넣고 메타문자를 넣으면 메타문자를 문자처럼 인식합니다. 다른 메타문자도 마찬가지로 메타문자 자체를 사용하기 위해서는 앞에 [ \ ]를 사용하면 됩니다.

아래
표는 기타 다른 메타문자 조합을 나타냅니다.

사용자 삽입 이미지


위의 표는
Perl에서 쓰이는 메타문자입니다. 사용자들이 주의해야 점은 프로그램마다 메타문자의 형식이 조금씩 달라진다는 것입니다. egrep에서 사용 가능한 메타문자가 perl에서는 사용이 불가능한 경우도 많습니다.

그러므로 메타문자를 사용할 때 해당 프로그램에서 지원하는 지 여부를 확인하고 사용해야 합니다
.


3. 정규표현식 활용


정규표현식은 문자열 처리에 대한 능력이 탁월 합니다
. 그러므로 파일의 내용을 보여주는 프로그램과 같이 사용하는 경우가 굉장히 많습니다. 파일의 내용을 확인 있는 프로그램은 아래와 같습니다.


이름

내용

strings

실행파일이나 오브젝트 파일등을 문자열로 확인

cat

실행파일이나 오브젝트 파일등을 문자열로 확인

type

텍스트 파일의 내용을 확인

grep

문자열을 검색할 수 있는 프로그램

Egrep

문자열을 검색할 수 있는 프로그램


Strings cat 그리고 type 파일을 읽어들어여서 문자열을 확인하는 프로그램이며 grep egrep 같이 연동하여 사용자가 원하는 문자열을 가져올 수 있습니다. Command line창에서 파이프라인( | ) 으로 연동이 가능합니다. 연동화면은 아래와 같습니다.


E:\test>cat dorumugs.txt

dorumugs company


phone : 010-1234-1234


email : dorumugs@ahnlab.com


E:\test>cat dorumugs.txt | egrep email

email : dorumugs@ahnlab.com


위와 같이 dorumugs.txt파일에서 파이프라인을 써서 email 쓰여진 문자열을 정상적으로 뽑아낸 것을 확인 할 수 있습니다. 이제 정규표현식을 써서 문자열 검색하는 것을 직접 확인 해보겠습니다.


호스트 이름:             DORUMUGS-COM

OS 이름:                 Microsoft Windows XP Professional

OS 버전:                 5.1.2600 Service Pack 3 빌드 2600

OS 제조업체:             Microsoft Corporation

OS 구성:                 독립 실행형 워크스테이션

OS 빌드 종류:            Multiprocessor Free

등록된 소유자:           dorumugs

등록된 조직:            

Product ID:              76489-640-7954827-23292

원래 설치 날짜:          2009-12-21, 오전 9:09:14

System Up Time:          1, 2시간, 53, 23

시스템 제조업체:         Gigabyte Technology Co., Ltd.

시스템 모델:             EP45-UD3R

시스템 종류:             X86-based PC

프로세서:                프로세서 1 설치됨

                         [01]: x86 Family 6 Model 23 Stepping 10 GenuineIntel ~2999Mhz

BIOS 버전:               GBT    - 42302e31

Windows 디렉터리:        C:\WINDOWS

System 디렉터리:         C:\WINDOWS\system32

부팅 장치:               \Device\HarddiskVolume1

시스템 로케일:           ko;한국어

입력 로케일:             ko;한국어

표준 시간대:             N/A

총 실제 메모리:          3,326MB

사용 가능한 실제 메모리: 2,250MB

가상 메모리: 최대 크기:  2,048MB

가상 메모리: 사용 가능:  1,992MB

가상 메모리: 사용 :    56MB

페이지 파일 위치:        C:\pagefile.sys

도메인:                  WORKGROUP

로그온 서버:             \\DORUMUGS-COM


네트워크 카드:           NIC 2 설치됨

                         [01]: 1394 어댑터

                               연결 이름: 1394 연결

                               DHCP 사용:

                               DHCP 서버: N/A

                               IP 주소

                        [02]: Realtek RTL8168C(P)/8111C(P) PCI-E Gigabit Ethernet NIC

                               연결 이름: 로컬 영역 연결

DHCP 사용: 아니오

                               IP 주소

                               [01]: 192.168.137.200


위 파일은 systeminfo를 텍스트로 저장한 문서입니다. 값에서 IP정보만 추출해 보도록 하겠습니다.


E:\test>cat systeminfo.txt | egrep .{1,3}\..{1,3}\..{1,3}\..{1,3}

                               [01]: 192.168.137.200


E:\test>strings systeminfo.txt | egrep .{1,3}\..{1,3}\..{1,3}\..{1,3}

                               [01]: 192.168.137.200


E:\test>type systeminfo.txt | egrep .{1,3}\..{1,3}\..{1,3}\..{1,3}

                               [01]: 192.168.137.200


위 그림은 egrep을 연동하여 systeminfo.txt에서 IP내역만확인 하였습니다. Cat strings type을 전부 사용하여 결과값을 확인 하였습니다. 결과값은 다르지 않지만 각자 사용하는 방법이 조금씩 다르므로 궁금한 사용이 있을 경우 매뉴얼 페이지를 참조하시기 바랍니다.


정규표현식 2회에서는 포렌직에서 활용이되는 접근방법을 소개하도록 하겠습니다. 좀더 분석에 도움이 되는 스크립트를 보여드리며, 분석 진행과정을 단축 시킬 있는 팁을 간단히 소개하도록 하겠습니다.

 

'Forensics' 카테고리의 다른 글

x-way forensic으로 파일 복구하기  (0) 2010.09.24
정규표현식 2회  (0) 2010.04.05
쓸만한 무료 웹 스캐너 Skipfish  (0) 2010.04.05
ASP Webshell  (0) 2010.03.18
F-response 설명서  (0) 2009.09.11
Posted by 도시형닌자
: