작은 메모장
정규표현식 - 정규표현식 응용 실습 본문
조금 더 복잡한 문제를 풀어보자
첫 번째 문제
대한민국 전화번호부만 살펴 보자.
미국의 경우, 무조건 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이 조건에 맞는 정규표현식이다.
'KISA 사이버 보안 훈련 > YARA 정규표현식 활용' 카테고리의 다른 글
Yara Rule (0) | 2023.06.25 |
---|---|
Yara 개념 (0) | 2023.06.25 |
정규표현식 - 정규표현식 기본 실습 (0) | 2023.06.24 |
정규표현식 - 정규표현식 개념 (0) | 2023.06.24 |
정규표현식 - Yara와 정규표현식의 관계 (0) | 2023.06.22 |