Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: как защитить программу от снятия ее из списка задач ??  (Прочитано 19869 раз)
0 Пользователей и 1 Гость смотрят эту тему.
muzzy
Гость
« : 02-12-2005 01:50 » 

как защитить программу от снятия ее из списка задач ??
Записан
muzzy
Гость
« Ответ #1 : 02-12-2005 01:52 » 

из списка процессов CTRL+ALT+DEL
Записан
zubr
Команда клуба

by
Offline Offline
Пол: Мужской

« Ответ #2 : 02-12-2005 05:04 » 

Можно через перехват функции TerminateProcess
Записан
x77
Команда клуба

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #3 : 14-12-2005 07:15 » 

надо зарегестрировать программу, как системный сервис. посмотрите функцию RegisterSystemService или что-то подобное, она умеет это делать. + Application.ShowMainForm := FALSE.
Записан

zubr
Команда клуба

by
Offline Offline
Пол: Мужской

« Ответ #4 : 14-12-2005 18:14 » 

надо зарегестрировать программу, как системный сервис. посмотрите функцию RegisterSystemService или что-то подобное, она умеет это делать. + Application.ShowMainForm := FALSE.
Подскажи где искать функцию RegisterSystemService, в MSDN не нашел. И потом, если система запущена на правах админа, то не проблема сервис отключить.
Записан
jackSP
Гость
« Ответ #5 : 16-02-2006 10:47 » 

Попробуй нагло вырубать дспетчер задач
Записан
sega
Гость
« Ответ #6 : 17-02-2006 07:19 » 

вот небольшой примерчик
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;

« Последнее редактирование: 04-12-2007 19:58 от Алексей1153++ » Записан
jackSP
Гость
« Ответ #7 : 17-02-2006 10:03 » 

У меня в Дельфях 2005 это не проканывает...
Записан
zubr
Команда клуба

by
Offline Offline
Пол: Мужской

« Ответ #8 : 17-02-2006 17:54 » 

Функция RegisterServiceProcess только для Win9x!!!
Записан
zubr
Команда клуба

by
Offline Offline
Пол: Мужской

« Ответ #9 : 17-02-2006 18:06 » 

Вообще то чтобы просто убрать диспетчер задач, в WinXP этот вопрос решается до неприличия просто:
Код:
procedure TaskMgr(Status: Boolean);
var reg: TRegistry;
begin
    reg := TRegistry.Create;
    reg.RootKey := HKEY_CURRENT_USER;
    reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Policies\System', True);
    if Status then
         reg.WriteString('DisableTaskMgr', '1') //блокирует
    else
         reg.WriteString('DisableTaskMgr', '') //разблокирует
    reg.CloseKey;
end;
« Последнее редактирование: 04-12-2007 19:59 от Алексей1153++ » Записан
LixOi
Гость
« Ответ #10 : 17-02-2006 20:55 » 

Подключить к программе модуль NukaNaebuka
затем при создани  формы написать HideMePlease1.GoOn;
да и еще, перед этим в переменных объявить HideMePlease1:FucknTaskMgr;
Нажать Ф9
Записан
newmen_
Гость
« Ответ #11 : 21-02-2006 08:05 » 

zubr,
Для тех, кто использует оболочки (хотябы far) это не будет проблемой, там легко можно получить список процессов и завершить их)
Записан
zubr
Команда клуба

by
Offline Offline
Пол: Мужской

« Ответ #12 : 21-02-2006 08:34 » 

Цитата
Для тех, кто использует оболочки (хотябы far) это не будет проблемой, там легко можно получить список процессов и завершить их)
А кто спорит, это только чтобы убрать диспетчер задач, кардинально этот вопрос в WinNT можно решить только через перехват функции TerminateProcess.
Записан
PooH
Глобальный модератор

ru
Offline Offline
Пол: Мужской
... и можно без хлеба!


« Ответ #13 : 21-02-2006 08:35 » 

а можно перехватить что-то типа EnumProcess и спрятать её "на корню"
Записан

Удачного всем кодинга! -=x[PooH]x=-
x77
Команда клуба

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #14 : 28-02-2006 17:45 » 

содрано из DRKB.

