KPlay의 코딩 그리고 잡동사니

www.eicar.org/?page_id=3950

 

 

Download Anti Malware Testfile – Eicar

In order to facilitate various scenarios, we provide 4 files for download. The first, eicar.com, contains the ASCII string as described above. The second file, eicar.com.txt, is a copy of this file with a different filename. Some readers reported problems

www.eicar.org

테스트를 위해 바이러스를 다운받는다(컴퓨터의 모든 백신을 전부 종료 후)

 

이렇게 4가지의 확장자가 있는데 

 

.com은 exe같은것이고 txt는 텍스트파일, 3번째는 압축파일, 4번째는 두번 압축된 파일이다

 

실제로 악성코드들은 여러분 압축을통해 숨어있는 경우가 있다 

 

 

 

 

 

 

새로운 바이러스(악성코드)가 발견되면 보안담당자들은

 

1. 바이러스를 여러가지 방식으로 분석해서 '특징'을 찾아낸다

 

2. 특징을 찾아내어 필터형식의 안티 바이러스 프로그램을 만든다

 

3. 정삭적으로 탐지되어 삭제되는지 확인한다

 

대충 그렇다고 한다.

 

 

 

 

 

테스트를 위해 위 링크의 두번째 확장자인 .txt파일을 다운받아보자

 

그 후, 위 txt파일과 같은 경로 내에 아무 개발도구를 써서 python파일을 하나 만든다(이름은 마음대로 지정)

(당연히 Python은 설치되어 있어야 한다)

 

 

 

 

 

 

한번 안티 바이러스 코드를 작성해보자.

 

 

악성코드를 탐지하기 위해서는 악성코드로 의심되는 파일을 읽어야하므로

 

fp = open('eicar.com.txt', 'rb')

 

파일 open함수의 첫번째 인자는 파일명(open할 파일이 같은 경로에 없으면 경로도 써줘야한다),

두번째 인자는 mode(읽기, 쓰기, 이어서 쓰기 등)이다.

 

'rb'는 readbinary의 약자로 바이너리모드로 읽겠다는 뜻이다.

 

우리는 파일을 읽을것이기 때문에 r을 입력하는데 어떤 확장자로 읽을지를 적지 않으면 기본값인 text모드로 읽게되므로

 

b를 붙인다

 

 

 

악성코드는 문자열을 바이너리로 읽어야하는데 바이너리로 읽게되면

 

문자를 표현하는 '아스키코드(ASCII)의 0x00 ~ 0xFF까지 표현할 수 있지만

 

텍스트 모드는 0x00 ~ 0x7F 까지만 표현이 가능하기 때문에 악성코드의 모든 내용을 읽으려면 바이너리 형식으로 읽어야한다.

 

 

 

그다음은 fread = fp.read() 로

 

fread라는 변수에 파일을 읽은 내용을 적고

 

fclose() 함수로 파일을 닫아준다

 

 

 

 

 

 

 

악성코드의 txt파일을 열어서 특징을 찾아보자

간단하게 제일앞에 써있는 'X50'이 특징이라고 하고 탐지를 해보자

 

 

 

 

 

 

 

 

 

if문으로 만약 fread의 0번~2번 인덱스가 X50이면 Virus라고 출력하고

 

os라이브러리의 내장함수인 remove()함수를 실행시켜 삭제한다

 

 

만약 아니라면 No Virus라고 출력한다

 

 

 

 

이후 cmd창을 열어 해당 폴더로 이동한 뒤에 python 파일명.py 를 입력하여 파이썬 파일을 실행하면

 

악성코드가 탐지되어 지워지는것을 확인할 수 있다.

 

 

 

하지만 이렇게 문자열로만 탐지한다면 정상적인 파일에 일치하는 문자열이 있다면 

 

정상파일도 악성파일로 탐지하여 지워질 수 있으므로 MD5 Hash값을 이용해보자

 

 

 

 

www.virustotal.com/

 

VirusTotal

 

www.virustotal.com

 

VirusTotal 사이트로 들어가서 해당파일을 올려놓아보자 

 

 

 

 

 

 

 

이후 DETAILS에서 MD5 hash값을 복사해서 

 

 

hash라이브러의 hexdigest() 함수를 이용해 hash값으로 걸러내 삭제할 수 있다.

 

 

 

 


 

 

이 글 내용의 출처는 유튜버 '놀리팝'님 입니다.

 

youtu.be/td3r2noOPqo

 

 

 

 

 

 

 

 

 

 

 

'실습 > Python' 카테고리의 다른 글

반복문을 이용한 팩토리얼 프로그램  (0) 2020.10.06

이 글을 공유합시다

facebook twitter kakaoTalk kakaostory naver band