IMHO, 테스트 바이러스는 무해하다고 알려져 있으며 최종 사용자가 AV 소프트웨어가 켜져 있는지 확인할 수있는 바이러스가 허용됩니다 , 그리고 바이러스 신원의 효과를 볼 수 있습니다. AV 소프트웨어에 대한 소방 훈련을 생각해보십시오.
나는 대부분이 그것에 대한 서명을 갖고 있다고 생각하고 그것을 직접 인식 할 것이다.
실제 EICAR 테스트의 비트 패턴에 의심스러운 활동을위한 opcode와 같은 냄새가 나는 비트 패턴이 포함 된 경우에는 놀랄 일이 아니지만 그럴 지 모르겠습니다. 그렇다면 간단한 휴리스틱 바이러스 인식기의 유효한 테스트 일 수 있습니다. 그러나 EICAR 테스트가 시간 () 동안 진행 되었기 때문에 캐시 된 휴리스틱 (heuristic)은 현재 야생에서 아무 것도 잡기에 충분하지 않다고 생각합니다.
EICAR을 인식하는 것이 "AV가 설치되고 스캔 할 것으로 예상되는 내용을 스캔하는 것"보다 강력하다는 증거는 아니 겠지만 AV 시스템을 개발하는 경우에는 더 강하게 만들지 않으려 고합니다. 그것에 대해 주장하십시오.
업데이트 :
신중합니다 (Wikipedia article에 따라)으로 제작 된
X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*
흥미로운 몇 가지 속성을 가지고 :
실제 EICAR 테스트 바이러스는 다음과 같은 문자열입니다.
먼저 인쇄 가능한 ASCII 문자만으로 구성됩니다. 끝에는 종종 공백이나 개행 문자가 포함되지만 인식이나 기능에는 영향을 미치지 않습니다.
두 번째 속성을 높이는 것은 사실 8086 CPU의 실행 프로그램입니다. 확장명이 .COM 인 파일에 메모장을 통해 저장할 수 있으며 MSDOS, MSDOS의 대부분의 복제본, Windows 명령 프롬프트의 MSDOS 호환 모드 (Vista, 그러나 16 비트 리얼 모드와의 호환성이 더 이상 우선 순위가 아니라고 결정한 이후 어떤 64 비트 Windows에서도 작동하지 않습니다.)
실행하면 "EICAR-STANDARD-ANTIVIRUS-TEST-FILE! " 종료합니다.
왜 이러한 노력을 했습니까? 분명히 연구자들은 실제 바이러스를 포착하고 실제 감염 위험을 감수 할 필요없이 라이브 스캐너를 테스트 할 수 있도록 실행하기에 안전하다고 알려진 프로그램을 원했습니다. 그들은 또한 기존 및 비 전통적인 수단으로 쉽게 배포 할 수 있기를 원했습니다.모든 바이트가 인쇄 가능한 ASCII 문자이기도 한 제한을 충족시키는 x86 리얼 모드 명령어 집합의 유용한 하위 집합이 있음이 밝혀지기 때문에 두 목표를 모두 달성했습니다.
위키 문서에는 프로그램이 실제로 어떻게 작동하는지에 대한 blow-by-blow explanation에 대한 링크가 있습니다.이 또한 흥미로운 읽을 거리입니다. 복잡성을 추가하는 것은 콘솔로 인쇄하거나 DOS 실제 모드에서 프로그램을 종료하는 유일한 방법은 opcode (0xCD)가 인쇄 가능한 7 비트 ASCII 문자가 아닌 소프트웨어 인터럽트 명령을 실행하는 것입니다. 또한 두 개의 인터럽트에는 각각 1 바이트의 직접 매개 변수가 필요하며 그 중 하나는 공백 문자 여야합니다. 자기 부과 된 규칙은 공백을 허용하지 않기 때문에 프로그램의 마지막 바이트 4 개 (문자열의 "H + H *")는 명령어 포인터가 실행되기 전에 제자리에서 수정됩니다.
분해 내 XP 상자에 명령 프롬프트에서 DEBUG 명령을 EICAR.COM 덤핑, 나는 참조 :
0C32:0100 58 POP AX
0C32:0101 354F21 XOR AX,214F
0C32:0104 50 PUSH AX
0C32:0105 254041 AND AX,4140
0C32:0108 50 PUSH AX
0C32:0109 5B POP BX
0C32:010A 345C XOR AL,5C
0C32:010C 50 PUSH AX
0C32:010D 5A POP DX
0C32:010E 58 POP AX
0C32:010F 353428 XOR AX,2834
0C32:0112 50 PUSH AX
0C32:0113 5E POP SI
0C32:0114 2937 SUB [BX],SI
0C32:0116 43 INC BX
0C32:0117 43 INC BX
0C32:0118 2937 SUB [BX],SI
0C32:011A 7D24 JGE 0140
0C32:0110 45 49 43 41 EICA
0C32:0120 52 2D 53 54 41 4E 44 41-52 44 2D 41 4E 54 49 56 R-STANDARD-ANTIV
0C32:0130 49 52 55 53 2D 54 45 53-54 2D 46 49 4C 45 21 24 IRUS-TEST-FILE!$
0C32:0140 48 DEC AX
0C32:0141 2B482A SUB CX,[BX+SI+2A]
JGE 0140
까지의 지침을 실행 한 후, 마지막 두 지시로 수정되었습니다 :
0C32:0140 CD21 INT 21
0C32:0142 CD20 INT 20
대부분의 DOS 시스템 호출을 실행할 수있는 기능을 지정 AH
또는 AX
레지스터의 값으로 INT 21
을 파견했다. 이 경우 AH
은 오프셋 문자열 0x011C에서 시작하여 달러 기호로 끝나는 문자열을 인쇄하는 인쇄 문자열 함수 인 0x09입니다. 순수 DOS에서 다른 트릭을 사용하여 달러 기호를 인쇄해야했습니다. INT 20
호출은 해당 지점을 지난 여분의 바이트를 실행하기 전에 프로세스를 종료합니다.
자체 수정 코드는 초기 바이러스 트릭 이었지만 여기서는 문자열에 사용할 수있는 바이트 값에 대한 제한을 유지하는 데 사용됩니다. 최신 시스템에서는 데이터 실행 방지 기능이 COM 파일을 실행하는 MSDOS 호환 모드에서 적용되는 경우 수정 사항을 catch 할 수 있습니다.
프로그래밍과 관련하여 약간의 차이점이 있습니까? – user73993
아마도 그는 AV 시스템을 작성하는 방법에 대해 생각하고 있습니까? 물론, 그는 그러한 시스템을 지나치게 빠져 나가는 방법을 생각할 수도 있습니다 ... – RBerteig
저는 바이러스 탐지 메커니즘과 프로그램에서이를 구현하는 방법에 대해 읽었습니다. 경험적 방법과 법의학은 프로그래밍과 관련이 있기 때문에 질문을하기에 적합한 장소라고 생각했습니다. –