Цитата
Как спрятать программу от TaskManager в WindowsXP и 2000
 Previous  Top  Next 

     
 


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

Код:
library hide;

uses
 Windows,
 SysUtils,
 ImageHlp,
 TlHelp32;

type SYSTEM_INFORMATION_CLASS = (
 SystemBasicInformation,
 SystemProcessorInformation,
 SystemPerformanceInformation,
 SystemTimeOfDayInformation,
 SystemNotImplemented1,
 SystemProcessesAndThreadsInformation,
 SystemCallCounts,
 SystemConfigurationInformation,
 SystemProcessorTimes,
 SystemGlobalFlag,
 SystemNotImplemented2,
 SystemModuleInformation,
 SystemLockInformation,
 SystemNotImplemented3,
 SystemNotImplemented4,
 SystemNotImplemented5,
 SystemHandleInformation,
 SystemObjectInformation,
 SystemPagefileInformation,
 SystemInstructionEmulationCounts,
 SystemInvalidInfoClass1,
 SystemCacheInformation,
 SystemPoolTagInformation,
 SystemProcessorStatistics,
 SystemDpcInformation,
 SystemNotImplemented6,
 SystemLoadImage,
 SystemUnloadImage,
 SystemTimeAdjustment,
 SystemNotImplemented7,
 SystemNotImplemented8,
 SystemNotImplemented9,
 SystemCrashDumpInformation,
 SystemExceptionInformation,
 SystemCrashDumpStateInformation,
 SystemKernelDebuggerInformation,
 SystemContextSwitchInformation,
 SystemRegistryQuotaInformation,
 SystemLoadAndCallImage,
 SystemPrioritySeparation,
 SystemNotImplemented10,
 SystemNotImplemented11,
 SystemInvalidInfoClass2,
 SystemInvalidInfoClass3,
 SystemTimeZoneInformation,
 SystemLookasideInformation,
 SystemSetTimeSlipEvent,
 SystemCreateSession,
 SystemDeleteSession,
 SystemInvalidInfoClass4,
 SystemRangeStartInformation,
 SystemVerifierInformation,
 SystemAddVerifier,
 SystemSessionProcessesInformation
);

_IMAGE_IMPORT_DESCRIPTOR = packed record
  case Integer of
   0:(
    Characteristics: DWORD);
   1:(
    OriginalFirstThunk:DWORD;
    TimeDateStamp:DWORD;
    ForwarderChain: DWORD;
    Name: DWORD;
    FirstThunk: DWORD);
   end;
IMAGE_IMPORT_DESCRIPTOR=_IMAGE_IMPORT_DESCRIPTOR;
PIMAGE_IMPORT_DESCRIPTOR=^IMAGE_IMPORT_DESCRIPTOR;

PFARPROC=^FARPROC;

procedure ReplaceIATEntryInOneMod(pszCallerModName: Pchar; pfnCurrent: FarProc; pfnNew: FARPROC; hmodCaller: hModule);
var     ulSize: ULONG;
   pImportDesc: PIMAGE_IMPORT_DESCRIPTOR;
    pszModName: PChar;
        pThunk: PDWORD; ppfn:PFARPROC;
        ffound: LongBool;
       written: DWORD;
begin
 pImportDesc:= ImageDirectoryEntryToData(Pointer(hmodCaller), TRUE,IMAGE_DIRECTORY_ENTRY_IMPORT, ulSize);
  if pImportDesc = nil then exit;
  while pImportDesc.Name<>0 do
   begin
    pszModName := PChar(hmodCaller + pImportDesc.Name);
     if (lstrcmpiA(pszModName, pszCallerModName) = 0) then break;
    Inc(pImportDesc);
   end;
  if (pImportDesc.Name = 0) then exit;
 pThunk := PDWORD(hmodCaller + pImportDesc.FirstThunk);
  while pThunk^<>0 do
   begin
    ppfn := PFARPROC(pThunk);
    fFound := (ppfn^ = pfnCurrent);
     if (fFound) then
      begin
       VirtualProtectEx(GetCurrentProcess,ppfn,4,PAGE_EXECUTE_READWRITE,written);
       WriteProcessMemory(GetCurrentProcess, ppfn, @pfnNew, sizeof(pfnNew), Written);
       exit;
      end;
    Inc(pThunk);
   end;
