Я хочу внести патч для управления мышью из драйвера win32kbase.sys

Тема в разделе "WASM.NT.KERNEL", создана пользователем zky02, 6 май 2024.

  1. zky02

    zky02 New Member

    Публикаций:
    0
    Регистрация:
    16 янв 2024
    Сообщения:
    13
    Я нашел несколько статей о том, как вносить патчи в старые версии Windows. Одна из них — XP. Я отладил это и обнаружил, что вносится патч в GetMouseCoord, внутри которого есть GetMouseCoordinateAbsolute/GetMouseCoordinateRelative. Я попытался внести патч, но получил синий экран смерти (BSOD) с ошибкой PROCESS_HAS_LOCKED_PAGES. Как это исправить?

    [​IMG]


    [​IMG]

    Здесь в XP x86 функция GetMouseCoord патчится следующим образом.

    непатченный

    [​IMG]

    патчированный


    [​IMG]

    Сравнить MouseSpeed с 0 JE DoNotApplyAccel [ApplyAccel]
    Patched: Сравнить MouseSpeed с 0 JAE DoNotApplyAccel [ApplyAccel]

    Здесь я пытаюсь изменить функции GetMouseCoordinateRelative/GetMouseCoordinateAbsolute

    Код (Text):
    1. NTSTATUS PatchFunction(PVOID functionAddress)
    2. {
    3.     PMDL mdl = IoAllocateMdl(functionAddress, 1, FALSE, FALSE, NULL);
    4.     if (mdl == NULL) {
    5.         DbgPrint("Failed to allocate MDL\n");
    6.         return STATUS_INSUFFICIENT_RESOURCES;
    7.     }
    8.  
    9.     __try {
    10.         MmProbeAndLockPages(mdl, KernelMode, IoWriteAccess);
    11.         PVOID mappedAddress = MmGetSystemAddressForMdlSafe(mdl, NormalPagePriority);
    12.         if (!mappedAddress) {
    13.             __leave;
    14.         }
    15.  
    16.         // Patch the function: Write a RET instruction
    17.         *(volatile UCHAR*)mappedAddress = 0xC3;  // RET
    18.         DbgPrint("Function at %p patched to return immediately\n", functionAddress);
    19.     }
    20.     __except (EXCEPTION_EXECUTE_HANDLER) {
    21.         MmUnlockPages(mdl);
    22.         IoFreeMdl(mdl);
    23.         return GetExceptionCode();
    24.     }
    25.  
    26.     MmUnlockPages(mdl);
    27.     IoFreeMdl(mdl);
    28.     return STATUS_SUCCESS;
    29. }
    Код (Text):
    1. EXTERN_C NTSTATUS DriverEntry(_In_ PDRIVER_OBJECT DriverObject, _In_ PUNICODE_STRING RegistryPath)
    2. {
    3.     UNREFERENCED_PARAMETER(RegistryPath);
    4.     UNREFERENCED_PARAMETER(DriverObject);
    5.  
    6.  
    7.  
    8.     DriverObject->DriverUnload = DriverUnload;
    9.  
    10.  
    11.  
    12.     PVOID baseAddress = GetModuleBaseAddress(L"win32kbase.sys");
    13.     //DbgPrint("Base Address of win32kbase.sys: %p\n", baseAddress); OK
    14.  
    15.  
    16.     Patch GetMouseCoordinateAbsolute
    17.     ULONG_PTR absoluteFuncAddress = (ULONG_PTR)baseAddress + 0x10D58;
    18.     NTSTATUS status = PatchFunction((PVOID)absoluteFuncAddress);
    19.     if (!NT_SUCCESS(status)) {
    20.         return status;
    21.     }
    22.  
    23.     // Patch GetMouseCoordinateRelative
    24.     ULONG_PTR relativeFuncAddress = (ULONG_PTR)baseAddress + 0x10B64;
    25.     status = PatchFunction((PVOID)relativeFuncAddress);
    26.     if (!NT_SUCCESS(status)) {
    27.         return status;
    28.     }
    29.  
    30.  
    31.  
    32.     return STATUS_SUCCESS;
    33. }
     
    Последнее редактирование: 6 май 2024
  2. zky02

    zky02 New Member

    Публикаций:
    0
    Регистрация:
    16 янв 2024
    Сообщения:
    13
    Я сделал это, спасибо, ребята!
     
  3. Treant

    Treant Member

    Публикаций:
    0
    Регистрация:
    24 май 2009
    Сообщения:
    240
    Привет, как такие схемы рисовать?
     
  4. alex_dz

    alex_dz Active Member

    Публикаций:
    0
    Регистрация:
    26 июл 2006
    Сообщения:
    359
    ну сделали так поделитесь
    иначе толку 0
     
  5. zky02

    zky02 New Member

    Публикаций:
    0
    Регистрация:
    16 янв 2024
    Сообщения:
    13

    Я не могу опубликовать это, потому что в каждой сборке Windows смещение в функциях GetMouseCoordinateAbsolute/GetMouseCoordinateRelative меняется
     
  6. sl0n

    sl0n Мамонт дзена **

    Публикаций:
    0
    Регистрация:
    26 сен 2003
    Сообщения:
    690
    так сделай поиск по плавающей маске