никогда такого не было, и вот опять, что это баг или фича? Делаю инжект кода из ядра через APC на Windows XP, 2003 работает нормально а на Viste, Window 7 выдает ошибку при выполении ring3 кода, при этом ring0 отрабатывает нормально куда копать? кто сталкивался? *** An Access Violation occurred in C:\Windows\system32\services.exe: The instruction at 000C0A22 tried to write to an invalid address, 000C0A22 Мой код: kd> u 000C0A22 000c0a22 nop 000c0a23 nop 000c0a24 nop 000c0a25 int 3 000c0a27 pushad 000c0a28 mov eax,dword ptr fs:[00000030h] kd> kb ChildEBP RetAddr Args to Child 0095f430 77439bd8 77d0866a 001b467a 75cdfffc ntdll!DbgBreakPoint+0x1 0095f468 77439c3b 0095f55c 773daf66 0095f500 ntdll!RtlUnhandledExceptionFilter2+0x2a4 0095f478 75cafebe 0095f55c 2c42e733 7744ddc0 ntdll!RtlUnhandledExceptionFilter+0x12 0095f500 7744dc59 0095f55c 00000000 0095f55c kernel32!UnhandledExceptionFilter+0x127 0095f518 7744e213 0095f55c 00000000 00000000 ntdll!TppExceptionFilter+0x59 0095f52c 7741aa49 0095f55c 77399bdc 00000000 ntdll!TppWaiterpOuterExceptionFilter+0x11 0095f534 77399bdc 00000000 0095fdbc 773e5f68 ntdll!TppWaiterpThread+0x702 0095f548 77394067 00000000 00000000 00000000 ntdll!_EH4_CallFilterFunc+0x12 0095f570 773f5f79 fffffffe 0095fdac 0095f678 ntdll!_except_handler4+0x8e 0095f594 773f5f4b 0095f65c 0095fdac 0095f678 ntdll!ExecuteHandler2+0x26 0095f644 773f5dd7 0095f65c 0095f678 0095f65c ntdll!ExecuteHandler+0x24 0095f644 000c0a22 0095f65c 0095f678 0095f65c ntdll!KiUserExceptionDispatcher+0xf WARNING: Frame IP not in any known module. Following frames may be wrong. 0095f940 773f5d3d 00000000 00000000 00000000 0xc0a22 0095fdbc 75c5d0e9 00000000 0095fe08 773d19bb ntdll!KiUserApcDispatcher+0x25 0095fdc8 773d19bb 003fbfa8 77d08c0a 00000000 kernel32!BaseThreadInitThunk+0xe 0095fe08 773d198e 773d2808 003fbfa8 00000000 ntdll!__RtlUserThreadStart+0x23 0095fe20 00000000 773d2808 003fbfa8 00000000 ntdll!_RtlUserThreadStart+0x1b
Кажеца все таки эта фича для Vista kd> !pte 000800D7 VA 000800d7 PDE at 00000000C0600000 PTE at 00000000C0000400 contains 00000000282DD867 contains 800000003F7F8867 pfn 282dd ---DA--UWEV pfn 3f7f8 ---DA--UW-V <----------- страница не выполняема для XP kd> !pte 007f0244 VA 007f0244 PDE at 00000000C0600018 PTE at 00000000C0003F80 contains 0000000008B3B067 contains 00000000016F1067 pfn 8b3b ---DA--UWEV pfn 16f1 ---DA--UWEV <--------- страница выполняема у кого какие предложения?
Мои соображения: - получить хэндл целевого процесса - ObOpenObjectByPointer - используя хэндл выделить в этом процессе исполняемую память - ZwAllocateVirtualMemory - выделенную память передаем - MmMapLockedPagesSpecifyCache, которая мэпит мой код на исполняемую память в чем могут быть траблы?
Кто-нибудь сталкивался с проблемами: - после инжекта в процессы services.exe, winlogon.exe для Windows Vista туда невозможно подгрузить библиотеку urlmon.dll всегда возвращает 0, тогда как в explorer.exe можно - после инжекта в процессы services.exe, explorer.exe для Windows 7 и вызова функции: urlmon!UrlDownloadToFileA процесс завершаеца с ошибкой в ntdll.dll, тогда как остальные функции из kernel32.dll работают нормально Что это, новомодная защита?
Что возвращает GetLastError () ? Возможно что urlmon не хочит грузится в серверный процесс. Сделай .dmp файл при этой ошибки и выложу куда нибудь. Посмотрим и разберёмся.
а ну да отпишусь здесь не знаю почему некоторые не любят инъекцию через APC но ее можно зделать универсальной без всякого шаманства с недокументированными структурами стабильно работает на всей линейке Windows правда придеца немного поебаца с превращением native потока в win32 и все такое