Операции с памятью загруженных драйверов

Тема в разделе "WASM.NT.KERNEL", создана пользователем Entropy, 9 мар 2021.

  1. Entropy

    Entropy Member

    Публикаций:
    0
    Регистрация:
    23 авг 2020
    Сообщения:
    266
    мне просто интернсно возможно ли такое
     
  2. Marylin

    Marylin Active Member

    Публикаций:
    0
    Регистрация:
    17 фев 2023
    Сообщения:
    308
    Entropy, так можно дизассемблировать любую функцию драйвера.
    Аргумент(7) команды !drvobj выводит полную инфу о пациенте:

    Код (Text):
    1. 0: kd> !drvobj ntfs 7
    2.  
    3. Driver object (fffffa800d33de70) is for:  \FileSystem\Ntfs
    4. Device Object list:
    5. fffffa800feb4030  fffffa800fb9e030  fffffa800fbe8030  fffffa800d33dc50
    6.  
    7. DriverEntry:   fffff8800159206c  Ntfs!GsDriverEntry
    8. DriverStartIo: 00000000
    9. DriverUnload:  00000000
    10. AddDevice:     00000000
    11.  
    12. Dispatch routines:
    13. [00] IRP_MJ_CREATE                      fffff880014b7370        Ntfs!NtfsFsdCreate
    14. [01] IRP_MJ_CREATE_NAMED_PIPE           fffff800022656b8        nt!IopInvalidDeviceRequest <-------
    15. [02] IRP_MJ_CLOSE                       fffff880014b36b0        Ntfs!NtfsFsdClose
    16. [03] IRP_MJ_READ                        fffff8800141d2a0        Ntfs!NtfsFsdRead
    17. [04] IRP_MJ_WRITE                       fffff88001428930        Ntfs!NtfsFsdWrite
    18. [05] IRP_MJ_QUERY_INFORMATION           fffff8800149cfe0        Ntfs!NtfsFsdDispatchWait
    19. [06] IRP_MJ_SET_INFORMATION             fffff8800141de90        Ntfs!NtfsFsdSetInformation
    20. [07] IRP_MJ_QUERY_EA                    fffff8800149cfe0        Ntfs!NtfsFsdDispatchWait
    21. [08] IRP_MJ_SET_EA                      fffff8800149cfe0        Ntfs!NtfsFsdDispatchWait
    22. [09] IRP_MJ_FLUSH_BUFFERS               fffff880014943f0        Ntfs!NtfsFsdFlushBuffers
    23. [0a] IRP_MJ_QUERY_VOLUME_INFORMATION    fffff8800149d380        Ntfs!NtfsFsdDispatch
    24. [0b] IRP_MJ_SET_VOLUME_INFORMATION      fffff8800149d380        Ntfs!NtfsFsdDispatch
    25. [0c] IRP_MJ_DIRECTORY_CONTROL           fffff880014a8a40        Ntfs!NtfsFsdDirectoryControl
    26. [0d] IRP_MJ_FILE_SYSTEM_CONTROL         fffff880014c9a80        Ntfs!NtfsFsdFileSystemControl
    27. [0e] IRP_MJ_DEVICE_CONTROL              fffff88001492df0        Ntfs!NtfsFsdDeviceControl
    28. [0f] IRP_MJ_INTERNAL_DEVICE_CONTROL     fffff800022656b8        nt!IopInvalidDeviceRequest <-------
    29. [10] IRP_MJ_SHUTDOWN                    fffff88001591870        Ntfs!NtfsFsdShutdown
    30. [11] IRP_MJ_LOCK_CONTROL                fffff88001450af0        Ntfs!NtfsFsdLockControl
    31. [12] IRP_MJ_CLEANUP                     fffff880014bc440        Ntfs!NtfsFsdCleanup
    32. [13] IRP_MJ_CREATE_MAILSLOT             fffff800022656b8        nt!IopInvalidDeviceRequest <-------
    33. [14] IRP_MJ_QUERY_SECURITY              fffff8800149d380        Ntfs!NtfsFsdDispatch
    34. [15] IRP_MJ_SET_SECURITY                fffff8800149d380        Ntfs!NtfsFsdDispatch
    35. [16] IRP_MJ_POWER                       fffff800022656b8        nt!IopInvalidDeviceRequest <-------
    36. [17] IRP_MJ_SYSTEM_CONTROL              fffff800022656b8        nt!IopInvalidDeviceRequest <-------
    37. [18] IRP_MJ_DEVICE_CHANGE               fffff800022656b8        nt!IopInvalidDeviceRequest <-------
    38. [19] IRP_MJ_QUERY_QUOTA                 fffff8800149cfe0        Ntfs!NtfsFsdDispatchWait
    39. [1a] IRP_MJ_SET_QUOTA                   fffff8800149cfe0        Ntfs!NtfsFsdDispatchWait
    40. [1b] IRP_MJ_PNP                         fffff880014e22b0        Ntfs!NtfsFsdPnp
    41.  
    42. Fast I/O routines:
    43. FastIoCheckIfPossible                   fffff8800153fd30        Ntfs!NtfsFastIoCheckIfPossible
    44. FastIoRead                              fffff880014a8fc0        Ntfs!NtfsCopyReadA
    45. FastIoWrite                             fffff880014abce0        Ntfs!NtfsCopyWriteA
    46. FastIoQueryBasicInfo                    fffff8800149d7a0        Ntfs!NtfsFastQueryBasicInfo
    47. FastIoQueryStandardInfo                 fffff8800149d010        Ntfs!NtfsFastQueryStdInfo
    48. FastIoLock                              fffff8800148c0d0        Ntfs!NtfsFastLock
    49. FastIoUnlockSingle                      fffff8800148bea0        Ntfs!NtfsFastUnlockSingle
    50. FastIoUnlockAll                         fffff88001540050        Ntfs!NtfsFastUnlockAll
    51. FastIoUnlockAllByKey                    fffff8800153fdf0        Ntfs!NtfsFastUnlockAllByKey
    52. ReleaseFileForNtCreateSection           fffff8800141de10        Ntfs!NtfsReleaseForCreateSection
    53. FastIoQueryNetworkOpenInfo              fffff88001491440        Ntfs!NtfsFastQueryNetworkOpenInfo
    54. AcquireForModWrite                      fffff8800142b910        Ntfs!NtfsAcquireFileForModWrite
    55. MdlRead                                 fffff8800148d2d0        Ntfs!NtfsMdlReadA
    56. MdlReadComplete       -----+            fffff800022574ec        nt!FsRtlMdlReadCompleteDev
    57. PrepareMdlWrite            |            fffff8800148d4b0        Ntfs!NtfsPrepareMdlWriteA
    58. MdlWriteComplete           |            fffff8000251be88        nt!FsRtlMdlWriteCompleteDev
    59. FastIoQueryOpen            |            fffff88001497250        Ntfs!NtfsNetworkOpenCreate
    60. ReleaseForModWrite         |            fffff8800142b9b0        Ntfs!NtfsReleaseFileForModWrite
    61. AcquireForCcFlush          |            fffff8800142d5a0        Ntfs!NtfsAcquireFileForCcFlush
    62. ReleaseForCcFlush          |            fffff8800142d5f0        Ntfs!NtfsReleaseFileForCcFlush
    63.                            v
    64.  
    65. 0: kd> uf  nt!FsRtlMdlReadCompleteDev
    66.  
    67. nt!FsRtlMdlReadCompleteDev:
    68. fffff800`022574ec  48895c2408      mov     qword ptr [rsp+8],rbx
    69. fffff800`022574f1  57              push    rdi
    70. fffff800`022574f2  4883ec20        sub     rsp,20h
    71. fffff800`022574f6  4885d2          test    rdx,rdx
    72. fffff800`022574f9  741e            je      nt!FsRtlMdlReadCompleteDev+0x2d (fffff800`02257519)
    73.  
    74. nt!FsRtlMdlReadCompleteDev+0xf:
    75. fffff800`022574fb  488bfa          mov     rdi,rdx
    76.  
    77. nt!FsRtlMdlReadCompleteDev+0x12:
    78. fffff800`022574fe  488b1f          mov     rbx,qword ptr [rdi]
    79. fffff800`02257501  488bcf          mov     rcx,rdi
    80. fffff800`02257504  e8278b1100      call    nt!MmUnlockPages (fffff800`02370030)
    81. fffff800`02257509  488bcf          mov     rcx,rdi
    82. fffff800`0225750c  e86ffcffff      call    nt!IoFreeMdl (fffff800`02257180)
    83. fffff800`02257511  488bfb          mov     rdi,rbx
    84. fffff800`02257514  4885db          test    rbx,rbx
    85. fffff800`02257517  75e5            jne     nt!FsRtlMdlReadCompleteDev+0x12 (fffff800`022574fe)
    86.  
    87. nt!FsRtlMdlReadCompleteDev+0x2d:
    88. fffff800`02257519  b001            mov     al,1
    89. fffff800`0225751b  488b5c2430      mov     rbx,qword ptr [rsp+30h]
    90. fffff800`02257520  4883c420        add     rsp,20h
    91. fffff800`02257524  5f              pop     rdi
    92. fffff800`02257525  c3              ret
    93. 0: kd>
    94.  
     
  3. Entropy

    Entropy Member

    Публикаций:
    0
    Регистрация:
    23 авг 2020
    Сообщения:
    266
    Marylin, а если я захочу это применить,к каким-то сторонним драйверам,которые не от микрософт,например NVIDIA,и вообще могут ли защищать драйвера от дизассемблирования,декомпиляция драйверов этот ещё тот ящик пандоры...
     
  4. Marylin

    Marylin Active Member

    Публикаций:
    0
    Регистрация:
    17 фев 2023
    Сообщения:
    308
    Нет никакой защиты в этом плане. Дизассемблируют обычно файл драйвера на диске, а не в памяти. Что касается моих примеров с WinDbg, то я использую привязанный к дебагеру софт LiveKd из пакета "Sysinternals" М.Руссиновича. Суть в том, что при запуске LiveKd создаёт сначала полный дамп ядерной памяти, и потом разбирает этот дамп уже в офлайн. Поэтому никаких конфликтов с системой у него нет.
     
    Mikl___ нравится это.