Сегодня 19 апреля 2025
18+
MWC 2018 2018 Computex IFA 2018
реклама
Программное обеспечение

Недокументированные функции в ОС Windows 95/98/NT/2000, поиск и практическое использование

Автор: Ашот Оганесян

Начать наверное надо с того, зачем вообще искать ф-ции, которые производитель официально не задокументировал? Бытует мнение, что использование недокументированных ф-ций, как и опереатора goto это плохой стиль. Я как программист-практик не вижу ничего плохого в том, что бы заменить несколько операторов сравнения на один оператор безусловного перехода, то же и в отношении недокументированных ф-ций. Есть ситуации когда просто необходимо знать больше чем это позволяет официальная документация, например при написании программ, тесно работающих с системой - системных утилит. Возьмите к примеру известный всем пакет Norton Utilities, вы думаете старик Питер (ну конечно это не он писал этот пакет, но все же) пользовался только Win 32 SDK и MSDN Universal (или может Professional, как я)? Заявляю почти как Станиславский - не верю! Есть масса примеров того, что знание и использование недокументированных ф-ций позволяет сократить время и повысить качество разработки. Конечно во всем надо знать меру, нельзя слепо надеятся на то, что производитель ОС оставит недокументированную ф-цию в следующей версии или не изменит ее синтаксис. Все очень сильно зависит от того, что это за ф-ция, как она реализована и т.п. Хотя есть так же масса примеров тому, что ф-ция была не документированной в старой версии ОС, а потом, в новой версии, стала вполне обычной API-шной ф-цией (так было с несколькими ф-циями в NT3 при переходе на NT4). Буду считать, что дальнейшая агитация за недокументиованные ф-ции не нужна и перейду к тому, как собственно я ищу их в ОС производства компании Microsoft..

Оговорюсь с самого начала, что я не буду углубляться в долгие и нудные листинги дизассемблеров, дампы отладчиков и т.п. изыски, а затрону лишь основы, с целью донести до читателей технологию поиска и иследования внутренностей ОС. У меня есть несколько принципов, которые я стараюсь блюсти - все, что я хочу найти в ОС нужно мне для решения какой-либо задачи, т.е. я не стараюсь найти все то, что спрятали в Microsoft; я не люблю изобретать велосипед, если есть возможность найти необходимую информацию не прибегая к реверс-инжинирингу, лучше воспользоваться этой возможностью; если есть два решения поставленной задачи - одно красивое и документированное, а второе не красивое зато использует недокументированную ф-цию, то я выбираю документированное т.к. моя цель написать максимально работоспособный и легко читаемый код.

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

Начинать поиск лучше со специализированных сайтов по программированию, вот очень краткий перечень моих любимых сайтов:

www.sysinternals.com - сайт Марка Руссиновича и Брюса Когвела, скажем так - не самые последние люди в нашем деле.
www.mvps.org/win32/ - очень полезная информация по программированию в Win 32.
www.ddj.com - сайт Dr. Dobb's Journal (DDJ), одного из лучших журналов по программированию.
www.msj.com - сайт Microsoft System Journal (MSJ), отличный журнал для системных программистов, тут можно найти знаменитые статьи "Under the Hood" ("Под Капотом") от Matt Pietrek, консультанта компании Nu-Mega Technologies.
www.codeguru.com - про MFC, но к счастью не только.
www.codepile.com - мой скромный сайт, на котором я пишу про то, что нахожу, правда только по-английски, а самое ценное, что тут вы найдете гораздо более внушительную коллекцию линков.

Огромным хранилищем информации являются ньюсгруппы, поиск по ним лучше всего вести используя сервер www.deja.com, только не забудьте включить в поиск все данные, а не только новые (по умолчанию поиск ведется только по новым).

Конечно существуют еще и обычные книги, их не так много по нашей тематике. Я могу рекомендовать следующие книги:
"Windows NT. File System Internals. A Developer's Guide.", 1997 O'Reilly & Associates, Inc - книга известного Rajeev Nagar, посвящена проблемам написания файловых драйверов для NT, ценность в том, что содержит массу описаний недокументированных ф-ций Native API, связанных с файловой системой;
"Inside Windows NT. Second Edition.", 1998 Microsoft Press - полезная книжка от David A. Solomon, в ней вы не найдете никаких недокументированных ф-ций (и примеров программирования вообще), зато узнаете очень много интересного про то как все внутри у NT устроено, это полезно для самостоятельного исследования ядра;
"Undocumented Windows Nt.", 1999 IDG Books Worldwide - авторы Prasad Dabak, Sandeep Phadke и Milind Borate, скажу просто - must have.
"Advanced Windows (3rd Ed)", 1997 Microsoft Press - "библия" для любого Windows-программиста, автор Jeffrey Richter, мои комментарии этой книге не нужны;
"Недокументированные возможности Windows NT.", 1998 Нолидж - единственная книга на русском языке, которую я приобрел за последние два года, автор А.В. Коберниченко, полезная информация по Native API, правда есть некоторые ошибки в восстановленных структурах.
Кстати, в середине февраля, по моим данным, выходит одна долгожданная книга, название я точно не знаю, но что-то типа "Windows NT Native API", как утверждает автор, будет содержать описания всех ф-ций из ntdll.dll (native api).

Нельзя забывать про MSDN, в нем иногда попадаются интересные статьи и примеры, есть даже несколько описаний недокументированных ф-ций, взятых из MSJ.

