Доброго времени суток. Такой вопрос. Выполняю инжект в один из системных процессов, у него OptionalHeader.Subsystem=Native. На обычных Win32 приложениях работает нормально, а с одним из системных(не csrss) падает в бсод. Вот аварийный дамп: Код (Text): Windows XP Kernel Version 2600 (Service Pack 2) MP (2 procs) Free x86 compatible Kernel base = 0x804d7000 PsLoadedModuleList = 0x805644a0 Bugcheck code 1000008E (KERNEL_MODE_EXCEPTION_NOT_HANDLED_M) Arguments c0000005 c00b0001 b26fcce4 00000000 ChildEBP RetAddr Args to Child b26fcd64 61f0bccd badb0d00 0386fb84 b26fcd98 0xc00b0001 0386fb94 61f0c810 000000c4 0386fba8 0386fba8 0x61f0bccd 0386fbb4 61f0d5d5 000000c4 00ff000c 61f0b632 0x61f0c810 0386fc08 61f0e0d9 61f00000 7c9011a7 61f00000 0x61f0d5d5 0386fc30 7c918f65 61f0e0bc 61f00000 00000002 0x61f0e0d9 0386fca4 7c918dde 0386fd30 0386fd30 00920000 0x7c918f65 0386fd1c 7c90eac7 0386fd30 7c900000 00000000 0x7c918dde 00000000 00000000 00000000 00000000 00000000 0x7c90eac7 eax=00000124 ebx=c00b0001 ecx=00000000 edx=0386fb84 esi=0386fb8c edi=b26fcd64 eip=c00b0001 esp=b26fcd58 ebp=b26fcd64 iopl=0 nv up ei ng nz na po cy cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00010287 c00b0001 0000 add [eax],al ds:0023:00000124=?? c00b0003 0000 add [eax],al c00b0005 0000 add [eax],al Нативному приложению доступна ядерная память ?
точно невнимательно прочитал И тем не менее инжектируемый код приведи Бсод произойдет только в том случае, если ты натив-процесс закрешил (например юзая юзермодные апи)
Я юзермодные апи не юзаю, только прерывания, если падает изза завершения критического процесса, тогда код STATUS_SYSTEM_PROCESS_TERMINATED, а здесь код выполняется в режиме ядра, я не могу понять как туда попал, это не GUI процесс.
Инжектируемый код привести не могу, походу это будет сплоит. Он прозрачный, открывает секцию, копирует её хэндл в инжектирующий процесс и сигнализирует евент.
Вот часть шелкода, где возникает исключение: Код (Text): 0027015D pop eax 0027015E mov edx,dword ptr ds:[ebx+801FE8] 00270164 mov dword ptr ds:[edx],eax ;<-------------- EAX C0000005 ECX 002EFA54 EDX 00000000 EBX FFA6E1F0 ESP 002EFA30 EBP 002EFA74 ESI FFFFFFFF EDI 00000000 EIP 00270164 C 0 ES 0023 32bit 0(FFFFFFFF) P 1 CS 001B 32bit 0(FFFFFFFF) A 0 SS 0023 32bit 0(FFFFFFFF) Z 0 DS 0023 32bit 0(FFFFFFFF) S 1 FS 003B 32bit 7FFDB000(FFF) T 0 GS 0000 NULL D 0 O 0 LastErr ERROR_SUCCESS (00000000) EFL 00000286 (NO,NB,NE,A,S,PE,L,LE) DR0 00000000 DR1 00000000 DR2 00000000 DR3 00000000 DR6 00000000 DR7 00000000
Это процесс smss, после исключения он сразу завершается со STATUS_ACCESS_VIOLATION. Трассировал под олей, система не падает. Тоесть под отладчиком переход на ядерную память не выполняется.
1: kd> !analyze -v Standard debugger extensions do not work with kernel minidump files because no data is present in the dump file. Consult the debugger documentation for more information on kernel minidump files
Если в опциях стоит малый минидамп, то он сохраняется, если дамп памяти ядра, то дамп вообще не создаётся, падает не как обычно, нет процентов сохранения.
Записал скрин, там трассировка до места где возникает исключение, затем вызывается NtRaiseException и вылетает в бсод. http://openfile.ru/57469