Ciao a tutti,
Sto cercando di sviluppare un driver del kernel (kinda basic) solo per fare un semplice RW sulla memoria di processo.
Tuttavia, poiché sto caricando quel driver con un manual mapper (sto usando un bootkit UEFI), continua a bloccarsi con KERNEL_SECURITY_CHECK_FAILURE.
Ho letto che anche con l'opzione / GS- con WDK 10 continua a controllare lo stack canary.
Tuttavia, quando rimuovo ogni riferimento ai parametri della funzione di inizializzazione, il driver non da alcun problema.
Vorrei inserire quel codice nel driver stesso, senza modificare il codice del loader, se possibile.
Qualche suggerimento?
Queste sono le funzioni di entrypoint e di inizializzazione:
Sto cercando di sviluppare un driver del kernel (kinda basic) solo per fare un semplice RW sulla memoria di processo.
Tuttavia, poiché sto caricando quel driver con un manual mapper (sto usando un bootkit UEFI), continua a bloccarsi con KERNEL_SECURITY_CHECK_FAILURE.
Ho letto che anche con l'opzione / GS- con WDK 10 continua a controllare lo stack canary.
Tuttavia, quando rimuovo ogni riferimento ai parametri della funzione di inizializzazione, il driver non da alcun problema.
Vorrei inserire quel codice nel driver stesso, senza modificare il codice del loader, se possibile.
Qualche suggerimento?
Queste sono le funzioni di entrypoint e di inizializzazione:
C:
NTSTATUS Initialize(PDRIVER_OBJECT pDriverObject, PUNICODE_STRING pRegistryPath) {
UNREFERENCED_PARAMETER(pRegistryPath);
NTSTATUS ntStatus;
RtlInitUnicodeString(&devName, L"\\Device\\" DRIVER_NAME);
ntStatus = IoCreateDevice(pDriverObject, 0, &devName,
FILE_DEVICE_UNKNOWN, FILE_DEVICE_SECURE_OPEN, TRUE, &pDriverObject->DeviceObject);
if (!NT_SUCCESS(ntStatus)) {
return ntStatus;
}
RtlInitUnicodeString(&symLink, L"\\DosDevices\\" DRIVER_NAME);
ntStatus = IoCreateSymbolicLink(&symLink, &devName);
pDriverObject->DeviceObject->Flags |= DO_BUFFERED_IO;
for (int t = 0; t <= IRP_MJ_MAXIMUM_FUNCTION; t++)
pDriverObject->MajorFunction[t] = &UnsupportedDispatch;
pDriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = &DevIODispatch;
pDriverObject->MajorFunction[IRP_MJ_CREATE] = &CreateDispatch;
pDriverObject->MajorFunction[IRP_MJ_CLOSE] = &CloseDispatch;
pDriverObject->DriverUnload = NULL;
pDriverObject->DeviceObject->Flags &= ~DO_DEVICE_INITIALIZING;
return STATUS_SUCCESS;
}
NTSTATUS DriverEntry(PDRIVER_OBJECT pDriverObject, PUNICODE_STRING pRegistryPath) {
UNREFERENCED_PARAMETER(pDriverObject);
UNREFERENCED_PARAMETER(pRegistryPath);
PVOID pDriverBase = NULL;
IrCreateCookie(pDriverBase); // Initialize the stack canary since wdk 10 is shit
RtlInitUnicodeString(&drvName, L"\\Driver\\" DRIVER_NAME);
return IoCreateDriver(&drvName, &Initialize);
}