Process Antikill

dział ogólny

Process Antikill

Nowy postprzez czakll » piątek, 8 sierpnia 2008, 13:17

Witam, widzialem kiedys kod zrodlowy komponentu do delphi, ktory umozliwial zalozenie hook'a na proces, uniemozliwiajac jego zabicie przez obcy program. Da sie takie cos napisac w BCB?

P.S. Szukam tego kodu na delphi, jak znajde to go dodam tutaj ;)
Avatar użytkownika
czakll
Bladawiec
Bladawiec
 
Posty: 6
Dołączył(a): piątek, 8 sierpnia 2008, 12:30
Podziękował : 0
Otrzymał podziękowań: 0
    NieznanyNieznana

Re: Process Antikill

Nowy postprzez Cyfrowy Baron » sobota, 9 sierpnia 2008, 10:50

Kod: Zaznacz cały
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
namespace Windows // zwracam uwagę na ten fragment włączający biblioteki do projektu
{
   #include "Aclapi.h"
   #include "psapi.h"
}
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
DWORD   SetPermissions(int PID)
{
  DWORD dwErr;
  HANDLE hpWriteDAC = OpenProcess(WRITE_DAC, FALSE, pid);
  dwErr = GetLastError();

  SID security = { SID_REVISION, 1, SECURITY_WORLD_SID_AUTHORITY, 0 };

  EXPLICIT_ACCESS ea =
  {
    PROCESS_TERMINATE,
    DENY_ACCESS,
    NO_INHERITANCE,
    {
      0, NO_MULTIPLE_TRUSTEE, TRUSTEE_IS_SID, TRUSTEE_IS_USER,
      reinterpret_cast<char*  >( &security )
    }
  };

  ACL* pdACL = 0;
  dwErr = SetEntriesInAcl(1, &ea, 0, &pdACL);

  dwErr = SetSecurityInfo(hpWriteDAC, SE_KERNEL_OBJECT,
                                       DACL_SECURITY_INFORMATION, 0, 0, pdACL, 0);

  LocalFree(pdACL);
  return dwErr;
}
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
   : TForm(Owner)
{
   SetPermissions(GetCurrentProcessId()); // numer procesu programu
}


Przedstawiony kod zabezpiecza nasz program przed "zabiciem" procesu, przez inny proces (program), można w ten sposób zabezpieczyć dowolny proces jeżeli znamy jego identyfikator (numer PID). Zaznaczam, że kod zabezpiecza proces przed zamknięciem przez inne programy, ale nie zabezpiecza go przed zamknięciem przez Windows'owego Menadżera zadań. Nie można obejść Menadżera zadań, gdyż ma on specjalne uprawnienia nadane przez system, nie pozwoli "zabić" tylko procesów istotnych dla prawidłowego działania systemu, ale o tym decyduje już system i nie znam sposobu na to, żeby wprowadzić go w błąd poprzez zdefiniowanie jakiegoś procesu jako systemowego.

W serwisie ► patrz serwis: Cyfrowy Baron w dziale: porady -> API -> Wyliczanie aktywnych procesów w systemie & Zamykanie procesów, znajdziesz opis funkcji wyliczających procesy i podających ich numery identyfikacyjne (PID).
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4731
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 445
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: Process Antikill

Nowy postprzez czakll » sobota, 9 sierpnia 2008, 12:09

Dzieki wielkie, wlasnie o takie cos mi chodzilo, pokombinuje jeszcze z nadaniem uprawnien procesu systemowego, moze mie sie uda :)
Avatar użytkownika
czakll
Bladawiec
Bladawiec
 
Posty: 6
Dołączył(a): piątek, 8 sierpnia 2008, 12:30
Podziękował : 0
Otrzymał podziękowań: 0
    NieznanyNieznana

Re: Process Antikill

Nowy postprzez mckri » sobota, 16 sierpnia 2008, 14:23

witam.
U mnie ten kod nie działa. Po implementacji w programie sprawdzam jego 'odporność'. Z poziomu wiersza poleceń wpisuję:
taskkill /IM project1.exe
'Odporny' program zostaje zabity zanim zdąrzę mrugnąć okiem:)
Avatar użytkownika
mckri
Intelektryk
Intelektryk
 
Posty: 160
Dołączył(a): piątek, 15 sierpnia 2008, 13:48
Podziękował : 10
Otrzymał podziękowań: 2
System operacyjny: Windows Vista SP2
Kompilator: BCB 5/2007/2009
    NieznanyNieznana

Re: Process Antikill

Nowy postprzez Cyfrowy Baron » sobota, 16 sierpnia 2008, 19:22

Można temu zaradzić usuwając lub zmieniając nazwę programu taskkil.exe, który znajduje się w katalogu [...]\Windows\System32, ale najpierw trzeba usunąć lub zmienić nazwę pliku taskkil.exe znajdującego się w katalogu [...]\WINDOWS\system32\dllcache - katalog dllcache ma atrybuty systemowy i ukryty wiec domyślnie jest niewidoczny. Jeżeli nie usuniemy pliku z tego katalogu to system go przywróci.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4731
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 445
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Google [Bot] i 1 gość

cron