Метаморфизм

1. дисклеймер

Данный документ предназначен только для образовательных целей. Автор не несет ответственности за любое неправильное использование
того, что написано в этом документе.

2. Предисловие

Почему я написал эту статью? Все просто. Первые полиморфные движки были созданы потому, что
не было методов обнаружения поливирусов. В то время антивирусные программы могли только искать определенные строки
в файлах и таким образом обнаруживать известные вирусы. Сегодня, когда мир антивирусных программ знает эвристический анализ, полиморфные движки не имеют смысла.
нет смысла  существования полиморфизма, что и до выпуска первых эвристических АВ. До
поливирусы не могли быть обнаружены обычными методами. Теперь известные поливирусы могут быть
легко обнаружить. Неизвестный поливирус также может быть обнаружен (с некоторыми проблемами, напр.
более чем однослойный). Если нет, то вирус "узнается" и будет обнаруживаться без проблем. В общем, полиморфизм теперь только "стандарт", "приятная особенность" или "необходимость". Но нам
(VXers) должны найти другую технику (техники), которая позволит нашему вирусу выжить в течение нескольких месяцев
и сделать эти месяцы горячими для АВеров. Нам нужно найти технику(ы), которая(ые) парализует(ют)
АВеров на несколько месяцев. Нам нужно найти технику(ы), которая(ые) заставит(ут) АВеров
задуматься о своем продукте и заставит его переделать. Какая техника (техники) это будет?

3. Введение в метаморфизм

Возможно, это будет метаморфизм. Метаморфизм чем-то похож на полиморфизм. Поли может
генерировать переменный дешифратор, мета может генерировать переменный весь код. Странно? Представьте себе мета
двигатель как черный ящик (X-D). На входе будет код, который вы хотите мутировать, а на выходе - мутированный
код, который будет отличаться от входного, но его функциональность останется прежней. Если вы хотите написать
метаморфный двигатель, который сможет мутировать странный код, вы, вероятно, сойдете с ума X-D.
Действительно. Вы должны быть очень умны, чтобы просчитать ВСЕ возможные неудачи, вы должны быть очень терпеливы и вы
должен знать большое количество информации о своем процессоре. Как закодировать какой-нибудь мета
движок? Ааа, вам повезло, потому что я пишу мета-движок. И потому что я все еще продолжаю учиться.
процесс, я узнаю все больше и больше, и это большее я хочу обсудить здесь.

4. мета код

Кодировать мета-код очень сложно. На мой взгляд, это одна из самых сложных вещей в вирусном программировании.
Тем не менее, я решил написать один мета-движок. Я думаю, что каждый хороший мета-движок должен содержать:

a) Внутренний дизассемблер
b) Сужатель операционного кода
c) Расширитель опкодов
г) своппер опкодов
e) Перераспределитель/рекалькулятор
f) Мусорщик
g) Очиститель
ad a) Внутренний дизассемблер разбирает инструкцию за инструкцией
ad b) Сократитель опкода сократит/оптимизирует две (или более) инструкции до одной
ad c) Расширитель опкодов расширит одну инструкцию до двух (или более)
ad d) Opcode swapper поменяет местами две (или более) инструкции, если это будет возможно
возможно
ad e) Перераспределитель/рекалькулятор перераспределит/пересчитает все относительные
ссылки, такие как переходы, вызовы и указатели
ad f) Гарбагер будет вставлять одну (или более) инструкцию(ий) "ничего не делающую" между
реальный код
ad g) Чистильщик очистит код от мусора, установленного Гарбагером

Ну, представьте, что все описанное выше стало правдой и у вас есть один замечательный
метаморфический движок для вашего вируса. Что будет делать AVerz? Они не смогут найти сканирующую
строку, потому что действительно каждое поколение будет отличаться от другого поколения. Ну, здесь на помощь приходит только
качественный эвристический сканер. Сканер будет искать подозрительный код. Если сканер найдет его, он
он сообщит "неизвестный вирус". Если нет, что произойдет? Что скажет AVerz? Хм, не знаю...
Давайте дождемся какого-нибудь безумца, который закодирует полностью мета-движок (возможно, это буду я X-D), тогда мы
увидим, что произойдет. Мне действительно интересно...

Но вернемся к реальности. Теперь вы, наверное, знаете, почему я сказал "одна из самых трудных вещей". Ваша мета
должна знать каждый опкод, и она должна уметь обрабатывать инструкции по очереди, чтобы обеспечить
сокращение и замену (сокращение/замена кода намного сложнее, чем расширение). Очень
трудным для кода будет пересчет для всех относительных ссылок. Переходы и обращения к известному (уже
мутировавшему) коду будут простыми. Адреса будут только декрементироваться счетчиком инкрементации.
Переходы и вызовы неизвестного (еще не мутировавшего) кода будут сложнее. Вероятно, потребуется
пометить опкод (записать адрес в таблицу) и избыточно проверить, известен ли уже код, и таким образом
может ли переход/вызов быть пересчитан. Перемещение указателей, вероятно, будет решено с помощью пользовательской
определяемой пользователем таблицей (самый неприятный эффект - вам придется помечать все указатели). Гарбагер должен
использовать только ограниченный набор инструкций (возможно, только NOPs), потому что мусор не должен влиять на другие инструкции.
инструкции. И, наконец, подмена опкодов. Он должен анализировать каждую инструкцию и проверять, не повлияет ли его
не повлияет ли его действие на вторую инструкцию. Если нет, то инструкции могут быть поменяны местами, в противном случае они
нет.

Это еще не все. Есть и другие проблемы и ограничения, такие как:

ты не сможешь смешивать переменные с кодом (следующие таблицы?)

тебе нужно будет хранить где-то оригинальный код вируса (сжатый?) или во время выполнения пересчитывать
все значения в таблице указателей (подайте мне идею!).

Да, я сказал, что это будет сложно. А я уже говорил, что самые маленькие меты занимают около 20кб? X-D

5. Полиморфизм против метаморфизма

Что лучше? Это очень частый вопрос. На мой взгляд, метаморфизм на 100% лучше.
лучше. Мутирует весь код (не только расшифровщик), и если вы добавите какой-нибудь полиморфный
расшифровщик (лучше более многослойный) к вирусу (чтобы усложнить статический анализ), метадвижок будет
мутировать его тоже, так что ваша малышка будет и поли- и мета-. Ну, этот вирус будет абсолютно
мутантом

6. Звершение
Все еще живы? Да? Так что поздравляю, и если вы собираетесь написать свой собственный мета-движок, не
не забудьте связаться со мной. Я также надеюсь, что вы свяжитесь со мной, если вы принесете мне какую-нибудь новую идею, а также
идею, как решить проблемы с предыдущей идеей X-D. Не сдавайтесь!