- [Duke's Virus Labs #4] - [Page 08] - Журнал D V L # 4 представляет : TRANS & PINC Permutation Engine a.k.a Turbo Pascal Polimorphic Engine version 0.1 (c) by Duke/SMF Содержание: ~~~~~~~~~~~ 1. Вступление 1.1. От автора 1.2. Комплект поставки TPPE v0.1 2. Понемногу обо всем... 2.1. Немного о технологии TRANS 2.2. Немного о технологии PINC 2.3. Немного терминологии 3. Описание генератора TPPE 3.1. Содержимое файлов генератора 3.2. Назначение процедур генератора 4. Создание вируса при помощи TPPE 4.1. Доступные пользователю ресурсы TPPE 4.2. Как нужно оформлять вирус 5. Заключение 1.1. От автора ~~~~~~~~~~~~~~ Представляю вашему вниманию свой полиморфный генератор TPPE v0.1. Генератор целиком написан на языке Turbo Pascal ( 100% ! ) и предназначен для создания полиморфных вирусов на языке Turbo Pascal (благо, что желающих писать вирусы на паскале ещё хоть отбавляй :). Этот генератор является единственным полиморфным генератором, написанным на языке Turbo Pascal (по крайней мере, из известным мне генераторов). Таким образом, данная разработка является уникальной в своем роде. Недостатком создаваемых с помощью генератора TPPE v0.1 вирусов является невозможность мутирования вируса при отсутствии в PATH компилятора языка Pascal. 1.2. Комплект поставки : ~~~~~~~~~~~~~~~~~~~~~~~~ tppe.txt - данное описание tppe0.inc-tppe8.inc - генератор TPPE v0.1 tpped.inc - ключи компиляции tppek.inc - 40-битный ключ для шифровки dat2asm.exe - утилита для создания SFX-архива opt2inc.exe - утилита для создания INC-файлов demo_o.zip - пример вируса, созданного с помощью TPPE 2. Понемногу обо всем... ~~~~~~~~~~~~~~~~~~~~~~~~ 2.1. Немного о технологии TRANS ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Мой генератор использует технологию TRANS : Take RANdom Switch (Взять Случайный Переключатель). Идея TRANS заключается в перекомпиляции исходного текcта вируса каждый раз с новыми, выбираемыми случайным образом установками директив компилятора. Полученные при этом вирусы имеют разный размер и разное содержимое. При мутировании вируса используются переключатели директив компилятора. Стоит подробнее рассказать о них - что они означают и как влияют на работу компилятора. Символ "+" за директивой означает ее разрешение, а "-" - запрет. Отмеченные символом "*" директивы называются локальными и дейтсвуют до отмены. Описание на директивы дается при переключателе, установленном в "+", а в скобках - для случая "-". {$A+} - выравнивать данные награницу слова (байта) [при A+ все переменные и константы длиной более байта выравниваются по четным адресам и между ними образуются промежутки; в противном случае они размещаются одна за другой] {$B+} * - вычислять логические ыражения полностью (до получения результата) [генерируется машинный код разного содержания] {$D+} - разрешить (запретить) работу со встроенным отладчиком {$E+} - включить (отключить) режим программной эмуляции сопроцессора [при E+ к программе добавляется библиотека программной эмуляции сопроцессора] {$F+} - использовать дальнюю FAR (ближнюю NEAR) модель вызова {$G+} * - использовать (не использовать) полный набор команд микропроцессора Intel 80286 (микропроцессора Intel 8088) [эта директива появилась в TP 7.0] {$I+} * - включить (отключить) контроль операций ввода-вывода [при I+ генерируется дополнительный код, который проверяет ошибки после каждой операции ввода-вывода, при обнаружении ошибки программа останавливается] {$L+} - включить (не включать) локальные символы в информацию для отладчика {$N+} - использовать числовой сопроцессор (реализовать операции с плавающей точкой программно) {$O+} - разрешить (не разрешать) создание оверлейной структуры {$R+} * - включить (отключить) контроль границ диапазона {$S+} * - включить (отключить) контроль возможного переполнения стека [при S+ генерируется дополнительный код, проверяющий стек на переполнение] {$V+} * - включить (отключить) контроль длины строк при обращении к процедуре или функции {$X+} - использовать (не использовать) расширенный синтаксис [эта директива появилась в TP 7.0] В генераторе TPPE v0.1 используются директивы: A, B, C, D, E, F, G, I, L, N, O, P, Q, R, S, T, V и X. Условная компиляция - средство, позволяющее компилировать отдельные участки программ в случае выполнения некоторых заданных условий. Условная компиляция осуществляется путем включения в исходный текст программы специальных директив. Директивы условной компиляции подобны основным директивам компилятора и имеют формат: {$директива аргумент} Аргумент отделяется от директивы пробелом или табуляцией. В полиморфном генераторе TPPE v0.1 используются следующие условные директивы: {$IFOPT x+} - последующий код компилируется, если директива компилятора x активизирована (ключ включен) {$IFOPT x-} - последующий код компилируется, если директива компилятора x не активизирована (ключ отменен) {$ELSE} - последующий код компилируется, если предыдущая директива IFxxx не дает истинного значения {$ENDIF} - отмечает конец секции IFxxx или ELSE В качестве директивы x при условной компиляции могут использоваться директивы: B, D, F, I, L, N, P, S, T или V. 2.2. Немного о технологии PINC ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Еще одну технологию я обозвал "Permutation with INClude", что отражает ее суть :) PINC - это пермутирование с использованием INC-файлов. Идея заключается в таскании с собой исходных текстов вируса в виде INC-файлов и перекомпиляции вируса. Перед этим в текст вируса добавляется куча мусорных команд и подключаемые INC-файлы перемешиваются по типу конструктора. В итоге получаем пермутирующий вирус, у которого различается длина и начинка (в отличие от привычных для слуха полиморфиков, которые шифруют свое тело). Это вид полиморфизма является шестой (наивысшей ;) степенью полиморфности. Поскольку компилятор Turbo Pascal сам по себе великолепный антиэвристик/полиморфик, то получаем просто потрясающие результаты. Используя 20-25 INC-файлов можно не бояться никаких антивирусов (8-)) 2.3. Немного терминологии ~~~~~~~~~~~~~~~~~~~~~~~~~ Номерованные INC-файлы - файлы, имеющие имя вида tppe??.inc, где вместо ?? должны стоять цифры. Эти файлы могут содержать исходный текст процедур или функций, но ни как не подключаемые массивы данных. Для массивов данных используйте любые другие имена. Исходный PAS-файл - файл с расширением PAS :) , содержащий подключение всех необходимых INC-файлов, описание константы ComLen и вызов процедуры Starting в исполнимой части. Этот файл компилируется в Исходный Вирус. Исходный Вирус - копия вируса, получаемая после первой компиляции текста вируса. Является прародителем всех потомков данного вируса. В отличие от своих потомков этот файл не содержит мусорных участков кода, содержит SFX-архив в незашифрованном виде и имеет ключ шифровки из одних нулей. Это самый примитивный из всех клонов вируса и наверняка со временем будет детектироваться антивирусами. 3. Описание генератора TPPE ~~~~~~~~~~~~~~~~~~~~~~~~~~~ 3.1. Содержимое файлов генератора ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ tppe0.inc - описание констант, меток, переменных, forward tppe1.inc - процедура TPPE_1 tppe2.inc - процедура TPPE_2 tppe3.inc - процедура TPPE_3 tppe4.inc - процедура TPPE_4 tppe5.inc - процедура TPPE_5 tppe6.inc - процедура TPPE_6 tppe7.inc - процедура TPPE_Mutation tppe8.inc - функция DetectComp tpped.inc - ключи компиляции tppek.inc - 40-битный ключ для шифровки tppes.inc - подключаемый SFX-архив 3.2. Назначение процедур генератора: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TPPE_1 - распаковка SFX-архива TPPE_2 - создание ключа tppek.inc TPPE_3 - создание inc-файла с SFX-архивом TPPE_4 - создание inc-пустышек TPPE_5 - создание директив tpped.inc TPPE_6 - создание PAS-файла TPPE_Mutation - общая процедура 4. Создание вируса при помощи TPPE ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 4.1. Доступные пользователю ресурсы TPPE ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Список констант, процедур, функций и переменных, которые пользователь может использовать в создаваемых INC-файлах: const OldKey:array[1..40] of byte С этим ключом зашифрованы (xor'ены) данные текущего вируса. var NewKey:array[1..40] of byte А с этим ключом шифруются данные потомка (тоже текущего). При создании каждого нового потомка содержимое этого массива изменяется. function DetectComp:boolean; Если в PATH есть компиляторы tpc.exe или bpc.exe, то DetectComp=true и в переменной Compile возвращается имя найденного компилятора. Присваивает значение переменной Command. var Compile:string Имя доступного компилятора (если он есть) var Command:string После вызова функции DetectComp содержит путь к файлу COMMAND.COM. procedure TPPE_Mutation; Процедура мутирования вируса. В результате ее работы на диске создается файл _tppe_.exe, содержащий продукт мутации; с этим файлом пользователь и должен осуществлять дальнейшие действия по заражению файлов. Эту процедуру следует вызывать только при DetectComp=true; в противном случае будут лишь ошибки. Поэтому рекомендуется создавать процедуру Starting следующего вида: begin {начало Starting} if DetectComp=true then begin TPPE_Mutation; {действия по размножению} end else {чего-то еще}; end; {конец Starting} 4.2. Как нужно оформлять вирус ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Пишите свой вирус как ни в чем не бывало. Но только несколько нестандартным способом. Каждую процедуру или функцию желательно помещать в отдельный INC-файл. Старайтесь разбить большие процедуры на несколько более мелких процедур. Используйте в этих процедурах условные директивы - это повысит качество полиморфизма. После создания всех своих INC-файлов необходимо отредактировать tppe0.inc. В нем нужно изменить следующие области: {*********** Измените данные константы : ***********} {*}const MaxInc=9; {кол-во подключ.файлов} {*} {*} Use = 'uses dos;'; {*} {****************************************************} Вместо MaxInc следует написать номер самого последнего INC-файла; вместо Use - строку "uses ...", в которой вы подключаете модули (помимо модуля dos). Модуль dos должен подключаться ВСЕГДА. {*** Пользовательские Var, Const, Label, Forward: ***} {*}procedure Starting;forward; {*} {****************************************************} Здесь следует описать все ваши глобальные переменные, константы и метки, а также описать с использованием директивы forward все созданные вами процедуры и функции. Процедура Starting должна присутствовать во всех создаваемых вирусах. Комментарии со звездочками можно удалить с целью оптимизации размеров вируса. Если вы будете вносить изменения в любые другие места генератора, я не могу гарантировать ни малейшей работоспособности созданного вируса. В SFX-архив необходимо поместить все INC-файлы, необходимые для компиляции вируса, кроме файлов tpped.inc, tppek.inc и tppes.inc - эти файлы вирус впоследствии воссоздает сам. Если вы подключаете к вирусу готовый TPU-модуль, то так же поместите его в SFX-архив. Создать SFX-архив можно с помощью dat2asm+tasm+pklite или pkzip+zip2exe, который затем перегоняется в tppes.inc (с помощью opt2inc) и длина tppes.com записывается в ComLen в главной программе. Старайтесь не использовать комментарии в создаваемых INC-файлах - это позволит создать более компактный SFX-архив. Помните, что русский текст плохо пакуется (на фоне английских букв и цифр). Не стоит создавать более 40 INC-файлов (т.е. от с номерами 0 до 40) - некоторые потомки могут не откомпилироваться. В исполнимой части Исходного PAS-файла помимо вызова процедуры Starting могут использоваться любые другие команды (вызовы процедур и прочее). После компиляции Исходного PAS-файла все эти инструкции (естественно :) будут содержаться в Исходном Вирусе и исполняться при его запуске, но не будут содержаться в потомках вируса. Это позволяет создавать инсталляторы вирусов, которые будут выводить рекламные тексты, пояснительные сообщения и прочую муру... Правильно составленный Исходный PAS-файл должен выглядеть примерно так: uses dos; const ComLen=????; {здесь надо указать длину SFX-архива} {$I tppe0.inc} {$I tppe1.inc} {... и так далее со всеми прочими INC-файлами} begin Starting; end. 5. Заключение ~~~~~~~~~~~~~ Автор предоставляет всем желающим право использовать генератор TPPE v0.1 при условии, что его код не будет модифицироваться (в том числе, не будет удаляться строка '[TPPE 0.1] (c) by Duke/SMF'). Если вы распространяете генератор, то вы должны сохранять первоначальную комплектацию генератора. Просьба сообщать обо всех ошибках и пожелания автору по адресу smf@chat.ru Duke/SMF