[Delphi] Obsługa systemowego firewall'a

rafal

Były Moderator
Dołączył
Marzec 30, 2005
Posty
392
Witam :)
Jeden z moich starychhhh artów tym razem na temat obsługi wbudowanego firewall'a systemowego znajdującego się w Windows XP z zainstalowanym Service Pack 2.
Życzę miłej lektury :)


1.Rejestr :
1.1. Wyjątki
Oto przykładowy wyeksportowany klucz z rejestru dla wyjątku Gadu-Gadu :

Kod:
Windows Registry Editor Version 5.00



[HKEY_LOCAL_MACHINESYSTEMControlSet001ServicesSharedAccessParametersFirewallP
olicyStandardProfileAuthorizedApplicationsList] "C:Program FilesGadu-Gadugg.exe"="C:Program FilesGadu-Gadugg.exe:*:Enabled:Gadu-Gadu - program glowny"

odrazu widać iż aby dodać program do wyjątku w pomocy pliku *.reg należy go zapisać w następującej formie w gałęzi :
"lokalizacja(podwójny slash)"="lokalizacja(podwojny slash):*:dostep_badz_nie:wyswietlana_nazwa"

1.2. Wyłączenie bądź włączenie firewall'a
Wartości pozwalające na włączenie bądź wyłączenie firewall'a zmieniami w tej oto gałęzi :

Kod:
Windows Registry Editor Version 5.00



[HKEY_LOCAL_MACHINESYSTEMControlSet001ServicesSharedAccessParametersFirewallP
olicyStandardProfile]
Aby włączyć należy ustawić dla "EnableFirewall" wartość 1 zaś by wyłączyć wartość 0 :
"EnableFirewall"=dword:00000001
lub
"EnableFirewall"=dword:00000000

1.3. Wyłączenie bądź włączenie obsługi wyjątków
Lokalizacja klucza jest identyczna jak w punkcie poprzednim, z tą różnicą iż wartość 1 dla "DoNotAllowExceptions" wyłącza obsługę wyjątków natomiast 0 włącza , należy pamietać aby firewall był włączony gdyż wówczas aktywacja obsługi wyjątków mija sie z celem :
"DoNotAllowExceptions"=dword:00000001
lub wyłaczenie
"DoNotAllowExceptions"=dword:00000000

2. Delphi :
Należy pamietać iż do każdego unitu do uses dodajemy Registry, dzięki któremu możemy obsługiwać rejestr przy pomocy Delphi.

2.1 Dodanie i usuwanie wyjątków :
Można zrobić to na 2 sposoby, oto 1 z nich :
Kod:
procedure WyjatekSP2(aktywuj: Boolean);

var

reg: TRegistry;

sp2 : string;

begin

reg := TRegistry.Create;

reg.RootKey := HKEY_LOCAL_MACHINE; //rozpoczynamy otwieranie każdej gałęzi z osobna sp2:=Application.ExeName; //pobranie lokalizacji w której uruchomiono nasz program reg.OpenKey('System', True);

reg.OpenKey('ControlSet001', True);

reg.OpenKey('Services', True);

reg.OpenKey('SharedAccess', True);

reg.OpenKey('Parameters', True);

reg.OpenKey('FirewallPolicy', True);

reg.OpenKey('StandardProfile', True);

reg.OpenKey('AuthorizedApplications', True);

reg.OpenKey('List', True);

if aktywuj = True then

begin

reg.WriteString(sp2,sp2+':*:Enabled:'+ExtractFileName(sp2)); // zapisanie wyjątku wg. opisu z punktu 1.1, natomiast nazwą własną będzie nazwa naszego projektu

end

else if aktywuj = False then

begin

reg.DeleteValue(sp2); //usunięcie wyjątku

end;

reg.CloseKey;

end;
Procedura ta jest wywoływana w nastepujący sposób :

WyjatekSP2(true) - wówczas nasz program jest dodany wyjątków
WyjatekSP2(false) - wówczas jest usuniety z wyjątków

Druga metoda jest ciut podobna, a polega na rozłożeniu dodawania i usuwania wyjątków na 2 procedury, które należy zadeklarowaa w naszym programie , dlatego też nie będe opisywać poszczególnych linii :
Kod:
procedure TForm1.wyjatekdodaj; //dodanie wyjątku

var

rejestr: TRegistry;

sp2: string;

begin

sp2:=Application.ExeName;

rejestr:=TRegistry.Create;

rejestr.RootKey:=HKEY_LOCAL_MACHINE;

