<font color="gray][ EvilsInterrupt</font><!--color--><font color="gray]: Хорошо что рад учить народ ловить рыбку,... ]</font><!--color--> Ммм... Не то чтобы очень рад, но иногда приходится. <font color="gray][ EvilsInterrupt</font><!--color--><font color="gray]: где здесь оно? ]</font><!--color--> Код (Text): kd> !idt 0 00: 80536636 (nt!KiTrap00) 01: 80536786 (nt!KiTrap01) 02: 0000111e 03: 80536a5e (nt!KiTrap03) 04: 80536bc2 (nt!KiTrap04) 05: 80536d06 (nt!KiTrap05) 06: 80536e6a (nt!KiTrap06) 07: 805373a0 (nt!KiTrap07) 08: 00001178 09: 8053775c (nt!KiTrap09) 0a: 80537864 (nt!KiTrap0A) 0b: 80537990 (nt!KiTrap0B) 0c: 80537c94 (nt!KiTrap0C) 0d: 80537ea0 (nt!KiTrap0D) [b]0e: 805388f4 (nt!KiTrap0E)[/b] 0f: 80538c8f (nt!KiTrap0F) Зная формат IDT, можно вручную Код (Text): kd> !pcr 0 PCR Processor 0 @ffdff000 NtTib.ExceptionList: bdc59c68 NtTib.StackBase: bdc59df0 NtTib.StackLimit: bdc56000 NtTib.SubSystemTib: 00000000 NtTib.Version: 00000000 NtTib.UserPointer: 00000000 NtTib.SelfTib: 7ffde000 SelfPcr: ffdff000 Prcb: ffdff120 Irql: 00000000 IRR: 00000000 IDR: ffff2ce8 InterruptMode: 00000000 IDT: [b]8003f400[/b] GDT: 8003f000 TSS: 80042000 CurrentThread: fd03eda0 NextThread: 00000000 IdleThread: 8053fbc0 kd> dd 8003f400 8003f400 00086636 80538e00 00086786 80538e00 8003f410 0058111e 00008500 00086a5e 8053ee00 8003f420 00086bc2 8053ee00 00086d06 80538e00 8003f430 00086e6a 80538e00 000873a0 80538e00 8003f440 00501178 00008500 0008775c 80538e00 8003f450 00087864 80538e00 00087990 80538e00 8003f460 00087c94 80538e00 00087ea0 80538e00 8003f470 0008[b]88f4 8053[/b]8e00 00088c8f 80538e00 kd> ln 805388f4 (805388f4) nt!KiTrap0E | (80538be3) nt!Dr_kitf_a kd> u 805388f4 nt!KiTrap0E: 805388f4 66c74424020000 mov word ptr [esp+0x2],0x0 805388fb 55 push ebp 805388fc 53 push ebx 805388fd 56 push esi 805388fe 57 push edi 805388ff 0fa0 push fs 80538901 bb30000000 mov ebx,0x30 80538906 668ee3 mov fs,bx В KmdKit есть IdtDump Код (Text): Interrupt Descriptor Table Base: 8003F400 Limit: 000007FF Selector - Segment Selector for destination code segment Offset - Offset to procedure entry point DPL — Descriptor privilege level P — Segment present D - Size of gate: 1 = 32 bits; 0 = 16 bits D ---------------------------------------------------------------------- ---------------------------------------- Int. Sel.:Offset DPL P D Descriptor Type Description ---------------------------------------------------------------------- ---------------------------------------- 0000 0008:80536636 0 P 32 bits Interrupt Gate Fault Divide Error 0001 0008:80536786 0 P 32 bits Interrupt Gate Fault/Trap Debug 0002 0058:0000111E 0 P Task Gate Interrupt NMI Interrupt 0003 0008:80536A5E 3 P 32 bits Interrupt Gate Trap Breakpoint 0004 0008:80536BC2 3 P 32 bits Interrupt Gate Trap Overflow 0005 0008:80536D06 0 P 32 bits Interrupt Gate Fault BOUND Range Exceeded 0006 0008:80536E6A 0 P 32 bits Interrupt Gate Fault Invalid Opcode (Undefined Opcode). 0007 0008:805373A0 0 P 32 bits Interrupt Gate Fault Device Not Available (No Math Coprocessor) 0008 0050:00001178 0 P Task Gate Abort Double Fault 0009 0008:8053775C 0 P 32 bits Interrupt Gate Fault Coprocessor Segment Overrun (reserved). 000A 0008:80537864 0 P 32 bits Interrupt Gate Fault Invalid TSS 000B 0008:80537990 0 P 32 bits Interrupt Gate Fault Segment Not Present 000C 0008:80537C94 0 P 32 bits Interrupt Gate Fault Stack-Segment Fault 000D 0008:80537EA0 0 P 32 bits Interrupt Gate Fault General Protection 000E 0008:805388F4 0 P 32 bits Interrupt Gate Fault Page Fault 000F 0008:80538C8F 0 P 32 bits Interrupt Gate Intel reserved. Do not use
Four-F Код (Text): Dumping IDT: Аналогичен! kd> !idt 0 Dumping IDT: 00: 804dfbff nt!KiTrap00 чето видать не хватает да и по команде !ioapic в livekd и WinDBG: Код (Text): kd> !ioapic IoApic @ FEC00000 ID:0 (0) Arb:0 Inti00.: 00000000 Vec:00 FixedDel PhysDest:00 edg high !pic выполняется, а вот !apic нет! может это сконтроллером прерываний связано? Но под рукой кроме livekd да win+break нету ничего! Кстати где ты так нахватался что аж вручную? У меня: 1. Шрайбер 2. Руссинович и старая и новая 3. Кулаков Что еще рекомендуешь?
Насчёт вручную: долго курил мануалы от Intel. Много дельной инфы: http://www.microsoft.com/whdc/driver/default.mspx http://www.osronline.com/ И вообще, читай всё подряд.
Four-F Кстати дома вручную по твоему методу нашел запросто, а на работе, чтото не выходило! Видать не всегда этот метод работает! Заметил что у тебя и у меня как на работе и дома IDT:8003f400! И где ты нашел описание IDT ? Делал pdbdump kernel32.pdb & pdbdump ntdll.pdb & pdbdump ntosrnl.pdb пока не увидел!
Случилось так, что Экран Осинел! (bsod) Сорец и миндамп в аттаче. Не пойму одного, почему у меня вызвался UnloadRoutine? Вот код тестера: Код (Text): hSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_CREATE_SERVICE); if(hSCManager) { cout << endl << "Create Service"; hService = CreateService(hSCManager, "Rootkit", "Rootkit Driver", SERVICE_START | DELETE | SERVICE_STOP, SERVICE_KERNEL_DRIVER, SERVICE_DEMAND_START, SERVICE_ERROR_IGNORE, argv[1], NULL, NULL, NULL, NULL, NULL); if(!hService) { hService = OpenService(hSCManager, "Rootkit", SERVICE_START | DELETE | SERVICE_STOP); } if(hService) { cout << endl << "Start Service\n"; StartService(hService, 0, NULL); cout << endl << "Press Enter to close service\r\n"; getchar(); ControlService(hService, SERVICE_CONTROL_STOP, &ss); DeleteService(hService); CloseServiceHandle(hService); } CloseServiceHandle(hSCManager); _1176992198__crash&src.rar
Потому, что у тебя какая-то жуткая и кривая смесь legacy и PnP драйвера, которую система не в силах переварить. Если есть AddDevice, то, кажется, система проверяет, заполнил ли он MajorFunction[IRP_PNP]. Если не заполнил, то вызывает DriverUnload и выгружает драйвер. ЗЫ: На будущее, если кидаешь дамп, то от исходника мало толку, т.к. в дампе только смещения. Как сопоставить их с исходником, если нет самого модуля?