В этой лабораторной работе реализовано двойное гаммирование. Программа дважды просит пользователя ввести строку-ключ для шифрования. Затем каждый раз введённая строка преобразуется в число, которым инициализируется генератор псевдослучайных чисел. После этого генератор порождает последовательность псевдослучайных чисел такой же длины, что и длина файла и потом каждый байт этой последовательности накладывается по логической операции XOR с соответствующим байтом файла. Для надёжности опять зашифруем уже зашифрованный файл таким же образом . Дешифрование происходит точно также и поэтому одна и та же программа используется для шифрования и для дешифрования.
Скачать лабораторную работу № 1 (4,13 КБ)
Этим методом могут быть инфицированы даже антивирусы, которые проверяют свой код на целостность, так как запускаемая вирусом программа имеет в точности такой же код, как и до инфицирования [1].
1. Vir.exe - программа-заразитель DOS exe-файла.
2. Vpatch.vrs - вирусная закладка, требующая ввода
пароля для продолжения работы заражённой
программы. Это переименнованный exe-файл Vpatch.exe.
3. Unvir.exe (необязательно) -
программа-обеззараживатель DOS exe-файла.
Обратна Vir.exe.
4. Сам заражаемый DOS exe-файл (возможно, с оверлеями).
Условно назовём его Victim.exe. В качестве него можно
применить tpx.exe, bp.exe, tc.exe, bc.exe, fox.exe, foxpro.exe - foxpro.ovl,
foxprox.exe.
Программы лабораторной работы написаны на Паскале.
Запускаем Vir.exe, чтобы заразить Victim.exe. Vir.exe
открывает файл Victim.exe и побайтно считывает,
начиная с его нулевого смещения, участок, равный
по длине Vpatch.vrs, записывая каждый считанный байт
за конец Victim.exe.
Затем Vir.exe побайтно записывает в Victim.exe, начиная с
его нулевого смещения, содержимое файла Vpatch.vrs.
После этого Vir.exe внедряет в теперь уже заражённый
файл Victim.exe в определённые его участки его же имя
("Victim.exe") и зашифрованный пароль.
И, наконец, Vir.exe шифрует Victim.exe, начиная со
смещения, равному по длине Vpatch.vrs, методом
гаммирования с использованием генератора
псевдослучайных чисел.
Запускаем заражённый Victim.exe. Сначала управление получает внедрённый в Victim.exe (начиная с его нулевого смещения) переименованный исполняемый файл Vpatch.vrs. Внедрённый Vpatch.vrs сначала выполняет предусмотренные вредоносные действия - здесь просит ввести пароль и, в случае совпадения, продолжает работу.
Если введённый пароль правильный, то
внедрённый Vpatch.vrs открывает файл Victim.exe, из
которого он был запущен на исполнение, и
восстанавливает Victim.exe на жёстком диске в
исходное незаражённое состояние путём
перемещения с конца Victim.exe куска Victim.exe, равного по
длине Vpatch.vrs, на начало Victim.exe.
После этого внедрённый Vpatch.vrs запускает EXEC'ом
Victim.exe. Когда Victim.exe заканчивает работу, то он
возвращает управление заснувшему в оперативной
памяти внедрённому Vpatch.vrs. Внедрённый Vpatch.vrs опять
возвращает Victim.exe в заражённое состояние по
алгоритму Vir.exe, но только используя временный
файл, создаваемый на жёстком диске в качестве
промежуточного буфера. После этого внедрённый
Vpatch.vrs заканчивает свою работу и возвращает
управление операционной системе.
Скачать лабораторную работу № 2 (10,4 КБ)
1. Vir3.exe - программа-заразитель DOS exe-файла.
2. Vpatch3.vrs - вирусная закладка, требующая ввода
пароля для продолжения работы заражённой
программы. Это переименнованный exe-файл Vpatch3.exe.
3. Unvir.exe (необязательно) -
программа-обеззараживатель DOS exe-файла.
Совершенно та же, что и в лабораторной работе
№ 2. Обратна Vir3.exe.
4. Сам заражаемый DOS exe-файл (возможно, с оверлеями).
Условно назовём его Victim.exe. В качестве него можно
применить tpx.exe, bp.exe, tc.exe, bc.exe, fox.exe, foxpro.exe - foxpro.ovl,
foxprox.exe.
Программы лабораторной работы написаны на Паскале.
Эта лабораторная работа практически идентична
лабораторной работе № 2, за исключением
выполняемых вирусом действий. Если во 2
лабораторной работе вирус запускал заражённую
программу после ввода правильного пароля, то
здесь вирус используется для "привязки"
заражённой программы к данному компьютеру для
защиты этой программы от несанкционированного
копирования.
В качестве критерия уникальности в лабораторной
работе № 3 использована сумма байтов сегмента по
адресу С000 (при адресации реального режима). Этот
сегмент относится к области ROM BIOS видеокарты.
Эта сумма проявила себя уникальной, хотя я не
могу гарантировать, что она никогда не совпадёт
на каких-нибудь 2 компьютерах. Скорее всего, ROM BIOS
видеокарты имеет всё-таки что-то вроде
уникального серийного номера, но его смещение в
памяти для видеокарт разных фирм разное.
Суммируя байты всего сегмента, удаётся таким
образом не зависеть от его точного смещения и тем
не менее получить признак уникальности. Я
обнаружил, что значение этой суммы зависит не
только от компьютера, но даже от текущего
пользователя Windows! Т.е. "привязанная
программа" не будет работать не только на
другом компьютере, но даже и на этом, если зайти
под другим пользователем. Я написал 2 программы,
каждая из которых суммирует байты сегмента по
адресу С000 (при адресации реального режима), одна на Си (16-битная) и вторая на Паскале.
Запуская одну из программ на разных компьютерах,
можно проверить, разные ли она возвращает суммы.
Если суммы возвратятся всё-таки одинаковые (т. е.
не уникальные для каждого компьютера) то это
значит, что уникальный серийный номер ROM BIOS
видеокарты не попал в этот сегмент. В этом случае
можно изменить в файле Mlimits.txt (из которого
программа считывает адрес сегмента, начальное и
конечное смещение в сегменте) соответствующие
начальные и конечные адреса суммирования и
проверять любые участоки оперативной памяти в
пределах первого мегабайта, начиная со смежных с
С000, до тех пор, пока возвращаемые суммы на 2
компьютерах не будут разными.
Скачать лабораторную работу № 3 (11 КБ)
Эта лабораторная работа не сдаётся, а рассказывается на экзамене. Для её выполнения необходим файл pgp.exe и больше ничего. Для получения помощи вызываем pgp -h и pgp -k. Сначала генерируем две пары ключей через pgp -kg. Шифруем какой-нибудь файл через pgp -e textfile her_userid [other userids] (produces textfile.pgp). Дешифруем зашифрованный файл через pgp -s textfile [-u your_userid] (produces textfile.pgp). Для шифрования или дешифрования необходим свой секретный ключ и чужой открытый. Соответствующие ключи на момент совершения соответствующего действия должны находиться в той же папке, что и pgp.exe и обрабатываемый файл.
Скачать лабораторную работу № 4 (77,6 КБ вместе с pgp.exe)
1. Компьютерные вирусы. Взгляд изнутри. (И. А. Гульев).
2. Библиотека системного программиста. (А. Фролов, Г. Фролов)