rejestr.OpenKey('SYSTEMControlSet001Services SharedAccessParametersFirewallPolicy

StandardProfileAuthorizedApplicationsList',False);

rejestr.WriteString(sp2,sp2+':*:Enabled:'+ExtractFileName(sp2));

rejestr.Free;

end;
Aby dodać nasz program do wyjątków wystarczy odwołać sie do procedury : wyjatekdodaj;
Kod:
procedure TForm1.wyjatekusun; //usuwanie wyjątku

var

usunrej: TRegistry;

sp2: string;

begin

sp2:=Application.ExeName;

usunrej:=TRegistry.Create;

usunrej.RootKey:=HKEY_LOCAL_MACHINE;

usunrej.OpenKey('SYSTEMControlSet001Services SharedAccessParametersFirewallPolicy

StandardProfileAuthorizedApplicationsList',true);

usunrej.DeleteValue(sp2);

usunrej.DeleteValue(sp2+':*:Enabled:'+ExtractFileName(sp2));

usunrej.CloseKey;

usunrej.Free;

end;
Aby usunąć nasz program z wyjątków wystarczy odwołać sie do procedury : wyjatekusun;

Natomiast jeśli chcemy do wyjątków dodać inny program niż nasz uruchomiony wówczas wystarczy zmienić w danej procedurze zmienną sp2 z Application.ExeName na lokalizacje pliku który sobie życzymy np: 'c:windowstrojan.exe'

2.2 Włącz , wyłącz firewall
Opiszę tu tylko 1 metodę gdyż uważam że jest łatwiesza, ale oczywiście można zrobić to na ten 2 sposób zmieniając odpowiednie gałęzie i klucze wg. metody 1, ale to już wedle uznania :
Kod:
procedure WylaczSP2(aktywuj: Boolean);

var

reg: TRegistry;

begin

reg := TRegistry.Create;

reg.RootKey := HKEY_LOCAL_MACHINE;

reg.OpenKey('System', True);

reg.OpenKey('ControlSet001', True);

reg.OpenKey('Services', True);

reg.OpenKey('SharedAccess', True);

reg.OpenKey('Parameters', True);

reg.OpenKey('FirewallPolicy', True);

reg.OpenKey('StandardProfile', True);

if aktywuj = True then

begin

reg.WriteInteger('EnableFirewall',0); //wartość 0 wyłącza firewall'a

end

else if aktywuj = False then

begin

reg.WriteInteger('EnableFirewall',1); //wartość 1 włącza firewall'a

end;

reg.CloseKey;

end;

Procedura ta jest wywoływana w następujący sposób :

WylaczSP2(true) - wyłączenie FW
WylaczSP2(false) - włączenie FW

Należy zwrócić uwage iż wartości w tym kluczu nie są już REG_SZ (stringiem) a DWORD (integer) dlatego są ciut inaczej zapisywane tzn. poprzez WriteInteger, a nie jak w punkcie 2.1 (WriteString).

2.3 Włącz , wyłącz obsługe wyjątków
Przyszedł czas na ostatni punkt tego artykułu, procedura będzie identyczna jak w punkcie poprzednim jedynie z tą różnicą iż nazwe wartości EnableFirewall zamieniamy na DoNotAllowExceptions, dla true można ustawia wartość 1 aby nie zezwalać na wyjątki natomiast dla false wartość 0 aby wyjątki były możliwe. Dodatkowo można ustawić dla false aby firewall był włączony bo wkońcu po co włączać obsługę wyjątków skoro FW jest niedostępny ;-)

ThE End
<
 

Dark Smark

Były Moderator
Dołączył
Kwiecień 29, 2006
Posty
1953
Dzięki. Napewno się przyda. :nauka: //może przykleić?
Nasze projekty będą niedługo nie do wykrycia. :hahaha:


Pozdrawiam Smark.
 

tobs

Użytkownik
Dołączył
Kwiecień 29, 2007
Posty
4
Dobry materiał.

Ja dodam jeszcze kodzik c++

Kod:
#include<iostream>



int main()

{



system("net stop sharedaccess");



return 0;

}

pozdro
 

harrie

Użytkownik
Dołączył
Kwiecień 15, 2007
Posty
19
"lokalizacja(podwójny slash)"="lokalizacja(podwojny slash):*:dostep_badz_nie:wyswietlana_nazwa"
wlasnie, co wpisac zeby blokowac? disabled nie dziala
 
Do góry Bottom