(ой сорри - не туда запостил! киньте в кернел кодинг пожалста!) привет! пытаюсь получить доступ к Shadow SDT - нужно похукать NtUserXXX некоторые. ищу ее по методу ms-rem'а: от KeAddSystemServiceTable до lea ecx, dword_[eax]. нахожу, все норм. SST от ntoskrnl (точнее на хосте у меня ядром ntkrnlpa является - на вм забыл посмотреть - но пае тут не при чем думаю) там адекватная. а вот SST по win32k указывает кудато в облака (массив сервисов) - хотя опять же - число функций указано верно при этом. подскажите, в чем может быть трабла?
[0x82195000] - да - но MmIsValidAddress == FALSE для него. дамп памяти по этому адресу - "невозможно произвести чтение с устр-ва". 0x00000339 - правильное(!) число сервисов. в тоже время - таблица oskrnl (-0x10) - валидна полностью. проверял и по адресу KeServiceDescriptorTable - там конечно же oskrnl тоже валидна - а вот win32k полностью нулями заполнена. вот хз... ап - решено - надо аттачнуться было к процессу - код исполнялся с driverentry адд (в систем контексте, а наскока я понял нужно чтоб в гуевом это было)
sn0w Прекратите читать ачат. Никакой аттач не нужен. Он может быть необхожим только для сессий, так как их ядерная память разделяется. Как сказали выше используйте символы. Кстате x != [x].
справедливо) но еще... int x; x = (int)&x; if(x==*(int*)x) MessageBox(0,"Бывает ",0,0); тоже справедливо =) только вот дело в том, что решил я чутка потрейсить. нашел shadow как и писал msrem (где то тут на форуме). расставил бряки в коде: перед поиском sssdt, перед аттачем (к цсрсс цеплялся), после аттача и после детача. результат был такой: перед аттачем посмотрел - результаты были такиеже как я и писал выше. после аттача адрес win32k стал валиден (он не менялся - просто дебаггер смог прочитать контент) и наконец после детача таблица опять исчезла. адрес также не менялся. выходит - проецируется она только на апы гуевых процессов? вот примерно как все выглядит. (без аттача вылетает в spliceHookFunction(pSDTShadow->win32k.ServiceTable[gnNtUserFindWindowEx],xNtUserFindWindowEx) попытка прочитать контент таблицы); Код (Text): NTSTATUS InstallWin32KHandlers() { PEPROCESS pecsrss; PSERVICE_DESCRIPTOR_TABLE pSDTShadow; pSDTShadow = (PSERVICE_DESCRIPTOR_TABLE)utilsGetShadowSDT(); if(pSDTShadow == NULL) return STATUS_UNSUCCESSFUL; if(!NT_SUCCESS(PsLookupProcessByProcessId((HANDLE)utilsFindProcessIdByName(L"csrss.exe"), &pecsrss))) return STATUS_UNSUCCESSFUL; DbgPrintEx(DPFLTR_IHVDRIVER_ID, 31337, "TASUMO: SDTShadow %08X, break before attach\n", pSDTShadow); __asm int 3; KeAttachProcess(pecsrss); pseNtUserFindWindowEx = spliceHookFunction(pSDTShadow->win32k.ServiceTable[gnNtUserFindWindowEx], xNtUserFindWindowEx); pseNtUserBuildHwndList = spliceHookFunction(pSDTShadow->win32k.ServiceTable[gnNtUserBuildHwndList], xNtUserBuildHwndList); DbgPrintEx(DPFLTR_IHVDRIVER_ID, 31337, "TASUMO: break after attach\n"); __asm int 3; KeDetachProcess(); DbgPrintEx(DPFLTR_IHVDRIVER_ID, 31337, "TASUMO: break after detach\n"); __asm int 3; DbgPrintEx(DPFLTR_IHVDRIVER_ID, 31337, "TASUMO: WIN32K handlers installed!\n"); return STATUS_SUCCESS; }