В очередной раз о PEPROCESS

Тема в разделе "WASM.WIN32", создана пользователем LuckyDevil, 21 дек 2005.

  1. LuckyDevil

    LuckyDevil New Member

    Публикаций:
    0
    Регистрация:
    10 мар 2005
    Сообщения:
    278
    Адрес:
    Uzbekistan
    Всем доброго!

    Всем известна эта структура, в интернете масса описаний, дебагир от MS под w2k sp4, выдает следующее:



    []



    Казалось бы живи и радуйся, но на этом же форуме мне так же попадались описания от Ms Rem и Four-F и они отличаются от того что дает мой далбагер.

    Как быть, PEPROCESS достаточно информативная структура, но в ДДК не описана, а следовательно от версии к версии ОС модифицируется, относится ли это к сервис пакам?

    И вообще какой выход можно найти из этой ситуации.
     
  2. Ms Rem

    Ms Rem New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2005
    Сообщения:
    1.057
    Адрес:
    С планеты "Земля"




    Ну дык структура недокументирована и в разных версиях ОС она разная, поэтому лучше не делай полное описание, а обращайся к элементам структуры по смещению которое забивается для каждой версии ОС отдельно.





    К сервиспакам нет, а к разным билдам - да.
     
  3. LuckyDevil

    LuckyDevil New Member

    Публикаций:
    0
    Регистрация:
    10 мар 2005
    Сообщения:
    278
    Адрес:
    Uzbekistan
    Ms Rem, по смещению и работаю, но это не очень красиво и потом, если к примеру в w2k & XP PEB находиться по смещению 01B0h, а в w2k3 по другому адресу, неужто нельзя было сохранить приемственность ранее созданной структуры и дополнить ее по необходимости далее(это просто возмущение).
     
  4. Ms Rem

    Ms Rem New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2005
    Сообщения:
    1.057
    Адрес:
    С планеты "Земля"


    Ну дык тогда можешь использовать описание структуры, будет красиво, но работать будет только в одной ОС.







    Если надо получить адрес PEB, то для этого лучше использовать ZwQueryInformationProcess, работает 100% во всех версиях NT, и будет работать во всех будующих.







    А ты никогда не задумывался почему эти структуры недокументированы? Мне кажется основная причина в том, что документируя часть системы Microsoft обязуется поддерживать неизменность этой части во всех будующих версиях ОС в целях совместимости. Что же будет если задокументировать всю систему? Я думаю всем понятно, что система тогда остановиться в своем развитии и превратиться в груду старого кода который нельзя улучшить по причине полной документированости всех его внутренних структур.

    Если ты используешь недокументированые структуры, то делаешь это на свой страх и риск, и MS не несет ответственность за то, что твоя программа может незаработать в будующих версиях системы.

    Я например в своих программах привязываю смещения в структурах не к версии ОС, а к конкретному номеру билда, и если версия ОС абсолютно точно не определена, то лучше такой код не запускать.

    К примеру, если мой руткит не имеет смещений в структурах, то вместо DKOM включаются обычные апи хуки.
     
  5. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    LuckyDevil, ребятам там и так не сладко приходится - такого монстра писАть, а ты ещё хочешь, чтоб они тебе за совместимостью структур следили ;)
     
  6. green

    green New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2003
    Сообщения:
    1.217
    Адрес:
    Ukraine
    Если нужен EPROCESS и т.п. недок. структуры для конкретной версии виндов, берешь соответствующий ntoskrnl.pdb и делаешь себе хэдер с пом. pdbdump.
     
  7. LuckyDevil

    LuckyDevil New Member

    Публикаций:
    0
    Регистрация:
    10 мар 2005
    Сообщения:
    278
    Адрес:
    Uzbekistan
    Ms Rem


    ну так PEB я получу, но ведь эта зараза тоже не документирована, соответсвенно опять же придется работать со смещениями.



    :) с чего начал, к тому и пришел, буду извращатся далее, а хотелось без этого.



    Всем спасибо.
     
  8. Ms Rem

    Ms Rem New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2005
    Сообщения:
    1.057
    Адрес:
    С планеты "Земля"




    Нет, хоть PEB недокументирована, но большая часть этой структуры сохраняется неизменной во всех существующих версиях NT. Например код получения списка загруженых модулей через чтение PEB у меня отлично работает от NT4 до Vista, поэтому PEB можно использовать по описанию, а не по смещениям.
     
  9. green

    green New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2003
    Сообщения:
    1.217
    Адрес:
    Ukraine


    Если хочется чистоты кода, то зависимость структуры от версии можно инкапсулировать.

    Пример (VC++):
    Код (Text):
    1.  
    2. struct Sample
    3. {
    4.     __declspec(property(get = get_Field1, put = put_Field1)) DWORD Field1_;
    5.     DWORD get_Field1(){return *(PDWORD)((PBYTE)this + ofs_Field1_);}
    6.     DWORD put_Field1(DWORD val){return *(PDWORD)((PBYTE)this + ofs_Field1_) = val;}
    7.     static size_t ofs_Field1_;
    8.     // так же для остальных проблемных полей...
    9.  
    10.     static void Init(); // инициализация полей ofs_XXX в зав. от версии виндов
    11. };
    12.  
    13. //Пример использования:
    14.  
    15. Sample *ps;
    16.  
    17. ps->Field1_ = 0;
    18. DWORD d = ps->Field1_;
    19.  
    20.