Простой полиморфный движок - PullRequest
5 голосов
/ 14 ноября 2010

Я должен запрограммировать простой полиморфный движок. Я использую Linux (32-разрядная версия), и я могу код на ассемблере и c. Я не знаю с чего начать.

Можете ли вы дать мне схему для создания такого двигателя? Моя идея состоит в том, чтобы сделать программу, которая:

  1. читать код раздела файла
  2. шифрует его в буфере,
  3. освободить место в начале (возможно?), Чтобы добавить процедуру расшифровки
  4. записать новый буфер в раздел кода программы.

Это правильно? Отражает ли это работу такого двигателя?

1 Ответ

3 голосов
/ 14 ноября 2010

Базовая схема сильно отличается от того, что вы описали. Обычно шифруется только тело вируса, а не весь раздел кода. Рассмотрим простой вирус, который либо расширяет раздел кода, либо создает новый для своего тела. Теперь, чтобы сделать его полиморфным, нужно добавить шифрование и сделать код расшифровщика непостоянным, например:

1) вставлять nops случайным образом (nop, add reg, 0, push reg; pop reg и т. Д.)

2) изменить ход программы с помощью (jmp next, clc; jc next и т. Д.)

3) использовать инструкции с таким же арифметическим эффектом (add eax, 3 -> add eax, 9; sub eax, 6)

Полиморфный означает, что он может иметь фиксированное количество кодировок, поэтому самый простой способ его создания - разбить код расшифровщика на несколько блоков и обеспечить несколько кодировок одинаковой длины для каждого.

РЕДАКТИРОВАТЬ: Да, это часть тела вируса. Чтобы использовать его, вы помещаете все эти «кирпичики» в тело вируса, а когда другой файл заражен, вы создаете для него случайную версию расшифровщика.

...