Как я винду по-реверсерски чинил

1ed49807040ca5e6b96c85d3caa9d62f.png

Ваша винда не работает как хотелось бы? Все советы из поисковика перепробовали установили Linux, а оно всё равно не работает? Вы реверс-инженер или кто вообще, ну в самом деле?! Применим свои навыки владения отладчиком, поможем Шиндовс нормально (по мере её сил) работать!

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

Суть проблемы

«Some settings are managed by your system administrator». Но я и есть администратор!

Как видно на картинке моя собственная система решила ограничить меня в возможностях конфигурирования параметров дисплея. Если вы попробуете загуглить данную строчку, вам выдадут тонну вариантов, среди которых: включение полной телеметрии, переустановка драйверов видеокарты, установка их в режиме совместимости с Windows 8 (!!!), перезапуск службы Windows Update, прикладывание горчичников к системному блоку… Как, ну скажите, как это должно вообще помогать? Очевидно, что оно и не помогло.

Источник проблемы

Я, если честно, без понятия. Не так давно винда мне стала предлагать опциональное обновление для моей AMD Radeon видеокарты, после установки которого центр управления Radeon Software взял и перестал видеть графическое устройство. Переустановка драйверов, множество ребутов вроде бы помогли, но, если бы всё закончилось хорошо, статьи бы не было.

Решение проблемы

Имея за плечами, какой-никакой опыт реверс-инжиниринга, я подумал:, а почему не попробовать решить данную проблему иначе? Открыть отладчик, найти виновника, выяснить, что для него является триггером на выдачу сего сообщения, и изменить условие на противоположное (конечно, надежда на реестр).

В качестве отладчика я вооружился x64dbg. Процесс, который выводит окно настроек также быстро нашёлся:

17d6d88c3358d938ef536a83f1ec9280.png

Аттачусь к нему. Далее перехожу на вкладку Symbols, и загружаю pdb-файлы для процесса и всех загруженных в него DLL-ок. После этого присматриваюсь к их списку:

Выглядит как минимум интересно: Выглядит как минимум интересно: «settingshandlers_display.dll»

Обнаруживается эта интересная DLL, а заодно ещё и парочка других кандидатов на поиск в них причины моей проблемы:

8e6472e7411f4e8e9f84b1d5cc56a682.png

Я решил пройтись по экспортам этих трёх библиотек и поискать что-нибудь со словами enable/disable:

6cce45c7696da4a9756673470e1a8391.png

Лишь в одной DLL-ке settings_handlers_pcdisplay.dll находятся интересные на мой взгляд функции: IsDisabledByGroupPolicy, IsDisabledByPolicy. Ставлю на них бряки, и пробую отобразить меню с той надписью про администратора:

Вуху! Бряк сработал.Вуху! Бряк сработал.

Присмотревшись к имеющемуся коду, я вижу вызов одной странной функции:

8cafc724766e13ba1c5956b8fa926d83.png

Гугление данной функции приводит меня к данной странице, с которой есть ссылка на перечисление RESTRICTIONS, где, в свою очередь, находится значение 0x4000007B:

653025defe77ef98e3bb92772ef42707.png

Так, погодите-ка! Кажется, я уже видел очень похожую строку в реестре, в разделе Policies (там я ранее как раз искал какой-нибудь параметр, который и мог приводить к проблеме):

d982d8de609b755db8e74b59ad4c189e.png

Кто её туда записал я не знаю. Но, я уже догадывался, что удаление этого аргумента решит мою проблему:

Ура!Ура!

Так и есть, всё заработало (после перезапуска процесса systemsettings.exe).

Выводы

Пора уже решать проблемы своей операционной системы самостоятельно! Особенно, если отладчики для вас софт не чуждый.

Всем спасибо.

© Habrahabr.ru