![]() |
![]() |
![]() |
Немного истории: Первоначально, вирусы представляли собой маленькие, простые программы. Они должны были лишь уметь обнаружить цель и инфицировать ее. Эффекты, не отно- сящиеся к основным функциям вирусов, я затрагивать не буду - слишком много разных приколов понаделали. То был "золотой век" технокрыс и юзерам в кошмарах снились злобные ви- русы, стирающие нахуй их любимые игрухи. Однако не все коту масленница. В настоящее время большинство новых вирусов являются полиморфиками, стелсами и т.д. и т.п. Они маскируются, используют хитрые приемы, кое - кто сделал попытку освоить 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 |
||
![]() |
![]() |
![]() |