Всем привет!!! Изучил немного инфы и переписал перехватчики на С... Сейчас перехватывает: 1) Поцессы 2) Файлы и папки (через дос эмулятор все показывается, скорее всего из-за специфичности установки глобального хука) Код (Text): LRESULT WINAPI MessageProc(int Code,WPARAM wParam, LPARAM lParam) { CallNextHookEx(0, Code, wParam, lParam); return 0; } void SetGlobalHookProc() { SetWindowsHookEx(WH_GETMESSAGE, (PROC)MessageProc, HInstance, 0); Sleep(INFINITE); } 3) Ключи и параметры в реестре С глобальным хуком я еще разберусь(т.е. почитаю получше, но возможно буду перехватывать еще и с помощью ZwResumeThread)... Но это не важно... Я просто хотел показать, что уже немного разбираюсь в этом деле... Вопрос: Как скрыть список сетевых подключений(не просто активных или не активных, а тот, который показывает Windows стандартными средставми)??? Т.е. через какую функцию Windows получает этот список??? Заранее спасибо за ответ.
Чтобы файлы не были видны надо перехватывать NtVdmControl. А про сетевые соединения читай тот же источник - http://www.wasm.ru/article.php?article=hidingnt#3_2
NtVdmControl я уже перехватывал(сегодня делал)... И эта функция не вызывается... Скорее всего проблема с глобальным перехватом. Но могу и ошибаться... Сейчас через оли прохожу по ipconfig... Пока наткнулся на GetAdaptersAddresses... Подключил библиотеку к айсу... Перезагружусь и помотрю что и как...
Безрезультатно... Windows для перечисления сетевых подключений какую-то другую функцию использует... Может кто знает???
StasX4 Я не понял, тебе надо скрыть сетевые соединения, или сетевой адаптер? Если первое, что для перечисления соединений используются функции GetTcpTable, GetTcpTableEx, GetUdpTable, GetUdpTableEx. Эти функции шлют IOCTL_TCP_QUERY_INFORMATION_EX драйверу tcpip.sys. Для перечисления сетевых интерфейсов используется этот же IOCTL, только с другими данными в сопровождающей его структуре. В атаче пример кода получающего список адаптеров в kernel mode. Вот пример использования этого кода: Код (Text): status = GetIPSNMPInfo(&SnmpInfo, sizeof(IPSNMPInfo)); if (NT_SUCCESS(status)) { TableSize = sizeof(IPAddrEntry) * SnmpInfo.ipsi_numaddr; IPAddrTable = ExAllocatePool(PagedPool, TableSize); status = GetIPAddrTable(IPAddrTable, TableSize); if (NT_SUCCESS(status)) { ExAcquireFastMutex(&StackMutex); for(r = 0; r < SnmpInfo.ipsi_numaddr; r++) { IPInterfaceInfo InterfaceInfo; status = GetIPInterfaceInfo( IPAddrTable[r].iae_addr, &InterfaceInfo, sizeof(IPInterfaceInfo) ); if (NT_SUCCESS(status) && InterfaceInfo.iii_addrlength == 6 && InterfaceInfo.iii_flags == 1 && !netif_find(IPAddrTable[r].iae_addr)) { DPRINT("Init rel netif"); Adapter->IpAddress = IPAddrTable[r].iae_addr; Adapter->SubnetMask = 0; Adapter->Gateway = 0; Adapter->RelInitialized = TRUE; Adapter->State = NdisMediaStateConnected; ProtocolAddAdapter(Adapter); ReferenceAdapter(Adapter); ProtocolStatusAdapter(Adapter, ADAP_STATUS_CONNECT_MEDIA); break; } } 1462531243__tdiq.c
@MsRem Нужно скрыть список сетевых адаптеров, но в тоже время нужно чтобы они выполняли свою непосредственную функцию. Как я понял нужно перехватывать NtDeviceIoControlFile? Проверить код сейчас не в силах в связи с отсутствием ddk xp... Но это дело просто времени. Еще раз хочу уточнить момент. Приведенный Вами код показывает список сетевых адаптеров или сетевых соединений? Также вопрос есть по поводу хендлов при любом перехвате (файлы, папки, реестр) о том, что когда я получаю хендл, то как по нему определить в случае с папками путь к директории, а в случае с реестром, то путь из ключей??? А то получается, что скрываются все файлы из всех директорий с одинаковыми наименованиями. Заранее спасибо за ответ.
Сделал наброски по перехвату API от Iphlpapi... Эмулируя вызов все работает... Вечером доведу код до ума(до хука) и посмотрим будет ли работать... Но хотелось бы перехватывать на низком уровне... Код (Text): DWORD WINAPI MyGetAdaptersAddresses( ULONG Family, DWORD Flags, PVOID Reserved, PIP_ADAPTER_ADDRESSES pAdapterAddresses, PULONG pOutBufLen ) { NTSTATUS status; PIP_ADAPTER_ADDRESSES Prev,Cur; status=GetAdaptersAddresses(Family,Flags,Reserved,pAdapterAddresses,pO utBufLen); if (NT_SUCCESS(status)) { Prev=NULL;Cur=pAdapterAddresses; for(;Cur!=0;) { if(lstrcmpiW(Cur->Description,L"My Network Interface")==0) { if(Prev==NULL) { if(Cur->Next!=NULL) memcpy(Cur,Cur->Next,sizeof(IP_ADAPTER_ADDRESSES)); else status=-1; } else Prev->Next=Cur->Next; break; } Prev=Cur; Cur=Cur->Next; } } return status; } DWORD WINAPI MyGetAdaptersInfo(PIP_ADAPTER_INFO pAdapterInfo, PULONG pOutBufLen) { NTSTATUS status; PIP_ADAPTER_INFO Prev,Cur; status=GetAdaptersInfo(pAdapterInfo,pOutBufLen); if (NT_SUCCESS(status)) { Prev=NULL;Cur=pAdapterInfo; for(;Cur!=0;) { if(lstrcmpi(Cur->Description,"My Network Interface")==0) { if(Prev==NULL) { if(Cur->Next!=NULL) memcpy(Cur,Cur->Next,sizeof(IP_ADAPTER_INFO)); else status=-1; } else Prev->Next=Cur->Next; break; } Prev=Cur; Cur=Cur->Next; } } return status; }