작은 메모장

정규표현식 - 정규표현식 응용 실습 본문

KISA 사이버 보안 훈련/YARA 정규표현식 활용

정규표현식 - 정규표현식 응용 실습

으앙내눈 2023. 6. 25. 13:17

조금 더 복잡한 문제를 풀어보자

 

 

첫 번째 문제

대한민국 전화번호부만 살펴 보자.

미국의 경우, 무조건 1로 전화번호가 시작한다.

일본의 경우, 0120으로 전화가 시작한다.

반면 대한민국의 경우, 02, 031, 032, 033, 041 등 다양하다.

결과적으로, 대한민국 전화번호 앞자리는 0으로 시작하고 1~6의 숫자가 한번 혹은 두번 나오는 구조로 되어있다. (0[1-6]{1,2})

전화번호의 중간번호는 0~9의 숫자가 3개 혹은 4개의 숫자로 이루어져 있다.( \d{3,4} )

전화번호의 마지막번호는 0~9의 숫자가 4개로 이루어져 있다. ( \d{4} )

종합적으로, 위 문제의 정규표현식은 /0[1-6]{1,2}-\d{3,4}-\d{4}/g로 표현 가능하다.

 

 

두 번째 문제

010으로 번호가 시작해야 하므로, 010앞에는 어떠한 단어도 오면 안된다. ( \b010 )

전화번호의 처음과 중간을 구분할 때, -를 쓰거나 .을 썼다. 이 둘을 전부 반영한다. ( [\-\.] )

전화번호의 중간에는 아무 숫자 4자리가 온다. ( \d{4} )

전화번호의 중간과 마지막을 구분할 때, -를 쓰거나 .을 썼다. 이 둘을 전부 반영한다. ( [\-\.] )

전화번호의 마지막에는 아무 숫자 4자리가 온다. ( \d{4} )

전화번호가 끝난 후에는 어떠한 기호나 숫자가 존재해선 안된다. ( [^\-\.] )

종합적으로, /\b010[\-\.]\d{4}[\-\.]\d{4}[^\-\.]/g의 정규표현식으로 표현 가능하다.

 

 

세 번째 문제

라인을 모두 인식하기 때문에, 여러 라인을 인식하는 플래그를 지정한다. ( /m )

여러 라인을 인식하기 때문에, 문장의 시작과 끝 부분을 정해주어야 한다. ( ^ $ )

이메일의 형식은 @를 기준으로 앞과 뒤로 나뉜다.

@의 앞에는 단어를 포함한 . - +의 기호만 사용이 가능하다. ( ^[\w\.\+\-]+ )

@의 뒤에는 단어를 포함한 . -의 기호만 사용이 가능하다. ( [\w\.\-]+$ )

종합적으로, /^[\w\.\+\-]+@[\w\.\-]+$/gm의 정규표현식으로 표현이 가능하다.

 

 

네 번째 문제

URL을 포함한 HTML태그는 필드에 href 혹은 src 필드를 가지고 있다. 이를 기준으로 태그를 인식하면 된다.

일단 태그의 시작은 <로 시작하므로, <는 포함되어야 한다. ( < )

어떤 태그가 올지 모르므로, ()을 통해 그룹으로 지정 후, .으로 아무 문자나 입력받는다 ( (.+). )

href 혹은 src 필드라고 지정한다. ( (href|src).+ )

아무 글자(대부분 링크)를 입력 받은 후, 지정된 태그를 닫아야 하기 때문에, 처음 그룹으로 지정한 값을 설정한 후 태그를 닫는다. ( \1> )

종합적으로 /<(.+).+(href|src).+\1>/g의 정규표현식으로 인식할 수 있다.

 

 

다섯 번째 문제

라인 별로 인식하므로, 라인 별로 인식하는 플래그를 설정한다. ( /m )

파일 명을 살펴보자. 각 경로에는 오직 영어만 써져있고, 공백과 한글, 특수문자가 섞여있는 곳은 오직 이름 및 확장자이다.

따라서, \뒤에 공백, 한글, 특수문자가 섞인 이름을 찾는다면, 그곳이 이름 및 확장자일 것이다.

/[^\\][\w\d\s\.가-힣\-]+$/gm가 정규표현식으로 올바르다.

 

 

여섯 번째 문제

라인 별로 인식하므로, 라인 별로 인식하는 플래그를 설정한다. ( /m )

주소를 살펴보자. URL 주소는 http://와 서버의 ip, 그리고 하위 목록들로 구성되어 있다.

http는 http와 https로 나뉘며, 둘 모두 URL주소로 인식해야 한다. ( https?:\/\/ )

서버의 ip는 영어, 숫자 및 특수문자로 이루어져 있다. ( [\w\d\.\=\?\/]+ )

종합적으로, /https?:\/\/[\w\d\.\=\?\/]+/gm가 정규표현식으로 나타낼 수 있다.

 

 

일곱 번째 문제

MD5 해시만을 인식하는 문제. 문제에서 조건을 상세하게 설명하였다.

a~f, A~F, 0~9로만 이루어져 있고, 32자리로 이루어져 있는 것이 MD5 해시의 구조이다. ( [a-fA-F0-9]{32} )

종합적으로 /\b[a-fA-F0-9]{32}\b/g가 정규표현식이 될 수 있다.

 

 

여덟 번째 문제

각 라인별로 인식하는 문제이므로, 라인별로 인식하는 플래그를 설정하고 시작한다. ( /m )

가장 앞 부분부터 시작하므로, 시작 부분을 알리는 앵커를 설정한다. ( ^ )

각각의 16진수는 2개의 문자끼리 이루어진 조합으로 이루어져 있다. 즉, 하나의 단어가 2개의 문자로 이루어진 것이다.

( ((\w\w)\s) )

가장 앞 부분의 4자리를 인식해야하므로, 3자리까지는 공백을 포함하도록 인식, 나머지 1자리는 2개의 문자만 입력받도록 한다. ( {3}\w\w )

따라서, /^((\w\w)\s){3}\w\w/gm이 조건에 맞는 정규표현식이다.