Когда все информационные источники исчерпаны, а ситуация с использованием ф-ции не проясняется, то остается один выход - реверс-инжиниринг. Тут нам понадобятся некоторые инструменты: отладчик, дизассемблер и компилятор. В качестве отладчика я использую знаменитый SoftIce фирмы Nu-Mega, он входит в состав Drivers Studio, но можно приобрести и отдельно, т.к. сама студия стоит очень дорого (цена в США около $1200, у нас около $2000). Лучший дизассемблер это конечно IDAPro, но я никак не собирусь его приобрести (для нас он стоит порядка $140), поэтому приходится пользоваться разными бесплатными поделками. Компилятор нужен для того, что бы "не отходя от кассы" проверять то, что мы нароем и восстановим. Желательно выбрать какую-нибудь программу из состава ОС, которая содержит необходимую ф-цию и начать исследовать ее. Самым настоящим "алмазом" является стандартный Task Manager из NT, он содержит огромное кол-во разнообразных недокументированных ф-ций (например NtQuerySystemInformation). Лучше всего взять Task Manager из состава Windows NT/2000 Debug Checked Build, тогда при его отлаживании в SoftIce вам буду видны многие переменные и классовые ф-ции, а смотреть на это гораздо приятнее (а главное полезнее!) чем на безымянные call [address]. Для начала, надо восстановить кол-во параметров передаваемых ф-ции, сделать это легче всего посчитав кол-во инструкций push перед вызовом этой ф-ции. Формализовав кол-во параметров, необходимо перейти к исследованию содержимого стека до и после вызова ф-ции, таким образом можно будет определить типы и возможно значение параметров. Конечно это очень трудоемкий и долгий процесс, но когда нарабатывается определенный опыт дело идет гораздо быстрее и легче. Ситуацию сильно облегчает то, что Microsoft придерживается единого стиля, восстановив одну ф-цию, можно расчитывать на некоторое подспорье в востановление другой (при всей своей недокументированности это все же API и определенные соглашения перекочевывают из ф-ции в ф-цию!). Очень полезно бывает потрассировать в отладчике стандартные API-шные ф-ции и посмотреть как они устроены, тут ситуация облегчается тем, что входные параметры известны и понять что и куда передается внутри исследуемой ф-ции уже гораздо легче. Как я уже писал выше, все ф-ции являются частью API и очень часто используют одни и те же структуры , параметры различных ф-ций часто имеют одинаковый смысл (как с ф-циями NtQuery). Поэтому имея под рукой информацию по уже известным ф-циям, иногда достаточно одного взгляда на новую ф-цию, что бы понять значения большинства ее параметров. Недостающие параметры часто восстанавливаются путем "подсовывания" различных значений, в своей тестовой программе и изучения поведения в обычном отладчике 3-го кольца (например, стандартный отладчик поставляемый с Microsoft Visual Studio для Visual C).

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

Материалы:

Как получить список открытых файлов на Win9x
Как определить зависло приложение или нет
Самый быстрый способ получить заголовок окна в Windows NT/2000
Получения HWND оболочки Windows

 
 
Если Вы заметили ошибку — выделите ее мышью и нажмите CTRL+ENTER.

window-new
Soft
Hard
Тренды 🔥
Свежий драйвер Nvidia ускорил видеокарты в синтетических тестах, но проблемы со стабильностью остались 3 ч.
«Копидел» поможет в клонировании и массовом развёртывании ОС «Альт» 5 ч.
Поумневшие ИИ-модели OpenAI o3 и o4-mini проявили повышенную склонность к галлюцинациям 8 ч.
EA показала суровую тактическую стратегию Star Wars Zero Company от ветеранов XCOM — первый трейлер и подробности 8 ч.
Новая статья: South of Midnight — соткана по лекалам. Рецензия 21 ч.
Спустя восемь лет «беты» Escape from Tarkov взяла курс на версию 1.0 — план обновлений игры на 2025 год 23 ч.
ChatGPT научился использовать воспоминания о пользователе для персонализации веб-поиска 23 ч.
Создатели следующей Battlefield рассказали о новом «языке разрушения» и показали его в деле 24 ч.
Глава Microsoft Gaming Фил Спенсер намекнул на продолжение Indiana Jones and the Great Circle 18-04 19:43
Разработчики Everspace 2 решили снизить цену на дополнение Wrath of the Ancients, потому что «вокруг дорожает буквально всё» 18-04 18:32
У земных лишайников обнаружился потенциал для выживания на Марсе 2 ч.
Nvidia, AMD и другие американские чипмейкеры опасаются, что проиграют Huawei из-за антикитайских санкций США 3 ч.
QNAP выпустила хранилище ES1686dc R2 на 16 SAS-накопителей 5 ч.
Беспилотные автомобили выйдут на российские дороги общего пользования к 2027 году 5 ч.
Tesla без объяснения причин отложила запуск производства доступной версии Model Y 5 ч.
Китайские передовые спутники связи и дальнего зондирования Земли теперь предлагают оптом и в розницу 5 ч.
Багамы отозвали разрешение на посадку ракет SpaceX Falcon 9 у своих берегов 7 ч.
В Пекине прошёл первый в мире полумарафон с участием людей и роботов 7 ч.
Synology подтвердила, что для флагманских NAS подойдут только избранные жёсткие диски 7 ч.
Looking Glass представила 27-дюймовый голографический 3D-монитор с разрешением 5K и ценой $10 тысяч 8 ч.