end;

var
 addr_NtQuerySystemInformation: Pointer;
 mypid: DWORD;
 fname: PCHAR;
 mapaddr: PDWORD;
 hideOnlyTaskMan: PBOOL;

function myNtQuerySystemInfo(SystemInformationClass: SYSTEM_INFORMATION_CLASS; SystemInformation: Pointer;
 SystemInformationLength:ULONG; ReturnLength:PULONG):LongInt; stdcall;
label onceagain, getnextpidstruct, quit, fillzero;
asm
 push ReturnLength
 push SystemInformationLength
 push SystemInformation
 push dword ptr SystemInformationClass
 call dword ptr [addr_NtQuerySystemInformation]
 or eax,eax
 jl quit
 cmp SystemInformationClass, SystemProcessesAndThreadsInformation
 jne quit

 onceagain:
 mov esi, SystemInformation

 getnextpidstruct:
 mov ebx, esi
 cmp dword ptr [esi],0
 je quit
 add esi, [esi]
 mov ecx, [esi+44h]
 cmp ecx, mypid
 jne getnextpidstruct
 mov edx, [esi]
 test edx, edx
 je fillzero
 add [ebx], edx
 jmp onceagain

 fillzero:
 and [ebx], edx
 jmp onceagain

 quit:
 mov Result, eax
end

procedure InterceptFunctions;
var hSnapShot: THandle;
         me32: MODULEENTRY32;
begin
 addr_NtQuerySystemInformation:=GetProcAddress(getModuleHandle('ntdll.dll'),'NtQuerySystemInformation');
 hSnapShot:=CreateToolHelp32SnapShot(TH32CS_SNAPMODULE,GetCurrentProcessId);
  if hSnapshot=INVALID_HANDLE_VALUE then exit;
   try
    ZeroMemory(@me32,sizeof(MODULEENTRY32));
    me32.dwSize:=sizeof(MODULEENTRY32);
    Module32First(hSnapShot,me32);
     repeat
      ReplaceIATEntryInOneMod('ntdll.dll',addr_NtQuerySystemInformation,@MyNtQuerySystemInfo,me32.hModule);
     until not Module32Next(hSnapShot,me32);
   finally
    CloseHandle(hSnapShot);
   end;
end;

procedure UninterceptFunctions;
var hSnapShot: THandle;
         me32: MODULEENTRY32;
begin
 addr_NtQuerySystemInformation:=GetProcAddress(getModuleHandle('ntdll.dll'),'NtQuerySystemInformation');
 hSnapShot:=CreateToolHelp32SnapShot(TH32CS_SNAPMODULE,GetCurrentProcessId);
  if hSnapshot=INVALID_HANDLE_VALUE then exit;
  try
   ZeroMemory(@me32,sizeof(MODULEENTRY32));
   me32.dwSize:=sizeof(MODULEENTRY32);
   Module32First(hSnapShot,me32);
    repeat
     ReplaceIATEntryInOneMod('ntdll.dll',@MyNtQuerySystemInfo,addr_NtQuerySystemInformation,me32.hModule);
    until not Module32Next(hSnapShot,me32);
  finally
   CloseHandle(hSnapShot);
  end;
end;


var HookHandle: THandle;

function CbtProc(code: integer; wparam: integer; lparam: integer):Integer; stdcall;
begin
 Result:=0;
end;

procedure InstallHook; stdcall;
begin
 HookHandle:=SetWindowsHookEx(WH_CBT, @CbtProc, HInstance, 0);
end;

var hFirstMapHandle:THandle;

function HideProcess(pid:DWORD; HideOnlyFromTaskManager:BOOL):BOOL; stdcall;
var addrMap: PDWORD;
       ptr2: PBOOL;
