Хук системных сервисов при загрузке ОС

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

  1. DeeoniS

    DeeoniS New Member

    Публикаций:
    0
    Регистрация:
    6 авг 2004
    Сообщения:
    132
    Есть драйвер который активируется на этапе загрузки ОС. Т.е. StartType = SERVICE_SYSTEM_START. В DriverEntry происходит перехват сервисов, т.е. выполняется следующая функция:
    Код (Text):
    1. VOID HookSysService( void )
    2. {
    3.     ULONG CR0Reg;
    4.  
    5.     RealNtSetValueKey = ServiceTable->ServiceTable[ServiceOrdinal[0]];
    6.     RealNtDeleteValueKey = ServiceTable->ServiceTable[ServiceOrdinal[1]];
    7.     RealNtDeleteKey = ServiceTable->ServiceTable[ServiceOrdinal[2]];
    8.  
    9.     __asm
    10.     {
    11.         cli                     // запрещаем прерывания
    12.         mov eax, cr0
    13.         mov CR0Reg,eax
    14.         and eax,0xFFFEFFFF      // сбросить WP bit
    15.         mov cr0, eax
    16.     }
    17.     ServiceTable->ServiceTable[ServiceOrdinal[0]] = (PVOID) HookNtSetValueKey;
    18.     ServiceTable->ServiceTable[ServiceOrdinal[1]] = (PVOID) HookNtDeleteValueKey;
    19.     ServiceTable->ServiceTable[ServiceOrdinal[2]] = (PVOID) HookNtDeleteKey;
    20.     __asm
    21.     {
    22.         mov eax, CR0Reg    
    23.         mov cr0, eax            // востановить содержимое CR0
    24.         sti                     // разрешаем прерывания
    25.     }
    26.    
    27. }
    После перехвата, через несколько секунд, падает Session Manager. Вот выдача дебагера:
    Код (Text):
    1. Process.Thread : 00000004.0000002C (System) is trying to create key:
    2.     ObjectAttributes = F9DEFBC0
    3. The caller should not rely on data written to the registry after shutdown...
    4.  
    5. *** Fatal System Error: 0xc000021a
    6.                        (0xE1515568,0xC000000D,0x00000000,0x00000000)
    7.  
    8.  
    9. STOP: c000021a {Fatal System Error}
    10. The Session Manager Initialization system process terminated unexpectedly with a status of 0xc000000d (0x00000000 0x00000000).
    11. The system has been shut down.
    12. Break instruction exception - code 80000003 (first chance)
    13.  
    14. A fatal system error has occurred.
    15. Debugger entered on first try; Bugcheck callbacks have not been invoked.
    16.  
    17. A fatal system error has occurred.
    18.  
    19. Connected to Windows XP 2600 x86 compatible target, ptr64 FALSE
    20. Loading Kernel Symbols
    21. .........................................................................................
    22. Loading User Symbols
    23.  
    24. Loading unloaded module list
    25. ....
    26. *******************************************************************************
    27. *                                                                             *
    28. *                        Bugcheck Analysis                                    *
    29. *                                                                             *
    30. *******************************************************************************
    31.  
    32. Use !analyze -v to get detailed debugging information.
    33.  
    34. BugCheck C000021A, {e1515568, c000000d, 0, 0}
    35.  
    36. Probably caused by : PartMgr.sys ( PartMgr!PmPower+a1 )
    37.  
    38. Followup: MachineOwner
    39. ---------
    40.  
    41. nt!RtlpBreakWithStatusInstruction:
    42. 80526da8 cc              int     3
    43. kd> !analyze -v
    44. *******************************************************************************
    45. *                                                                             *
    46. *                        Bugcheck Analysis                                    *
    47. *                                                                             *
    48. *******************************************************************************
    49.  
    50. WINLOGON_FATAL_ERROR (c000021a)
    51. The Winlogon process terminated unexpectedly.
    52. Arguments:
    53. Arg1: e1515568, String that identifies the problem.
    54. Arg2: c000000d, Error Code.
    55. Arg3: 00000000
    56. Arg4: 00000000
    57.  
    58. Debugging Details:
    59. ------------------
    60.  
    61.  
    62. ERROR_CODE: (NTSTATUS) 0xc000021a - {
    63.  
    64. ADDITIONAL_DEBUG_TEXT:  Session Manager Initialization
    65.  
    66. BUGCHECK_STR:  0xc000021a_smss.exe_c000000d
    67.  
    68. DEFAULT_BUCKET_ID:  INTEL_CPU_MICROCODE_ZERO
    69.  
    70. PROCESS_NAME:  System
    71.  
    72. LAST_CONTROL_TRANSFER:  from 804f780d to 80526da8
    73.  
    74. SYMBOL_ON_RAW_STACK:  1
    75.  
    76. STACK_ADDR_RAW_STACK_SYMBOL: 17002000010004
    77.  
    78. STACK_COMMAND:  dds F9DE39CC-0x20 ; kb
    79.  
    80. STACK_TEXT:  
    81. f9de39ac  817b284c
    82. f9de39b0  817b27b8
    83. f9de39b4  817b2868
    84. f9de39b8  817b288c
    85. f9de39bc  817b27b8
    86. f9de39c0  00000000
    87. f9de39c4  f9de3904
    88. f9de39c8  f9c248de PartMgr!PmPower+0xa1
    89. f9de39cc  819cd030
    90. f9de39d0  819cd548
    91. f9de39d4  80558ce8 nt!PopIrpSerialLock
    92. f9de39d8  819d1b58
    93. f9de39dc  00000001
    94. f9de39e0  817b2870
    95. f9de39e4  f9de3928
    96. f9de39e8  804eddf9 nt!IopfCallDriver+0x31
    97. f9de39ec  819d0400
    98. f9de39f0  f9de3928
    99. f9de39f4  00000001
    100. f9de39f8  804ee1cf nt!IopFreeIrp+0xe9
    101. f9de39fc  00000000
    102. f9de3a00  00000000
    103. f9de3a04  817ac390
    104. f9de3a08  f9de3978
    105. f9de3a0c  804f3aae nt!IopCompleteRequest+0x316
    106. f9de3a10  804f3ac4 nt!IopCompleteRequest+0x32c
    107. f9de3a14  817ac3d0
    108. f9de3a18  819cb3c8
    109. f9de3a1c  00000000
    110. f9de3a20  00000030
    111. f9de3a24  00000023
    112. f9de3a28  00000023
    113.  
    114.  
    115. FOLLOWUP_IP:
    116. PartMgr!PmPower+a1
    117. f9c248de b803010000      mov     eax,103h
    118.  
    119. FOLLOWUP_NAME:  MachineOwner
    120.  
    121. MODULE_NAME: PartMgr
    122.  
    123. IMAGE_NAME:  PartMgr.sys
    124.  
    125. DEBUG_FLR_IMAGE_TIMESTAMP:  3b7dc5a7
    126.  
    127. SYMBOL_NAME:  PartMgr!PmPower+a1
    128.  
    129. FAILURE_BUCKET_ID:  0xc000021a_smss.exe_c000000d_PartMgr!PmPower+a1
    130.  
    131. BUCKET_ID:  0xc000021a_smss.exe_c000000d_PartMgr!PmPower+a1
    132.  
    133. Followup: MachineOwner
    134. ---------
    Если хукать уже когда ОС загруженна, то все нормально. В чем может быть дело?
     
  2. gilg

    gilg New Member

    Публикаций:
    0
    Регистрация:
    19 май 2005
    Сообщения:
    527
    Ошибка в реализации HookNtSetValueKey судя по
     
  3. DeeoniS

    DeeoniS New Member

    Публикаций:
    0
    Регистрация:
    6 авг 2004
    Сообщения:
    132
    gilg
    Интересно а какая там может быть ошибка если выполняется по суте просто оригинальный сервис, т.е. примерно так:
    Код (Text):
    1. NTSTATUS
    2. HookNtSetValueKey(
    3.     IN HANDLE hKey,
    4.     IN PUNICODE_STRING lpusValueName,
    5.     IN ULONG ulTitleIndex,
    6.     IN ULONG ulType,
    7.     IN PVOID lpData,
    8.     IN ULONG ulDataSize
    9.     )
    10. {
    11.     NTSTATUS ns = STATUS_SUCCESS;
    12.     ns = RealNtSetValueKey(hKey, lpusValueName, ulTitleIndex, ulType, lpData, ulDataSize);
    13.     return ns;
    14. }
     
  4. DeeoniS

    DeeoniS New Member

    Публикаций:
    0
    Регистрация:
    6 авг 2004
    Сообщения:
    132
    Все... моя ошибка... причем тупая... забыл что массивы в С с нуля индексируются :)
     
  5. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    непростительно :P