timerstop.sys, DPC.DeferredRoutine и vista-update

Тема в разделе "WASM.RESEARCH", создана пользователем Velheart, 1 июл 2009.

  1. Velheart

    Velheart New Member

    Публикаций:
    0
    Регистрация:
    2 июн 2008
    Сообщения:
    526
    Привет всем. У меня стоял крэк для Висты, убивающий таймер активации -- timerstop.sys, и все было замечательно, пока я не поставил обновление. После этого крэк стал бсодить. Суть его работы: создаем таймер, по нему выходим на KiTimerTableListHead, там ищем таймер у которого DPC.DeferredRoutine заканчивается на 218h(типа автор крэка знал, что за дпц, а я -- нет =)), а просматривать все адреса в ядре на 0х218 не оч хочется), и отодвигал его на 30 дней. После установки апдейта бсод происходит тут:
    .text:000110C4 mov eax, [esi+_KTIMER.Dpc]
    говорит IRQL_NOT_LESS_OR_EQUAL, т.к. проход по спискам таймеров происходит на диспатч левеле, но походу esi+_KTIMER.Dpc просто не валидный..
    Собственно больше непосредственно "перевзлома" интересует, почему такое может происходить, вроде бы KTIMER_TABLE_ENTRY не поменялась, по крайней мере в иде в новом ядре ничего подозрительного)), ну и собственно может кто-нибудь знает, что за загадочная функция на 0х218, и где ее смотреть.


    Вот собственно весь код:
    Код (Text):
    1. DoPatch         proc near               ; CODE XREF: start-2ED0p
    2. .text:00011080
    3. .text:00011080 var_18          = dword ptr -18h
    4. .text:00011080 var_C           = dword ptr -0Ch
    5. .text:00011080 var_8           = dword ptr -8
    6. .text:00011080 NewIrql         = byte ptr -1
    7. .text:00011080
    8. .text:00011080                 mov     edi, edi
    9. .text:00011082                 push    ebp
    10. .text:00011083                 mov     ebp, esp
    11. .text:00011085                 sub     esp, 0Ch
    12. .text:00011088                 push    ebx
    13. .text:00011089                 push    esi
    14. .text:0001108A                 push    edi
    15. .text:0001108B                 call    FindKiTimerTableListHead
    16. .text:00011090                 and     [ebp+var_8], 0
    17. .text:00011094                 and     [ebp+var_C], 0
    18. .text:00011098                 mov     cl, 2           ; NewIrql
    19. .text:0001109A                 call    ds:KfRaiseIrql
    20. .text:000110A0                 mov     [ebp+NewIrql], al
    21. .text:000110A3                 call    FindKiTimerTableListHead
    22. .text:000110A8                 mov     esi, eax
    23. .text:000110AA                 push    esi
    24. .text:000110AB                 push    offset Format   ; "TimerTable : %x\n"
    25. .text:000110B0                 call    DbgPrint
    26. .text:000110B5                 pop     ecx
    27. .text:000110B6                 pop     ecx
    28. .text:000110B7                 mov     ebx, esi
    29. .text:000110B9
    30. .text:000110B9 loc_110B9:                              ; CODE XREF: DoPatch+91j
    31. .text:000110B9                 mov     edi, [ebx]
    32. .text:000110BB                 test    edi, edi
    33. .text:000110BD                 jz      short loc_11113
    34. .text:000110BF                 jmp     short loc_11100
    35. .text:000110C1 ; ---------------------------------------------------------------------------
    36. .text:000110C1
    37. .text:000110C1 loc_110C1:                              ; CODE XREF: DoPatch+82j
    38. .text:000110C1                 lea     esi, [edi-_KTIMER.TimerListEntry]
    39. .text:000110C4                 mov     eax, [esi+_KTIMER.Dpc]
    40. .text:000110C7                 test    eax, eax
    41. .text:000110C9                 mov     edi, [edi]
    42. .text:000110CB                 jz      short loc_11100
    43. .text:000110CD                 mov     ecx, [eax+KDPC.DeferredRoutine]
    44. .text:000110D0                 test    ecx, ecx
    45. .text:000110D2                 jz      short loc_11100
    46. .text:000110D4                 push    ecx
    47. .text:000110D5                 call    check_dpc_218h
    48. .text:000110DA                 test    eax, eax
    49. .text:000110DC                 jz      short loc_11100
    50. .text:000110DE                 push    [esi+_KTIMER.DueTime.u.HighPart]
    51. .text:000110E1                 push    [esi+_KTIMER.DueTime.u.LowPart]
    52. .text:000110E4                 push    ecx
    53. .text:000110E5                 push    offset aFoundDeferredr ; "Found DeferredRoutine %x QuadPart %lld\n"...
    54. .text:000110EA                 call    DbgPrint
    55. .text:000110EF                 mov     eax, [esi+_KTIMER.TimerListEntry.Flink]
    56. .text:000110F2                 mov     esi, [esi+_KTIMER.TimerListEntry.Blink]
    57. .text:000110F5                 add     esp, 10h
    58. .text:000110F8                 inc     [ebp+var_C]
    59. .text:000110FB                 mov     [esi], eax
    60. .text:000110FD                 mov     [eax+4], esi
    61. .text:00011100
    62. .text:00011100 loc_11100:                              ; CODE XREF: DoPatch+3Fj
    63. .text:00011100                                         ; DoPatch+4Bj ...
    64. .text:00011100                 cmp     edi, ebx
    65. .text:00011102                 jnz     short loc_110C1
    66. .text:00011104                 inc     [ebp+var_8]
    67. .text:00011107                 add     ebx, 10h
    68. .text:0001110A                 cmp     [ebp+var_8], 500
    69. .text:00011111                 jb      short loc_110B9
    70. .text:00011113
    71. .text:00011113 loc_11113:                              ; CODE XREF: DoPatch+3Dj
    72. .text:00011113                 mov     cl, [ebp+NewIrql] ; NewIrql
    73. .text:00011116                 call    ds:KfLowerIrql
    74. .text:0001111C                 mov     eax, [ebp+var_C]
    75. .text:0001111F                 pop     edi
    76. .text:00011120                 pop     esi
    77. .text:00011121                 pop     ebx
    78. .text:00011122                 leave
    79. .text:00011123                 retn
    80. .text:00011123 DoPatch         endp
    Код (Text):
    1. FindKiTimerTableListHead proc near      ; CODE XREF: sub_11080+Bp
    2. .text:00011006                                         ; sub_11080+23p
    3. .text:00011006
    4. .text:00011006 Timer           = _KTIMER ptr -28h
    5. .text:00011006 arg_8           = dword ptr  10h
    6. .text:00011006
    7. .text:00011006                 mov     edi, edi
    8. .text:00011008                 push    ebp
    9. .text:00011009                 mov     ebp, esp
    10. .text:0001100B                 sub     esp, 28h
    11. .text:0001100E                 push    ebx
    12. .text:0001100F                 push    esi
    13. .text:00011010                 push    edi
    14. .text:00011011                 lea     eax, [ebp+Timer]
    15. .text:00011014                 push    eax             ; Timer
    16. .text:00011015                 call    ds:KeInitializeTimer
    17. .text:0001101B                 mov     esi, ds:KeSetTimer
    18. .text:00011021                 or      ebx, 0FFFFFFFFh
    19. .text:00011024                 mov     edi, ebx
    20. .text:00011026                 jmp     short loc_1102E
    21. .text:00011028 ; ---------------------------------------------------------------------------
    22. .text:00011028
    23. .text:00011028 loc_11028:                              ; CODE XREF: FindKiTimerTableListHead+34j
    24. .text:00011028                 add     edi, 0FFFFFFFFh
    25. .text:0001102B                 adc     ebx, 0FFFFFFFFh
    26. .text:0001102E
    27. .text:0001102E loc_1102E:                              ; CODE XREF: FindKiTimerTableListHead+20j
    28. .text:0001102E                 push    0               ; Dpc
    29. .text:00011030                 push    ebx
    30. .text:00011031                 push    edi             ; DueTime
    31. .text:00011032                 lea     eax, [ebp+Timer]
    32. .text:00011035                 push    eax             ; Timer
    33. .text:00011036                 call    esi ; KeSetTimer
    34. .text:00011038                 test    al, al
    35. .text:0001103A                 jz      short loc_11028
    36. .text:0001103C                 mov     esi, [ebp+Timer.TimerListEntry.Blink]
    37. .text:0001103F                 lea     eax, [ebp+Timer]
    38. .text:00011042                 push    eax             ; PKTIMER
    39. .text:00011043                 call    ds:KeCancelTimer
    40. .text:00011049                 jmp     short loc_1104E
    41. .text:0001104B ; ---------------------------------------------------------------------------
    42. .text:0001104B
    43. .text:0001104B loc_1104B:                              ; CODE XREF: FindKiTimerTableListHead+4Bj
    44. .text:0001104B                 sub     esi, 10h
    45. .text:0001104E
    46. .text:0001104E loc_1104E:                              ; CODE XREF: FindKiTimerTableListHead+43j
    47. .text:0001104E                 cmp     dword ptr [esi], 0
    48. .text:00011051                 jnz     short loc_1104B
    49. .text:00011053                 pop     edi
    50. .text:00011054                 lea     eax, [esi+10h]
    51. .text:00011057                 pop     esi
    52. .text:00011058                 pop     ebx
    53. .text:00011059                 leave
    54. .text:0001105A                 retn
    55. .text:0001105A FindKiTimerTableListHead endp
     
  2. Velheart

    Velheart New Member

    Публикаций:
    0
    Регистрация:
    2 июн 2008
    Сообщения:
    526
    Перепутал, таймер тут не отматывается на 30 дней, конечно, а удаляется, но сути это не меняет.
     
  3. reversecode

    reversecode Guest

    Публикаций:
    0
    а что автор крека умер? или руборд умер?
    почему у автора в личку не спросить?
     
  4. Ev0lwaves

    Ev0lwaves New Member

    Публикаций:
    0
    Регистрация:
    26 дек 2008
    Сообщения:
    125
    Выложи !analyze -v.
    Какой ms bulletin накатил не помнишь?
     
  5. Velheart

    Velheart New Member

    Публикаций:
    0
    Регистрация:
    2 июн 2008
    Сообщения:
    526
    Собственно вот analize, а что накатил -- не знаю, т.к. виста сама скачала и поставила..
    Код (Text):
    1. DRIVER_IRQL_NOT_LESS_OR_EQUAL (d1)
    2. An attempt was made to access a pageable (or completely invalid) address at an
    3. interrupt request level (IRQL) that is too high.  This is usually
    4. caused by drivers using improper addresses.
    5. If kernel debugger is available get stack backtrace.
    6. Arguments:
    7. Arg1: a319cc05, memory referenced
    8. Arg2: 00000002, IRQL
    9. Arg3: 00000000, value 0 = read operation, 1 = write operation
    10. Arg4: a3b4d0cd, address which referenced memory
    11.  
    12. Debugging Details:
    13. ------------------
    14.  
    15. Unable to load image \??\C:\Crack\timerstop.sys, Win32 error 0n2
    16. *** WARNING: Unable to verify timestamp for timerstop.sys
    17. *** ERROR: Module load completed but symbols could not be loaded for timerstop.sys
    18.  
    19.  
    20.  
    21. READ_ADDRESS: GetPointerFromAddress: unable to read from 821315ac
    22. Unable to read MiSystemVaType memory at 821117e0
    23.  a319cc05
    24.  
    25. CURRENT_IRQL:  2
    26.  
    27. FAULTING_IP:
    28. timerstop+10cd
    29. a3b4d0cd ??              ???
    30.  
    31. CUSTOMER_CRASH_COUNT:  3
    32.  
    33. DEFAULT_BUCKET_ID:  VISTA_DRIVER_FAULT
    34.  
    35. BUGCHECK_STR:  0xD1
    36.  
    37. PROCESS_NAME:  System
    38.  
    39. TRAP_FRAME:  8378ba88 -- (.trap 0xffffffff8378ba88)
    40. ErrCode = 00000000
    41. eax=a319cbf9 ebx=88285dd0 ecx=82053553 edx=00000016 esi=820f94d8 edi=88285ec8
    42. eip=a3b4d0cd esp=8378bafc ebp=8378bb14 iopl=0         nv up ei ng nz na pe nc
    43. cs=0008  ss=0010  ds=0023  es=0023  fs=0030  gs=0000             efl=00010286
    44. timerstop+0x10cd:
    45. a3b4d0cd ??              ???
    46. Resetting default scope
    47.  
    48. LAST_CONTROL_TRANSFER:  from a3b4d0cd to 8208fdc4
    49.  
    50. STACK_TEXT:  
    51. 8378ba88 a3b4d0cd badb0d00 00000016 00000001 nt!KiTrap0E+0x2ac
    52. WARNING: Stack unwind information not available. Following frames may be wrong.
    53. 8378baf8 86dd91a0 86d61000 00000000 00000000 timerstop+0x10cd
    54. 8378bb14 a3b4d13a 821871d0 86dd91a0 86d61000 0x86dd91a0
    55. 8378bcfc 8218765f 00000001 00000000 8378bd24 timerstop+0x113a
    56. 8378bd44 82078fc0 a3bc3ce0 00000000 8631cad0 nt!IopLoadUnloadDriver+0x70
    57. 8378bd7c 8222553c a3bc3ce0 83780680 00000000 nt!ExpWorkerThread+0xfd
    58. 8378bdc0 820915fe 82078ec3 00000001 00000000 nt!PspSystemThreadStartup+0x9d
    59. 00000000 00000000 00000000 00000000 00000000 nt!KiThreadStartup+0x16
    60.  
    61.  
    62. STACK_COMMAND:  kb
    63.  
    64. FOLLOWUP_IP:
    65. timerstop+10cd
    66. a3b4d0cd ??              ???
    67.  
    68. SYMBOL_STACK_INDEX:  1
    69.  
    70. SYMBOL_NAME:  timerstop+10cd
    71.  
    72. FOLLOWUP_NAME:  MachineOwner
    73.  
    74. MODULE_NAME: timerstop
    75.  
    76. IMAGE_NAME:  timerstop.sys
    77.  
    78. DEBUG_FLR_IMAGE_TIMESTAMP:  4585d774
    79.  
    80. FAILURE_BUCKET_ID:  0xD1_timerstop+10cd
    81.  
    82. BUCKET_ID:  0xD1_timerstop+10cd
    83.  
    84. Followup: MachineOwner
    85. ---------