begin
 mypid:=0;
 result:=false;
 hFirstMapHandle:=CreateFileMapping($FFFFFFFF,nil,PAGE_READWRITE,0,8,'NtHideFileMapping');
  if hFirstMapHandle=0 then exit;
 addrMap:=MapViewOfFile(hFirstMapHandle,FILE_MAP_WRITE,0,0,8);
  if addrMap=nil then
   begin
    CloseHandle(hFirstMapHandle);
    exit;
   end;
 addrMap^:=pid;
 ptr2:=PBOOL(DWORD(addrMap)+4);
 ptr2^:=HideOnlyFromTaskManager;
 UnmapViewOfFile(addrMap);
 InstallHook;
 result:=true;
end;

exports
 HideProcess;

var
 hmap: THandle;

procedure LibraryProc(Reason: Integer);
begin
 if Reason = DLL_PROCESS_DETACH then
  if mypid > 0 then
   UninterceptFunctions()
 else
  CloseHandle(hFirstMapHandle);
end;

begin
 hmap:=OpenFileMapping(FILE_MAP_READ,false,'NtHideFileMapping');
  if hmap=0 then exit;
  try
   mapaddr:=MapViewOfFile(hmap,FILE_MAP_READ,0,0,0);
    if mapaddr=nil then exit;
   mypid:=mapaddr^;
   hideOnlyTaskMan:=PBOOL(DWORD(mapaddr)+4);
    if hideOnlyTaskMan^ then
     begin
      fname:=allocMem(MAX_PATH+1);
      GetModuleFileName(GetModuleHandle(nil),fname,MAX_PATH+1);
       if not (ExtractFileName(fname)='taskmgr.exe') then exit;
     end;
   InterceptFunctions;
  finally
   UnmapViewOfFile(mapaddr);
   CloseHandle(Hmap);
   DLLProc:=@LibraryProc;
  end;
end.

Для её использования нужно вызвать функцию HideProcess:

function HideProcess(pid:DWORD; HideOnlyFromTaskManager:BOOL):BOOL,

где
pid - идентификатор процесса, который нужно спрятать

HideOnlyFromTaskManager - нужно ли прятать процесс только от TaskManager'а, или же от остальных программ, использующих для получения списка процессов функцию NtQuerySystemInformation из ntdll.dll.

Пример использования:

function HideProcess(pid: DWORD; HideOnlyFromTaskManager: BOOL): BOOL; stdcall; external 'nthide.dll';
< skipped >
procedure proc;
begin
 HideProcess(GetCurrentProcessId, false); //это спрячет текущий процесс
end;


Автор Curve
Взято из http://forum.sources.ru
« Последнее редактирование: 04-12-2007 20:01 от Алексей1153++ » Записан

x77
Команда клуба

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #15 : 28-02-2006 17:51 » 

системные сервисы действительно отгнили с приходом нт. mea culpa. что касается же всех осей на её основе, то смысл в том, чтобы гнусно обмануть NtQuerySystemInformation из ntdll.dll. в сабже выше умный перец рассказывает, как он это сделал.
Записан

x-andr
Гость
« Ответ #16 : 02-02-2007 05:57 » 

Так спрячешь процесс только от стандартного Дисп. задач, а к примеру Process Explorer
от Mark`а Russinovich`а вскровно отобразит.
Записан
PooH
Глобальный модератор

ru
Offline Offline
Пол: Мужской
... и можно без хлеба!


« Ответ #17 : 02-02-2007 06:16 » 

x-andr, если  Process Explorer юзает NtQuerySystemInformation, то не отобразит.
Записан

Удачного всем кодинга! -=x[PooH]x=-
DemonicAlligator
Гость
« Ответ #18 : 06-02-2007 09:37 » 

Воткнуть свой процесс в чужое адресное пространство...
Записан
x77
Команда клуба

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #19 : 07-02-2007 11:37 » 

Синий Аллигатор, я что-то слышал о том, чтобы внедрять свой процесс в АП, занятую чужой длл... на delphikingdom.com даже были примеры. кажеццо.
Записан

DemonicAlligator
Гость
« Ответ #20 : 07-02-2007 14:36 » 

на wasm.ru примеры есть... тока антивири ругаца будут Улыбаюсь
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #21 : 04-12-2007 20:04 » new

Offtopic:

тема для отдельной статьи ) Тем более, что периодически такие вопросы
проскакивают
Поставлю в угол.
Записан

Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines