|
|
Немного истории:
Первоначально, вирусы представляли собой маленькие, простые программы.
Они должны были лишь уметь обнаружить цель и инфицировать ее. Эффекты, не
отно- сящиеся к основным функциям вирусов, я затрагивать не буду - слишком
много разных приколов понаделали.
То был "золотой век" технокрыс и юзерам в кошмарах снились злобные ви-
русы, стирающие нахуй их любимые игрухи. Однако не все коту масленница.
В настоящее время большинство новых вирусов являются полиморфиками,
стелсами и т.д. и т.п. Они маскируются, используют хитрые приемы, кое -
кто сделал попытку освоить protected mode. Однако AVP, DrWeb и им подобные
монстры весьма успешно расправляются даже с лучшими образцами вирусов,
хотя часто ловят конкретных тупарей ;)
Но довольно о грустном.
Каким образом современные антивирусы детектируют полиморфные вирусы?
Ясное дело, эмулируют код расшифровщика и смотрят, что удалось
расшифровать.
Чтобы им помешать есть три метода:
1) Помешать эмулировать.
2) Помешать анализировать.
3) Стирать антивирусы к ебаной матери.
Чаще всего применяют метод 1, т.е. антиэвристику. И это работает! Но
только пока вир не попал к антивируснику. Можно написать зверя на пасКАЛе
и вся эвристика снова окажется в заднице (и снова ненадолго). Но есть
второй ва- риант. Что самое противное в антивирусах с точки зрения
пользователя? Тормозные они очень. А если мы сделаем декриптор размером
кило этак в 30, то сколько его эмулить придется? А если все файлы на диске
в 9Gb? Долго? Еще бы! А по личному опыту могу сказать: хрен юзер запустит
антихвирус если он работать будет долго и тормозно. Ну, впрочем, может и
запустит, если вывести на весь экран
"I am VIRUS":)
Random Code Generator - это программа генерирующая декриптор не содер-
жащий какого-либо конкретного алгоритма (в полиморфном коде присутствует
посто- янный алгоритм). В програмной реализации этой идеи (SRCG 1.0),
декриптор пред- ставляет собой отдельные инструкции типа: CHANGE
[ADRESS],[ARGUMENT]
CHANGE = mov, xor, not, add...
ADRESS = number, register, reg1+reg2...
ARGUMENT = number, register...
Расшифровывающие инструкции разбавлены мусором. ADRESS при шифровании
берется произвольно.
Разумеется, такой декриптор занимает много места и не позволяет покрип-
товать большой блок данных (зато можно закриптовать второй декриптор -
обычный) Необходимо также высокое качество кода - в нем должны
присутствовать ВСЕ основные инструкции 80286, иначе можно будет
подвязаться например под то, что в проге начисто отсутствуют инструкции
INT xx.
PS: В будущем возможно добавлю генерацию внутри случайного кода блоков
обычного полиморфного кода (антиотладочные приемы). Да и вообще в винды
пора!
Shad0W
|
|