Странное Поведение Диспетчера Задач В Windows Server 2012

Резюме: история в картинках о том, как я «улучшал» Диспетчер задач в Windows Server 2012.



Преамбула

Все началось с того, что в целях тестирования (чтобы выяснить, есть ли принципиальная разница) я поставил Windows Сервер 2012 .

Для тех кто не знает, вот что это такое Windows 8 , только дороже.

Ну, а еще, с него можно оторвите графический интерфейс и исполнял самые разные роли.

Ну и одна из самых приятных вещей в Windows 8 для меня — это новый Диспетчер задач, и красивый, и удобный.

Каково же было мое удивление, когда я открыл его в WinServer 2012 и не увидел некоторых данных.

Вот пару фотографий для наглядности.

Windows 8:

Странное поведение диспетчера задач в Windows Server 2012

Windows Сервер 2012

Странное поведение диспетчера задач в Windows Server 2012

Как видите, не хватает пары вкладок, кроме того, отсутствуют колонки «Диск» и «Сеть».

Диска пока нет на вкладке «Производительность», но по крайней мере это можно включить командой:

diskperf -y

Вооружившись Гуглом, я выяснил, что проблема в следующем:

Это связано с тем, что метрики диска по умолчанию отключены в Windows Server 2012 из-за значительного влияния на производительность, однако в Windows 8 они включены.

Используйте монитор ресурсов для оценки использования дискового и сетевого ввода-вывода.

— Сайед Юсуф из отдела исследований и разработок Microsoft

( подробнее здесь ) Что в переводе на русский звучит как «слишком большая нагрузка на диск, поэтому мы удалили ее».

Вот как я себе представляю картину: серверная, все бегают в оцепенении, сервер не отвечает, нагрузка ужасающая.

И скромный админ в углу: «Я случайно открыл диспетчер задач на сервере вместо нетбука, больше так делать не буду!» То есть, по мнению Microsoft, это вызывает огромную нагрузку на мощных серверах, а на планшетах никаких проблем не вызывает, поэтому удалим здесь и включим здесь.

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

В общем меня это не устроило и я начал исследовать проблему.



Версия 1. Реестр

Зная Microsoft и то, что все настраивается в реестре, я начал копаться в Taskmgr.exe, чтобы найти возможные ключи.

Единственный подходящий ключ был найден в

HKLM\ System\CurrentControlSet\Services\Partmgr, EnableCounterForIoctl

Но как я узнал ранее, этот ключ включается командой diskperf и интереса не представляет.

Версия 2. Это действительно проверка типа системы?

Совершенно не веря, что такое может произойти (Microsoft обычно просто вырезает ненужные файлы), я решил проверить, что будет, если я скажу Диспетчеру задач, что это действительно находится в клиентской системе.

Чтобы проверить версию системы из вашего приложения, вам нужно вызвать функцию GetVersionEx .

Структура вернется ОСВЕРСИЯИНФОЭКС , где поле dwProductType будет указывать, является ли система серверной или клиентской версией.

При этом GetVersionEx вызывает RtlGetNtProductType, который в регистре ecx возвращает 1 для клиента и 3 для сервера.

Начнем с этого.

Я не пользовался многими отладчиками под Windows, поэтому выбрал единственный, который умею использовать в данном случае, WinDbg ( Прямая ссылка не последняя версия).

Для него есть замечательная команда, с помощью которой можно сделать автоматический брейкпойнт с заменой:

bp ntdll!RtlGetNtProductType "as /x ReturnValue rcx; gu; ed ReturnValue 1; g"

(т.е.

открываем наш Taskmgr.exe, выполняем команду, запускаем выполнение).

И.

идея сработала.

Все вкладки появились и были полностью работоспособны.

Те.

функционально все присутствует, но отключено только по политическим причинам (могли бы просто скрыть по умолчанию по тем же причинам).

Соответственно, нам нужно копать дальше в этом направлении.

Мы ставим точку останова на ntdll!RtlGetNtProductType и смотрим на стек вызовов, когда к нам обращается настоящий Taskmgr, а не на куски инициализации.

Это выглядит примерно так:

Странное поведение диспетчера задач в Windows Server 2012

Идем по трассировке стека, ставим точку останова на TaskMgr (или доходим до нее вручную) и видим следующий код:

Странное поведение диспетчера задач в Windows Server 2012

Это проверка кода возврата, нам здесь делать нечего, пойдем чуть дальше:

Странное поведение диспетчера задач в Windows Server 2012

Вот он, сок! Регистры по 1 и 3 сравниваются и в зависимости от ситуации происходит переход в нужную ветку.

Устанавливаем al в 1 и наблюдаем, что всё работает успешно.

Половина пути пройдена.

Нам нужно на постоянной основе думать о решениях, как все это формализовать.

  1. Можно сделать скрипт для WInDbg, который все сделает сам.

    Неспортивно

  2. Исправьте память перед запуском TaskMgr. Пришлось отбросить этот вариант, потому что я не знаю, как это сделать, и разбираться в нем придется долго.

  3. Исправьте сам файл Taskmgr.exe. Самый простой вариант — нарушить целостность файла и система может периодически возвращать его к старой версии.

    Но я решил, что с этим можно жить и начал думать об этом варианте.

Итак, нам нужно заменить этот код. Способов замены много: сравнить al не с 1, а с 3, заменить jne на je, изменить адрес перехода.

В общем, я выбрал самый глупый метод, заменив jne на пару nops. Так что в результате будет бессмысленное сравнение, потом прыжок в нужное место.

Это делается просто.

Запоминаем необходимую последовательность байт: 8a84244a0100003с01, находим ее в любимом Hex-редакторе и меняем на нужную.

В данном случае 750с на 9090. Мы экономим и.



Странное поведение диспетчера задач в Windows Server 2012

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

Значит, ее надо убить.

Вариантов много, но мы в хабе, поэтому воспользуемся программой дизайн из хабраузера ДнВ .

Запускаем.

и ничего.

Те же проблемы с поврежденной подписью.

Откуда он это берет? Не буду утомлять вас рассказом о том, как я пытался в этом разобраться, сам подписывал файл, готов был от всего этого отказаться, но получилось.



Странное поведение диспетчера задач в Windows Server 2012

(это скриншот из программы Стад_PE ).

Вы видели шутку от Microsoft? Целостность файла проверяется флагом в сам файл.

Не могу понять тайный смысл этого, разве что защита от тупых вирусов.

Не понимаю как я дошёл до этого флага, но в общем убираем его, сохраняем и.

все работает! После этого заменяем оригинальный (не забывая дать себе права на это действие), и пользуемся расширенным Диспетчером задач.

Ну и бонусом пишем статью для Хабра :) Надеюсь, она была вам интересна.

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

ОБНОВЛЕНИЕ 08.10.2018 Пользователь ЭйДжейлекс обновлено диспетчер задач Теги: #windows server 2012 #exe #Индуистский код #microsoft #Ненормальное программирование #Ассемблер

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.