kernel exception: анализ крешей

Тема в разделе "WASM.WIN32", создана пользователем dmk, 1 апр 2006.

  1. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    <font color="gray][ EvilsInterrupt</font><!--color--><font color="gray]: Хорошо что рад учить народ ловить рыбку,... ]</font><!--color-->



    Ммм... Не то чтобы очень рад, но иногда приходится.



    <font color="gray][ EvilsInterrupt</font><!--color--><font color="gray]: где здесь оно? ]</font><!--color-->


    Код (Text):
    1. kd> !idt 0
    2.     00: 80536636 (nt!KiTrap00)
    3.     01: 80536786 (nt!KiTrap01)
    4.     02: 0000111e
    5.     03: 80536a5e (nt!KiTrap03)
    6.     04: 80536bc2 (nt!KiTrap04)
    7.     05: 80536d06 (nt!KiTrap05)
    8.     06: 80536e6a (nt!KiTrap06)
    9.     07: 805373a0 (nt!KiTrap07)
    10.     08: 00001178
    11.     09: 8053775c (nt!KiTrap09)
    12.     0a: 80537864 (nt!KiTrap0A)
    13.     0b: 80537990 (nt!KiTrap0B)
    14.     0c: 80537c94 (nt!KiTrap0C)
    15.     0d: 80537ea0 (nt!KiTrap0D)
    16.     [b]0e: 805388f4 (nt!KiTrap0E)[/b]
    17.     0f: 80538c8f (nt!KiTrap0F)




    Зная формат IDT, можно вручную


    Код (Text):
    1. kd> !pcr 0
    2. PCR Processor 0 @ffdff000
    3.         NtTib.ExceptionList: bdc59c68
    4.             NtTib.StackBase: bdc59df0
    5.            NtTib.StackLimit: bdc56000
    6.          NtTib.SubSystemTib: 00000000
    7.               NtTib.Version: 00000000
    8.           NtTib.UserPointer: 00000000
    9.               NtTib.SelfTib: 7ffde000
    10.  
    11.                     SelfPcr: ffdff000
    12.                        Prcb: ffdff120
    13.                        Irql: 00000000
    14.                         IRR: 00000000
    15.                         IDR: ffff2ce8
    16.               InterruptMode: 00000000
    17.                         IDT: [b]8003f400[/b]
    18.                         GDT: 8003f000
    19.                         TSS: 80042000
    20.  
    21.               CurrentThread: fd03eda0
    22.                  NextThread: 00000000
    23.                  IdleThread: 8053fbc0
    24.  
    25. kd> dd 8003f400
    26. 8003f400  00086636 80538e00 00086786 80538e00
    27. 8003f410  0058111e 00008500 00086a5e 8053ee00
    28. 8003f420  00086bc2 8053ee00 00086d06 80538e00
    29. 8003f430  00086e6a 80538e00 000873a0 80538e00
    30. 8003f440  00501178 00008500 0008775c 80538e00
    31. 8003f450  00087864 80538e00 00087990 80538e00
    32. 8003f460  00087c94 80538e00 00087ea0 80538e00
    33. 8003f470  0008[b]88f4 8053[/b]8e00 00088c8f 80538e00
    34.  
    35. kd> ln 805388f4
    36. (805388f4)   nt!KiTrap0E   |  (80538be3)   nt!Dr_kitf_a
    37.  
    38. kd> u 805388f4
    39. nt!KiTrap0E:
    40. 805388f4 66c74424020000   mov     word ptr [esp+0x2],0x0
    41. 805388fb 55               push    ebp
    42. 805388fc 53               push    ebx
    43. 805388fd 56               push    esi
    44. 805388fe 57               push    edi
    45. 805388ff 0fa0             push    fs
    46. 80538901 bb30000000       mov     ebx,0x30
    47. 80538906 668ee3           mov     fs,bx




    В KmdKit есть IdtDump


    Код (Text):
    1. Interrupt Descriptor Table
    2. Base: 8003F400   Limit: 000007FF
    3.  
    4. Selector    - Segment Selector for destination code segment
    5. Offset      - Offset to procedure entry point
    6. DPL         — Descriptor privilege level
    7. P           — Segment present
    8. D           - Size of gate: 1 = 32 bits; 0 = 16 bits D
    9.  
    10. ---------------------------------------------------------------------- ----------------------------------------
    11. Int.  Sel.:Offset    DPL  P   D        Descriptor Type   Description
    12. ---------------------------------------------------------------------- ----------------------------------------
    13. 0000  0008:80536636   0   P   32 bits  Interrupt Gate   Fault       Divide Error
    14. 0001  0008:80536786   0   P   32 bits  Interrupt Gate   Fault/Trap  Debug
    15. 0002  0058:0000111E   0   P            Task Gate        Interrupt   NMI Interrupt
    16. 0003  0008:80536A5E   3   P   32 bits  Interrupt Gate   Trap        Breakpoint
    17. 0004  0008:80536BC2   3   P   32 bits  Interrupt Gate   Trap        Overflow
    18. 0005  0008:80536D06   0   P   32 bits  Interrupt Gate   Fault       BOUND Range Exceeded
    19. 0006  0008:80536E6A   0   P   32 bits  Interrupt Gate   Fault       Invalid Opcode (Undefined Opcode).
    20. 0007  0008:805373A0   0   P   32 bits  Interrupt Gate   Fault       Device Not Available (No Math Coprocessor)
    21. 0008  0050:00001178   0   P            Task Gate        Abort       Double Fault
    22. 0009  0008:8053775C   0   P   32 bits  Interrupt Gate   Fault       Coprocessor Segment Overrun (reserved).
    23. 000A  0008:80537864   0   P   32 bits  Interrupt Gate   Fault       Invalid TSS
    24. 000B  0008:80537990   0   P   32 bits  Interrupt Gate   Fault       Segment Not Present
    25. 000C  0008:80537C94   0   P   32 bits  Interrupt Gate   Fault       Stack-Segment Fault
    26. 000D  0008:80537EA0   0   P   32 bits  Interrupt Gate   Fault       General Protection
    27. 000E  0008:805388F4   0   P   32 bits  Interrupt Gate   Fault       Page Fault
    28. 000F  0008:80538C8F   0   P   32 bits  Interrupt Gate               Intel reserved. Do not use
     
  2. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    Four-F
    Код (Text):
    1. Dumping IDT: Аналогичен!
    2.  
    3. kd> !idt 0
    4.  
    5. Dumping IDT:
    6.  
    7. 00:     804dfbff nt!KiTrap00


    чето видать не хватает да и по команде !ioapic в livekd и WinDBG:
    Код (Text):
    1. kd> !ioapic
    2. IoApic @ FEC00000  ID:0 (0)  Arb:0
    3. Inti00.: 00000000  Vec:00  FixedDel  PhysDest:00      edg  high


    !pic выполняется, а вот !apic нет! может это сконтроллером прерываний связано? Но под рукой кроме livekd да win+break нету ничего! Кстати где ты так нахватался что аж вручную?



    У меня:

    1. Шрайбер

    2. Руссинович и старая и новая

    3. Кулаков



    Что еще рекомендуешь?
     
  3. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
  4. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    Four-F

    Кстати дома вручную по твоему методу нашел запросто, а на работе, чтото не выходило! Видать не всегда этот метод работает!

    Заметил что у тебя и у меня как на работе и дома IDT:8003f400!



    И где ты нашел описание IDT ?



    Делал pdbdump kernel32.pdb & pdbdump ntdll.pdb & pdbdump ntosrnl.pdb пока не увидел! :)
     
  5. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    Случилось так, что Экран Осинел! (bsod)

    Сорец и миндамп в аттаче.

    Не пойму одного, почему у меня вызвался UnloadRoutine?

    Вот код тестера:
    Код (Text):
    1.     hSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_CREATE_SERVICE);
    2.     if(hSCManager)
    3.     {
    4.         cout << endl << "Create Service";
    5.         hService = CreateService(hSCManager, "Rootkit",
    6.                 "Rootkit Driver",
    7.                 SERVICE_START | DELETE | SERVICE_STOP,
    8.                 SERVICE_KERNEL_DRIVER,
    9.                 SERVICE_DEMAND_START,
    10.                 SERVICE_ERROR_IGNORE,
    11.                 argv[1],
    12.                 NULL, NULL, NULL, NULL, NULL);
    13.         if(!hService)
    14.         {
    15.             hService = OpenService(hSCManager, "Rootkit",
    16.                     SERVICE_START | DELETE | SERVICE_STOP);
    17.         }
    18.         if(hService)
    19.         {
    20.             cout << endl << "Start Service\n";
    21.             StartService(hService, 0, NULL);
    22.             cout << endl << "Press Enter to close service\r\n";
    23.             getchar();
    24.             ControlService(hService, SERVICE_CONTROL_STOP, &ss);
    25.             DeleteService(hService);
    26.             CloseServiceHandle(hService);          
    27.         }
    28.  
    29.         CloseServiceHandle(hSCManager);
    30.  
    [​IMG] _1176992198__crash&src.rar
     
  6. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    Потому, что у тебя какая-то жуткая и кривая смесь legacy и PnP драйвера, которую система не в силах переварить. Если есть AddDevice, то, кажется, система проверяет, заполнил ли он MajorFunction[IRP_PNP]. Если не заполнил, то вызывает DriverUnload и выгружает драйвер.



    ЗЫ: На будущее, если кидаешь дамп, то от исходника мало толку, т.к. в дампе только смещения. Как сопоставить их с исходником, если нет самого модуля?
     
  7. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    Ты прав, Почитал ДДК про AddDevice ты прав, там надо не так все просто! Спасибо