таблица в тени - win7 7600 x86

Тема в разделе "LANGS.C", создана пользователем sn0w, 18 ноя 2010.

  1. sn0w

    sn0w Active Member

    Публикаций:
    0
    Регистрация:
    27 фев 2010
    Сообщения:
    958
    (ой сорри - не туда запостил! киньте в кернел кодинг пожалста!)

    привет!
    пытаюсь получить доступ к Shadow SDT - нужно похукать NtUserXXX некоторые.
    ищу ее по методу ms-rem'а: от KeAddSystemServiceTable до lea ecx, dword_[eax]. нахожу, все норм.
    SST от ntoskrnl (точнее на хосте у меня ядром ntkrnlpa является - на вм забыл посмотреть - но пае тут не при чем думаю) там адекватная. а вот SST по win32k указывает кудато в облака (массив сервисов) - хотя опять же - число функций указано верно при этом.

    подскажите, в чем может быть трабла?

    [​IMG]
     
  2. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    символы же есть.
    сравни с ними, правильно ли адрес получаешь.
     
  3. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    [0x82195000] ?
     
  4. sn0w

    sn0w Active Member

    Публикаций:
    0
    Регистрация:
    27 фев 2010
    Сообщения:
    958
    [0x82195000] - да - но MmIsValidAddress == FALSE для него. дамп памяти по этому адресу - "невозможно произвести чтение с устр-ва". 0x00000339 - правильное(!) число сервисов. в тоже время - таблица oskrnl (-0x10) - валидна полностью.

    проверял и по адресу KeServiceDescriptorTable - там конечно же oskrnl тоже валидна - а вот win32k полностью нулями заполнена. вот хз...

    ап - решено - надо аттачнуться было к процессу - код исполнялся с driverentry

    адд (в систем контексте, а наскока я понял нужно чтоб в гуевом это было)
     
  5. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    sn0w
    Прекратите читать ачат. Никакой аттач не нужен. Он может быть необхожим только для сессий, так как их ядерная память разделяется.

    Как сказали выше используйте символы. Кстате x != [x].
     
  6. sn0w

    sn0w Active Member

    Публикаций:
    0
    Регистрация:
    27 фев 2010
    Сообщения:
    958
    справедливо) но еще...
    int x;
    x = (int)&x;
    if(x==*(int*)x)
    MessageBox(0,"Бывает ;)",0,0);

    тоже справедливо =)

    только вот дело в том, что решил я чутка потрейсить. нашел shadow как и писал msrem (где то тут на форуме). расставил бряки в коде: перед поиском sssdt, перед аттачем (к цсрсс цеплялся), после аттача и после детача.

    результат был такой: перед аттачем посмотрел - результаты были такиеже как я и писал выше. после аттача адрес win32k стал валиден (он не менялся - просто дебаггер смог прочитать контент) и наконец после детача таблица опять исчезла. адрес также не менялся. выходит - проецируется она только на апы гуевых процессов?

    вот примерно как все выглядит. (без аттача вылетает в spliceHookFunction(pSDTShadow->win32k.ServiceTable[gnNtUserFindWindowEx],xNtUserFindWindowEx) попытка прочитать контент таблицы);

    Код (Text):
    1. NTSTATUS InstallWin32KHandlers()
    2. {
    3.     PEPROCESS pecsrss;
    4.     PSERVICE_DESCRIPTOR_TABLE pSDTShadow;
    5.    
    6.     pSDTShadow = (PSERVICE_DESCRIPTOR_TABLE)utilsGetShadowSDT();
    7.     if(pSDTShadow == NULL)
    8.         return STATUS_UNSUCCESSFUL;
    9.    
    10.     if(!NT_SUCCESS(PsLookupProcessByProcessId((HANDLE)utilsFindProcessIdByName(L"csrss.exe"), &pecsrss)))
    11.         return STATUS_UNSUCCESSFUL;
    12.    
    13.     DbgPrintEx(DPFLTR_IHVDRIVER_ID, 31337, "TASUMO: SDTShadow %08X, break before attach\n", pSDTShadow);
    14.     __asm int 3;
    15.  
    16.     KeAttachProcess(pecsrss);
    17.  
    18.     pseNtUserFindWindowEx = spliceHookFunction(pSDTShadow->win32k.ServiceTable[gnNtUserFindWindowEx],  xNtUserFindWindowEx);
    19.     pseNtUserBuildHwndList = spliceHookFunction(pSDTShadow->win32k.ServiceTable[gnNtUserBuildHwndList], xNtUserBuildHwndList);
    20.  
    21.     DbgPrintEx(DPFLTR_IHVDRIVER_ID, 31337, "TASUMO: break after attach\n");
    22.     __asm int 3;
    23.    
    24.     KeDetachProcess();
    25.  
    26.     DbgPrintEx(DPFLTR_IHVDRIVER_ID, 31337, "TASUMO: break after detach\n");
    27.     __asm int 3;
    28.  
    29.     DbgPrintEx(DPFLTR_IHVDRIVER_ID, 31337, "TASUMO: WIN32K handlers installed!\n");
    30.  
    31.     return STATUS_SUCCESS;
    32. }
     
  7. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    > проецируется она только на апы гуевых процессов?
    не, потоков :)
     
  8. sn0w

    sn0w Active Member

    Публикаций:
    0
    Регистрация:
    27 фев 2010
    Сообщения:
    958
    пардон ;)