DELPHI і ХАКЕР. Як помститися “ворогу” засобами Windows.pas

Справі, як відомо, час, але і потісі знову ж годину :). При чому тут модуль Windows? А кому захочеться тягнути на “ворожий” комп’ютер софтину в 400 КБ, яка тільки й може, що заховати панель завдань і іконки? Правильно, тому, хто не знає властивостей консольного застосування. Але ми-то з вами тягнемося до знань ;), так що зараз створимо повноцінну програму, чиї налаштування можна буде редагувати, і вона буде важити рівно в 40 разів менше, ніж описана вище.


Отже, створю консольну програму [File> New> Other> Console Application]. Тільки цур! – Жарт буде безболісною, а то можна і в ніс виклопотати.
Отже, наш виконуваний файл можна буде налаштовувати. Логічніше всього це зробити ззовні, тобто з файлу з конфіг, щоб не світитися під “ворожої” системі MS-DOSовскім віконцем консолі. Тому видаліть рядок “{$ Apptype Console}” і в розділі Uses залиште тільки модуль Windows. Тепер ненадовго скрутіть Delphi і за допомогою Блокнота створіть в тій же директорії, що і наш додаток, текстовий файл наступного змісту:


0 {приховати Crl + Alt + Del}
1 {міняти системні кольори}
0 {міняти місцями кнопки миші}
1 {показувати повідомлення: “Windows must die!”}
1 {вимкнутися після одного сеансу}


Назвіть його, скажімо, “Config.txt”. Він складається з п’яти рядків; кожен рядок відповідає за “свою” функцію. 0 – не задіяти дану “опцію” під час роботи програми, 1 – задіяти (false і true). Праворуч Без пробілів поміщаються коментарі, щоб ми не забули, який рядок за що відповідає. (Тут показаний приклад налаштувань, де відключення Ctr + Alt + Del і зміна кнопок миші неактивні, а інше працює.)
Таким чином, потрібно лише зв’язатися з даним файлом, перебрати кожен рядок – за допомогою циклу for … to, як ви вже здогадалися. Коли вся інформація буде прийнята додатком, її доведеться постійно тримати в пам’яті за допомогою динамічного масиву.
Я думаю, вам не потрібно пояснювати, що є динамічний масив, але, щоб освіжити свою і вашу пам’ять, нагадаю. Продекларує:


JokeType: Array[1..10] of Boolean;


Тут міститься 10 значень, 10 різних змінних типу boolean, здатних – вам відомо – приймати тільки значення false або true. І даний-то масив пам’ятає це значення персонально для кожного з своїх десяти членів. (Я навмисно зробив їх так багато, щоб спонукати вас додати в програму нові функції). Вказавши в квадратних дужках номер цікавить нас змінної, ми отримуємо для неї повертане значення true / false, відповідне їй. Інше, думаю, зрозуміло з лістингу.


program Joke;

uses
Windows;

const
SysColorArray: array [0..13] of Integer = (COLOR_ACTIVEBORDER, COLOR_ACTIVECAPTION, COLOR_APPWORKSPACE, COLOR_BACKGROUND, COLOR_BTNFACE, COLOR_BTNTEXT, COLOR_CAPTIONTEXT, COLOR_INACTIVEBORDER, COLOR_INFOTEXT, COLOR_MENU, COLOR_MENUTEXT, COLOR_WINDOW, COLOR_WINDOWFRAME, COLOR_WINDOWTEXT);
ColorArray: array [0..12] of Integer = (16776960, 0, 16711680, 65535, 16711935, 32768, 8388608, 255, 12632256, 16777215, 15780518, 128, 32896);
/ / Кольори зберігаються в модулі Graphics.pas,
/ / Але ми не будемо використовувати його,
/ / А запишемо кольору в цифровому вигляді.

var
F: TextFile; / / наш файл з налаштуваннями
S: ShortString;
i: Smallint;
h: hwnd;
JokeType: Array [1 .. 10] of Boolean; / / наш масив

function CheckLine(Line: ShortString): Boolean;
var
n1,n2: Smallint;
begin
/ / Видаляємо з рядка коментарі
Result:=false;
n1:=pos({,Line);
n2:=pos(},Line);
delete(Line, n1, n2);
if Line=1 then result:=true;
end;

begin
AssignFile (F, config.txt); / / єднаємося з файлом
Reset (F); / / переміщаємося в початок файлу
for i: = 1 to 10 do begin / / читаємо всі рядки
ReadLn(F, s);
JokeType[i]:=CheckLine(S);
end;
CloseFile (f); / / від’єднуємося
/ / Починаємо жартувати 🙂
Randomize;
if JokeType [1] then / / відключаємо Ctrl + Alt + Del
SystemParametersInfo(SPI_SCREENSAVERRUNNING, 1, 0, 0);
/ / Запускаємо нескінченний цикл:
while true do begin
Sleep (10000); / / чекаємо 10 секунд
/ / Змінюємо системні кольори:
if JokeType[2] then
SetSysColors(1, SysColorArray[random(13)], ColorArray[random(12)]);
/ / Змінюємо кнопки миші місцями
if JokeType[3] then begin
SwapMouseButton(true);
Sleep(3000);
SwapMouseButton(false);
end;
if JokeType[4] then MessageBox(h,Windows must die!,Error,0);
if JokeType [5] then Halt; / / вимикати
end;
end.


Ось і все. Ще треба б наше дітище в StartUp запхнути, але про це – наступного разу.

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*