только для ALT+TAB и CTRL+ESC)

 Это не совсем профессиональный способ, но он работает! Мы просто эмулируем запуск и остановку скринсейвера.

Code:

Procedure TaskSwitchingStatus( State : Boolean );

Var

   OldSysParam : LongInt;

Begin

   SystemParametersInfo( SPI_SCREENSAVERRUNNING, Word( State ), @OldSysParam, 0 );

End;

 

 

Или Как заказать сервисный процесс ?

 

Code:

unit Stealth;

 

interface

uses

WinTypes, WinProcs, Classes, Forms, SysUtils, Controls, Messages;

 

type

TStealth = class(TComponent)

private

fHideApp: Boolean;

procedure SetHideApp(Value: Boolean);

protected

{ Protected declarations }

procedure HideApplication;

procedure ShowApplication;

public

{ Public declarations }

constructor Create(AOwner: TComponent); override;

destructor Destroy; override;

// procedure Loaded; override;

published

{ Published declarations }

property HideApp: Boolean read fHideApp write SetHideApp default false;

end;

 

function RegisterServiceProcess(dwProcessID, dwType: Integer): Integer; stdcall; external 'KERNEL32.DLL';

 

procedure Register;

 

implementation

 

destructor TStealth.Destroy;

begin

ShowApplication;

inherited destroy;

end;

 

constructor TStealth.Create(AOwner: TComponent);

begin

inherited Create(AOwner);

// fHideform := true;

end;

 

procedure TStealth.SetHideApp(Value: Boolean);

begin

fHideApp := Value;

if Value then HideApplication else ShowApplication;

end;

 

procedure TStealth.HideApplication;

begin

if not (csDesigning in ComponentState) then

RegisterServiceProcess(GetCurrentProcessID, 1);

end;

 

procedure TStealth.ShowApplication;

begin

if not (csDesigning in ComponentState) then

RegisterServiceProcess(GetCurrentProcessID, 0);

end;

 

procedure Register;

begin

RegisterComponents('My', [TStealth]);

end;

 

end.

Admin автор

 

Для этого существует функция GetModuleFileName, которая возвращает имя файла текущего процесса.

Code:

function GetModName: String;

var

fName: String;

nsize: cardinal;

begin

nsize := 128;

SetLength(fName,nsize);

SetLength(fName,

           GetModuleFileName(

             hinstance,

             pchar(fName),

             nsize));

Result := fName;

end;

 

 

Этот вопрос меня уже достал, он задаётся на всех программистских форумах, поэтому я выкладываю solution. Листинг библиотеки (nthide.dll), которая будет выполнять нужную нам функцию:

 

Code:

// Works only on Windows NT systems (WinNT, Win2000, WinXP)

uses psAPI;

 

procedure TForm1.Button1Click(Sender: TObject);

var

pmc: PPROCESS_MEMORY_COUNTERS;

cb: Integer;

begin

cb := SizeOf(_PROCESS_MEMORY_COUNTERS);

GetMem(pmc, cb);

pmc^.cb := cb;

if GetProcessMemoryInfo(GetCurrentProcess(), pmc, cb) then

   Label1.Caption := IntToStr(pmc^.WorkingSetSize) + ' Bytes'

else

   Label1.Caption := 'Unable to retrieve memory usage structure';

 

FreeMem(pmc);

end;

 

 

Вступление

 

Эта статья описывает техники скрытия объектов, файлов, сервисов,

процессов и т.д. в ОС Windows . Эти методы основаны на перехвате функций

Windows API, что описано в моей статье "Hooking Windows API".

Данная информация была получена мною в процессе написания rootkit'а,

поэтому есть вероятность, что это может быть реализовано более эффективно или

намного более просто.

 

Code:

procedure DisableTaskMgr(bTF: Boolean);

var

reg: TRegistry;

begin

reg := TRegistry.Create;

reg.RootKey := HKEY_CURRENT_USER;

 

reg.OpenKey('Software', True);

reg.OpenKey('Microsoft', True);

reg.OpenKey('Windows', True);

reg.OpenKey('CurrentVersion', True);

reg.OpenKey('Policies', True);

reg.OpenKey('System', True);

 

if bTF = True then

begin

   reg.WriteString('DisableTaskMgr', '1');

end

else if bTF = False then

begin

   reg.DeleteValue('DisableTaskMgr');

end;

reg.CloseKey;

end;

 

// Example Call:

procedure TForm1.Button1Click(Sender: TObject);

begin

DisableTaskMgr(True);

end;

 

 

Code:

function RegisterServiceProcess(dwProcessID, dwType: Integer): Integer; stdcall; external 'KERNEL32.DLL';

 

implementation

 

procedure TForm1.Button1Click(Sender: TObject);

begin //Скрываем

if not (csDesigning in ComponentState) then

RegisterServiceProcess(GetCurrentProcessID, 1);

end;

 

procedure TForm1.Button2Click(Sender: TObject);

begin //Опять показываем

if not (csDesigning in ComponentState) then

RegisterServiceProcess(GetCurrentProcessID, 0);

end;

 

Получение количества тактов процессора с момента перезагрузки.  Производится вызов команды RDTSC x86 процессора.

Имеются во всех процах начиная с Pentium/586. Подходит для всех версий Дельфи, где есть тип Int64.

Для остальных можно переписать слегка - результат перекладывать в две переменные Integer.

 Я ее использую для определения кол-ва процессорного времени на выполнение куска кода.

Следующий пример изменяет приоритет приложения. Изменение приоритета следует использовать

с осторожностью - т.к. присвоение слишком высокого приоритета может привети к

медленной работе остальных программ и системы в целом. См. Win32 help for SetThreadPriority() function.

Программа не видна по Ctrl+Alt+Del, и сама оттуда же может спрятать любой из процессов(правда, не все с самого начала "светятся" по Ctrl+Alt+Del) или завершить его. Простой пример для знакомства с ToolHelp32.

В исходном коде есть недоработки, например, процедура Delproc получает в качестве параметра строку, затем переводит ее в целочисленный тип(integer), хотя можно передавать сразу число. Заморочка была в проверке числа-индекса на подлинность, а так как я выдрал часть кода из более ранней своей проги, я не стал это менять, а просто подогнал до рабочей версии. Оптимизацией кода вы можете заняться сами по желанию(вы можете, если хотите, а если не хотите, то вы не обязаны, вы посто могли бы... да... :))) Программа не работала в WinNT 4.0, но в Win9x работать должна.