Вы можете использовать scan
для разбора текста на числовые значения, которые затем можно использовать в качестве указателя для выбора элементов, которые затем можно сложить вместе. Добавьте quiet = TRUE, чтобы отключить чтение сообщений.
sapply(variable, function(t) {
paste( lookup$description[ scan(text=t, sep="^")], collapse="^")} )
Read 1 item
Read 2 items
Read 2 items
Read 1 item
Read 1 item
1 2^3 1^5 4 4
"A" "B^C" "A^E" "D" "D"
По моему скромному мнению, точка тестового вируса должна иметь что-то, что, как и известно, безопасно, и принято как вирус так, чтобы конечные пользователи могли проверить, что программное обеспечение AV включено, и видьте эффект вирусной идентификации. Думайте пожарные учения для программного обеспечения AV.
Я предположил бы, что большинство имеет подпись для него и непосредственно распознает его как таковой.
Я не был бы удивлен, включала ли комбинация двоичных разрядов фактического теста EICAR, оказалось, комбинации двоичных разрядов, которые пахли как коды операций для подозрительного действия, но я не знаю, если это так. Если это, то это мог бы быть допустимый тест простого эвристического вирусного устройства распознавания. Однако, так как тест EICAR был вокруг в течение долгого времени, я также предположил бы, что любая эвристика, что кэши это не достаточно хорошо для ловли чего-либо теперь в дикой природе.
Я не ожидал бы, что распознавание, EICAR является доказательством любого требования, более сильного, чем "AV, установлено и сканирование, что это, как ожидали, просканирует", и при разработке системы AV, я не попытаюсь предъявить любую более сильную претензию об этом.
Обновление:
Фактический тестовый вирус EICAR является следующей строкой:
X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*
который был тщательно обработан (в соответствии со статьей Wikipedia), чтобы иметь несколько интересных свойств.
Во-первых, это состоит только из печатаемых символов ASCII. Это будет часто включать пробел и/или новую строку в конце, но это не имеет никакого эффекта на его распознавание, или на его функцию.
Который повышает второе свойство: это - на самом деле исполняемая программа для 8 086 ЦП. Это может быть сохранено (с помощью Блокнота, например) в файле с расширением.COM, и это может быть выполнено на MS-DOS, большинстве клонов MS-DOS, и даже в режиме Совместимости с MS DOS командной строки Windows (включая на Vista, но не в любом 64-разрядном Windows, так как они решили, что совместимость с 16-разрядным реальным режимом больше не была приоритетом.)
Когда выполнено, это производит, как произведено строку "EICAR-STANDARD-ANTIVIRUS-TEST-FILE!" и затем выходы.
Почему они переходили к этому усилию? По-видимому, исследователи хотели программу, которую, как было известно, было безопасно запустить, частично так, чтобы живые сканеры могли быть протестированы, не будучи должен получить реальный вирус и рискнуть реальным заражением. Они также хотели, чтобы это было легко распределить и стандартными и нетрадиционными средствами. Так как оказывается, что существует полезное подмножество x86 системы команд реального режима, где каждый байт встречает ограничение, что это также быть печатаемым символом ASCII, они достигли обеих целей.
Статья Wiki имеет ссылку на методичное объяснение того, как программа на самом деле работает, который является также интересным чтением. Добавление к сложности является тем, что единственный способ или распечатать к консоли или выйти из программы в реальном режиме DOS состоит в том, чтобы дать инструкцию по программному прерыванию, код операции (0xCD) которой не является печатаемым 7-разрядным символом ASCII. Кроме того, два прерывания, каждый требует однобайтового непосредственного параметра, один из которых должен был бы быть пробелом. Так как самостоятельно назначенное правило не состояло в том, чтобы позволить пробелы, все четыре из последних байтов программы ("H+H*" в строке) изменяются на месте, прежде чем указатель команд добирается там для выполнения их.
Демонтируя и дамп EICAR.COM с Командой отладки в командной строке на моем поле 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
вызов завершает процесс, прежде чем любые дополнительные байты мимо той точки смогут быть выполнены.
Самоизменение кода было ранним вирусным приемом, но здесь это используется для сохранения ограничения на значения байта, которые могут использоваться в строке. В современной системе возможно, что функция защиты выполнения данных поймала бы модификацию, если это осуществляется на режиме Совместимости с MS DOS, выполняющем файл COM.