Всем доброго! Всем известна эта структура, в интернете масса описаний, дебагир от MS под w2k sp4, выдает следующее: [] Казалось бы живи и радуйся, но на этом же форуме мне так же попадались описания от Ms Rem и Four-F и они отличаются от того что дает мой далбагер. Как быть, PEPROCESS достаточно информативная структура, но в ДДК не описана, а следовательно от версии к версии ОС модифицируется, относится ли это к сервис пакам? И вообще какой выход можно найти из этой ситуации.
Ну дык структура недокументирована и в разных версиях ОС она разная, поэтому лучше не делай полное описание, а обращайся к элементам структуры по смещению которое забивается для каждой версии ОС отдельно. К сервиспакам нет, а к разным билдам - да.
Ms Rem, по смещению и работаю, но это не очень красиво и потом, если к примеру в w2k & XP PEB находиться по смещению 01B0h, а в w2k3 по другому адресу, неужто нельзя было сохранить приемственность ранее созданной структуры и дополнить ее по необходимости далее(это просто возмущение).
Ну дык тогда можешь использовать описание структуры, будет красиво, но работать будет только в одной ОС. Если надо получить адрес PEB, то для этого лучше использовать ZwQueryInformationProcess, работает 100% во всех версиях NT, и будет работать во всех будующих. А ты никогда не задумывался почему эти структуры недокументированы? Мне кажется основная причина в том, что документируя часть системы Microsoft обязуется поддерживать неизменность этой части во всех будующих версиях ОС в целях совместимости. Что же будет если задокументировать всю систему? Я думаю всем понятно, что система тогда остановиться в своем развитии и превратиться в груду старого кода который нельзя улучшить по причине полной документированости всех его внутренних структур. Если ты используешь недокументированые структуры, то делаешь это на свой страх и риск, и MS не несет ответственность за то, что твоя программа может незаработать в будующих версиях системы. Я например в своих программах привязываю смещения в структурах не к версии ОС, а к конкретному номеру билда, и если версия ОС абсолютно точно не определена, то лучше такой код не запускать. К примеру, если мой руткит не имеет смещений в структурах, то вместо DKOM включаются обычные апи хуки.
LuckyDevil, ребятам там и так не сладко приходится - такого монстра писАть, а ты ещё хочешь, чтоб они тебе за совместимостью структур следили
Если нужен EPROCESS и т.п. недок. структуры для конкретной версии виндов, берешь соответствующий ntoskrnl.pdb и делаешь себе хэдер с пом. pdbdump.
Ms Rem ну так PEB я получу, но ведь эта зараза тоже не документирована, соответсвенно опять же придется работать со смещениями. с чего начал, к тому и пришел, буду извращатся далее, а хотелось без этого. Всем спасибо.
Нет, хоть PEB недокументирована, но большая часть этой структуры сохраняется неизменной во всех существующих версиях NT. Например код получения списка загруженых модулей через чтение PEB у меня отлично работает от NT4 до Vista, поэтому PEB можно использовать по описанию, а не по смещениям.
Если хочется чистоты кода, то зависимость структуры от версии можно инкапсулировать. Пример (VC++): Код (Text): struct Sample { __declspec(property(get = get_Field1, put = put_Field1)) DWORD Field1_; DWORD get_Field1(){return *(PDWORD)((PBYTE)this + ofs_Field1_);} DWORD put_Field1(DWORD val){return *(PDWORD)((PBYTE)this + ofs_Field1_) = val;} static size_t ofs_Field1_; // так же для остальных проблемных полей... static void Init(); // инициализация полей ofs_XXX в зав. от версии виндов }; //Пример использования: Sample *ps; ps->Field1_ = 0; DWORD d = ps->Field1_;