ИМХО, смысл тестируемого вируса в том, чтобы иметь что-то, что, как известно, безвредно и принято как вирус, чтобы конечные пользователи могли убедиться, что программное обеспечение AV включено, и увидеть влияние вируса. удостоверение личности. Подумайте пожарная дрель, для программного обеспечения AV.
Я бы предположил, что у большинства есть подпись для него, и прямо признал бы это как таковой.
Я бы не удивился, если бы битовый шаблон реального теста EICAR включал битовые шаблоны, которые пахли как коды операций для подозрительной активности, но я не знаю, так ли это. Если это так, то это может быть действительным тестом простого эвристического распознавателя вирусов. Однако, так как тест EICAR длился long , я также мог бы предположить, что любая эвристика, которая кеширует его, недостаточно хороша, чтобы поймать что-либо сейчас в дикой природе.
Я бы не ожидал, что признание EICAR является доказательством любого утверждения, более сильного, чем «AV установлен и сканирует то, что ожидалось отсканировать», и если бы я разрабатывал AV-систему, я бы не стал выдвигать более сильное утверждение об этом.
Обновление:
Фактический тестовый вирус EICAR имеет следующую строку:
X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*
, который был тщательно обработан (согласно статье Википедии ), чтобы иметь несколько интересных свойств.
Во-первых, он состоит только из печатных символов ASCII. Он часто будет содержать пробел и / или символ новой строки в конце, но это не влияет на его распознавание или его функцию.
Что вызывает второе свойство: на самом деле это исполняемая программа для процессора 8086. Его можно сохранить (например, с помощью Блокнота) в файле с расширением .COM и запустить в MSDOS, большинстве клонов MSDOS и даже в режиме совместимости MSDOS в командной строке Windows (в том числе в Vista, но не на любой 64-битной Windows, поскольку они решили, что совместимость с 16-битным реальным режимом больше не является приоритетом.)
При запуске выдает в качестве вывода строку «EICAR-STANDARD-ANTIVIRUS-TEST-FILE!» и затем выходит.
Почему они пошли на это усилие? Очевидно, исследователи хотели программу, которая, как известно, была безопасна для запуска, отчасти для того, чтобы можно было протестировать живые сканеры без необходимости захвата реального вируса и риска реальной инфекции. Они также хотели, чтобы его можно было легко распространять как обычными, так и нетрадиционными способами. Поскольку оказывается, что существует полезное подмножество набора команд реального режима x86, где каждый байт соответствует ограничению, что он также может быть печатным символом ASCII, они достигли обеих целей.
В вики-статье есть ссылка на подробное объяснение о том, как на самом деле работает программа, что тоже интересно. Кроме того, сложность заключается в том, что единственный способ либо печатать на консоль, либо выходить из программы в реальном режиме DOS - это выполнить инструкцию программного прерывания, чей код операции (0xCD) не является печатаемым 7-битным символом ASCII. Кроме того, каждому из двух прерываний требуется однобайтовый непосредственный параметр, одно из которых должно быть пробелом. Поскольку самонастраиваемое правило состояло в том, чтобы не допускать пробелов, все четыре из последних байтов программы («H + H *» в строке) модифицируются на месте до того, как указатель инструкции попадет туда для их выполнения.
Разборка и выгрузка EICAR.COM с помощью команды DEBUG в командной строке на моем компьютере с XP, я вижу:
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 отправлялись через INT 21
со значением регистра AH
или AX
, определяющим функцию для выполнения. В этом случае AH
равно 0x09, что является функцией печати строки, которая печатает строку, начинающуюся со смещения 0x011C, оканчивающуюся знаком доллара. (Вы должны были напечатать знак доллара другим трюком в чистом DOS.) Вызов INT 20
завершает процесс, прежде чем могут быть выполнены любые дополнительные байты после этой точки.
Самомодифицирующийся код был ранним уловкой вируса, но здесь он используется для сохранения ограничения на байтовые значения, которые могут использоваться в строке. В современной системе возможно, что функция защиты от выполнения данных перехватит модификацию, если она применяется в режиме совместимости MSDOS с файлом COM.