VR
Virtual Reality On-line   Журнал
Новости   |     Журнал    |    Хаkер    |     Магазин   |   Проекты
[   Вход    ]
[Kарта сайтa]

[ Download  ]
[  Конкурс  ]
[ Анекдоты  ]
[  Ссылки   ]
[  Реклама  ]
[ Почтальон ]
[ О проекте ]






TopList
Приколы с помощью Delphi.
Общие приколы
:
Logo

Автор: Артём Сухобоков chimaf@mail.ru или artem2@beep.ru

Я начинаю писать цикл статей о том, как можно программно поприкалываться в Windows. Привет чукотским виримейкерам и троянописателям :) . В принципе все действия, которые я буду описывать, не являются сами по себе разрушительными, но могут попортить очень много нервов юзерам, особенно неопытным. Я надеюсь сделать что-то вроде коллекции приколов. Все программы будут писаться на Delphi. Если Вы хотите дополнить коллекцию - пишите мне на мыло.
Logo
Рис. 1 Главная форма примера.

Начнем с общих вопросов.

1) Невидимка

Делаем свою программу невидимой в списке запущенных программ по Ctrl+Alt+Del

Для этого нужно загрузить функцию RegisterServiceProcess из KERNEL32.DLL.

function RegisterServiceProcess (dwProcessID, dwType:DWord) : DWORD

У этой функции 2 параметра типа Dword:

  • dwProcessID-ID процесса, вызывающего функцию.
  • dwType-0 или 1. Если 1, то невидимость включена, 0-выключена.

Пишем код:

…
type
   //тип загружаемой процедуры
  TRegisterServiceProcess = function (dwProcessID, dwType:DWord) : DWORD; stdcall;
…
// включение невидимости
procedure TForm1.Button1Click(Sender: TObject);
var hNdl :THandle; //хзндл DLL
    R: TRegisterServiceProcess; //переменная процедурного типа
begin
if not(csDesigning in ComponentState) then //если находимся не в Delphi IDE
  begin
  hNdl:=LoadLibrary('KERNEL32.DLL'); //загружаем DLL
  R:=GetProcAddress(hNdl, 'RegisterServiceProcess'); //получаем функцию из DLL
  R(GetCurrentProcessID, 1); //вызываем функцию
  FreeLibrary(hNdl); //освобождаем DLL
  end;
end;

//отключение невидимости
procedure TForm1.Button2Click(Sender: TObject);
var hNdl :THandle; // хзндл DLL
    R: TRegisterServiceProcess; //переменная процедурного типа
begin
if not(csDesigning in ComponentState) then // если находимся не в Delphi IDE
  begin
  hNdl:=LoadLibrary('KERNEL32.DLL'); // загружаем DLL
  R:=GetProcAddress(hNdl, 'RegisterServiceProcess'); // получаем функцию из DLL
  R(GetCurrentProcessID, 0); // вызываем функцию
  FreeLibrary(hNdl); // освобождаем DLL
  end;
end;

Я отключил невидимость при запуске программы в Delphi IDE, потому что тогда невидимым станет сам Delphi.

Эта невидимость работает только по Ctrl-Alt-Del. Продвинутые же программы, которые используют переборку всех процессов, нашу программу увидят. Например, я для вычисления троянов использую CodeStuff Starter.

2) Отключение комбинаций клавиш Ctrl-Alt-Del, Alt-Tab, Ctrl-Esc:

Для этого мы воспользуемся функцией SystemParametersInfo. Эта функция позволяет просматривать и изменять системные параметры.

BOOL SystemParametersInfo(
    UINT uiAction,	// системный параметр для изменения
    UINT uiParam,	// зависит от производимого действия
    PVOID pvParam,	// зависит от производимого действия
    UINT fWinIni 	// обновлять профиль юзера или нет
   );

Если функция сработала без ошибок, то она возвращает ненулевое значение, иначе - ноль.

В первый параметр передаем SPI_SCREENSAVERRUNNING, во второй 1, если отключаем клавиши, и 0, если включаем, 3-ий и 4-ый параметры – нули.

Вообще функция SystemParametersInfo очень полезная и мы часто ее будем использовать.

//Отключение комбинаций клавиш Ctrl-Alt-Del, Alt-Tab, Ctrl-Esc
procedure TForm1.Button3Click(Sender: TObject);
begin
SystemParametersInfo(SPI_SCREENSAVERRUNNING,1,0,0);
end;

//Включение комбинаций клавиш Ctrl-Alt-Del, Alt-Tab, Ctrl-Esc
procedure TForm1.Button4Click(Sender: TObject);
begin
  SystemParametersInfo(SPI_SCREENSAVERRUNNING,0,0,0);
end;

3) Изменение надписи на окнах открытых приложений

Пишем код:

procedure TForm1.Button5Click(Sender: TObject);
Var Wnd:THandle; //хэндл окна
begin
Wnd:=findWindow(0,PChar(Edit1.text)); //ищем окно поего названию
if (Wnd<>0) then SetWindowText(Wnd,PChar(Edit2.text)) //изменяем название окна
  else MessageBox(Application.handle,'Нет такого окна','Ошибка',MB_OK);
end;

Теперь все по-порядку. Функция

HWND FindWindow(
    LPCTSTR lpClassName,	// Указатель на строку-название класса окна
    LPCTSTR lpWindowName // Указатель на строку-название окна
   ); 

Эта функция, если находит окно, соответствующее данному названию класса окна и названию окна, возвращает его хэндл. Если такого окна нет, то функция возвращает 0. Мы не знаем название класса окна, поэтому в первый параметр мы передаем 0.

Функция

BOOL SetWindowText(
    HWND hWnd,	//хэндл окна 
    LPCTSTR lpString  // указатель на строку-новое название окна
   );

Эта функция позволяет изменить название окна, хэндл которого передается в первом параметре на строку, указатель на которую передается во втором параметре. Она возвращает ненулевое число, если завершается успешно. В случае ошибки она возвращает 0. Чтобы узнать информацию об ошибке нужно вызвать функцию GetLastError.

На сегодня хватит. В следующий раз я расскажу об окнах, которые невозможно закрыть штатными средствами Windows и о цветомузыке на клавиатуре.

 Исходники примера для Delphi 6 забирай здесь


Design by FMk group ©
Copyright©: Horrific aka Флёнов Михаил ©