Политически правильный ремонт возвращается.

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

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

По клику по изображению — крупный вариант.

Полы ребята, кстати, классно сделали. Сняли краску и покрыли в 3 слоя паркетным лаком, и светло, и текстура дерева видна. А то в ГОРФ, как и в совке — пол особо ничем не покрасить, во всех магазинах есть три цвета — темно-поносный, поносный и светло-поносный. Так что сошлись на паркетном лаке, ибо заказывать стойкую краску для пола из Голландии я не одобрил, 8 000 с доставкой.

Покупайте наших полов!

Шпионский ярлык, небольшая заметка с экспериментом.

Преамбула

Заметка началась с небольшой просьбы, найти сигнатуру ярлыка (shortcut) Windows, т.е. LNK-файла, а вылезло несколько интересных вещей, которые стоит оставить, как зарубку на память.

Сигнатура ярлыка (shortcut signature)

Отвечаю на поставленный вопрос. Любой файл LNK начинается с четырех байт (hex):

4C 00 00 00

Ярлык шпиона

Так вот, почему ярлык шпиона? Да потому что ярлык, кроме указания пути к файлу, на который он ссылается, рабочего каталога и типа окна открытого файла (программы) сохраняет странные и непонятно для чего нужные метаданные:

— исходный путь файла и его временные метки (полный путь, время доступа к целевому файлу (UTC), время создания целевого файла (UTC), время изменения целевого файла (UTC)).
— тип тома, с которого файл был открыт (съемный носитель, обычный том, виртуальный том)
— серийный номер тома (серийный номер привода)
— метка тома
— NetBIOS-имя устройства (сетевое имя компьютера)
— MAC-адрес устройства. Впрочем, MAC-адрес устанавливается по какому-то странному алгоритму, на машине с несколькими сетевыми картами оно получается несколько рандомно. Не совсем понял, как это устроено, кто знает — напишите в комментариях.
— размер целевого файла (байт) — размер файла, с которым ассоциирован ярлык

Зачем это делается, не совсем понятно.

Почитать подробнее можно по следующим ссылкам:
Токсичные ярлыки в Windows: старый артефакт, не забытый хакерами, но частично забытый криминалистами (копия в PDF)
Какую информацию можно получить из ярлыка? (копия в PDF)

Программа для просмотра метаданных ярлыка

В первой статье анализ проводился платными программами для расследования инцидентов кибербезопасности, но кое-что можно посмотреть и бесплатно, программой Windows File Analyzer, описана во второй статье, не буду повторяться, оставлю ссылки на скачивание:
С сайта разработчика
Копия на Mega.nz

Небольшой эксперимент, или старые имена файлов, сохраняющиеся в ярлыках

Известно, что Office и некоторые другие программы хранят ярлыки последних сохраненных документов в специальных каталогах для того, чтобы потом показывать пользователю список открытых документов. Так вот, решил провести эксперимент — создать файл с каким-нибудь красноречивым компрометирующим именем, а потом изменить свойства ярлыка и посмотреть, что получится.
Итак, создаем пустой файл с именем, например, PutinBombaVzryvChechency.doc и создаем ярлык. Смотрим содержимое ярлыка в шестнадцатеричном редакторе (красным выделил сигнатуру файла LNK):

Создаем файл kotik.doc и пытаемся поменять ярлык через «Свойства ярлыка», на несуществующий файл ссылку стандартным способом сделать нельзя, потому делаем на существующий файл:

Проверяем, открывая измененный ярлык в HEX-редакторе.

Пробуем изменить ярлык программно, с помощью класса vbAccelerator.Components.Shell, через WinAPI (копия заметки):

string lnkname = @"C:\Temp\PutinBombaVzryvChechency.doc - Ярлык.lnk";
ShellLink lnk = new ShellLink();

lnk.Open(lnkname);
lnk.Target = "X:\\NoFile.doc";
lnk.WorkingDirectory = "X:\\";
lnk.Save();

Проверяем в HEX-редакторе:

Все еще хуже.

Подробной гипотезы о том, почему оно так работает, у меня нет, но к определенным мыслям это приводит. Например, при удалении ярлыков последних документов их лучше всего удалять безопасным удалением (т.е. с полной перезаписью содержимого файла LNK). Конечно, можно разобраться в формате файла (тем более, он опубликован), но мало ли что MS добавит туда в будущем. А в целом, ситуация дискомфортная, даже если и ложечки найдутся, осадок останется, т.к. обычно мало кто обращает внимание на такую незначительную мелочь, как ярлык, а восстанавливаются (если они были удалены стандартным образом) они достаточно просто, сигнатурным поиском по диску.

Sony Vaio, поставить Windows 7 с ноля, проблемы с драйверами и видео (Intel HD Graphics 4000)

Преамбула

Заметка по мотивам онлайн-консультации и больше от склероза, так что скринов будет мало, а кое-где могу что-то забыть, если что — пишите в комментарии. Задача — вернуть на Sony Vaio (SVT1111Z9RS) Windows 7, которая там стояла изначально, вместо Windows 10, которую туда кто-то зачем-то запихал.

Что понадобится

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

— Дистрибутив Windows 7
— Driver Pack Solution (у товарища была полная оффлайн-версия), как минимум нужна Driver Pack Offline Network
Кумулятивное обновление Windows 7 от Simplix
NET Framework 4.0
Драйвера для видеокарты (Intel HD Graphics 4000)
Копия (драйвера Intel HD Graphics 4000 + .NET Framework 4)

Установка Windows

Поделить диск можно как угодно, сработают и Arconis и, например, System Rescue CD.
Но первый сюрприз поджидает уже тут, на машине USB 3.0, потому если устанавливать оригинальный дистрибутив с флешки, то установщик перестанет ее видеть. Потому нужно или искать дистрибутив Windows 7 с поддержкой USB 3.0, или если лень искать, то можно установить Windows 7 через установочное окружение Windows 8 (копия), товарищ сделал все еще проще, загрузился с System Rescue CD и скачал все перечисленное выше с сервера на заранее подготовленный раздел жесткого диска, и запустил установку Windows с жесткого диска из Windows PE на базе Windows 7, например, такой или такой. Естественно, на HDD копируем распакованный из ISO-образа дистрибутив, а не сам ISO.

Установка драйверов

Секунда ненависти и ворчания. Sony — откровенные гондоны, пидары и козлы. Теперь все фильмы, произведенные этими мудоебищами, буду смотреть исключительно ворованные, т.к. эти уроды убрали с официального сайта все драйвера для старых ноутбуков:

Обращаем ваше внимание, что с 1 января 2021 г. Sony больше не будет предоставлять драйверы и программное обеспечение для компьютеров Sony VAIO, поставлявшихся со следующими предустановленными операционными системами Microsoft Windows и перечислены все ОС, в т.ч. и Windows 7.

Но у нас есть Driver Pack Solution, так что:

1. Запускаем Driver Pack Solution, переключаемся в режим эксперта, убираем все, кроме драйверов для LAN и устанавливаем их.
2. Перезагружаем компьютер.
3. После перезагрузки опять запускаем Driver Pack Solution, опять переключаемся в режим эксперта и устанавливаем все остальные драйвера, кроме драйвера видеокарты. С ним лучше повременить, объясню ниже.
4. Перезагружаем компьютер.

Установка драйвера видеокарты Intel HD Graphics 4000 и проблема с цифровой подписью драйвера.

Если прямо сейчас попытаться установить драйвер видеоадаптера, то Windows начнет ругаться на отсутствие цифровой подписи, видеодрайвер не заработает, а в диспетчере устройств у видеодрайвера будет отображаться восклицательный знак, в свойствах указана ошибка 52 "Не удается проверить цифровую подпись драйверов".


Вот так, только с видеоадаптером

Не знаю, с чем точно это связано, но подозреваю с тем, что в чистой Windows 7 SP1 нет нужного нового сертификата Intel, а оригинальный драйвер с сайта Sony был или более старым, чем теперешний, или с драйвером поставлялось обновление сертификата (и ведь не проверишь, горите в аду пиздоглазые анальные проушины из Sony). Вот тут и пригодится кумулятивное обновление от Simplix.

Итак, решаем проблему:
1. Устанавливаем обновление от Simplix:
1.1 В каталоге со скачанным пакетом (на момент написания заметки, файл называется UpdatePack7R2-21.1.15.exe) создаем BAT-файл update.bat со следующим содержимым:

UpdatePack7R2-21.1.15.exe /IE11

1.2 Запускаем update.bat
1.3 Следуем инструкциям на экране, в процессе установщик предложит перезагрузиться, перезагружаемся, дожидаемся окончания установки.
2. Устанавливаем .NET Framework 4
3. Устанавливаем видеодрайвер (с сайта Intel)

Родная ОС возвращена.

ФАНФАРЫ!

C#. Удаление значений (values) из ключа Реестра

Преамбула

Задача довольно простая, имеется ключ в разделе Реестра Windows, необходимо удалить оттуда все значения (values).

Термины и определения

Реестр — иерархическая база данных, хранящая основные настройки системы и программ.
Корневой ключ (в некоторых источниках просто ключ или раздел Реестра), это один из основных ключей Реестра. Обычно присутствуют следующие:

HKEY_CLASSES_ROOT (HKCR) — Зарегистрированные типы файлов, объекты COM и ActiveX
HKEY_CURRENT_USER (HKCU) — Настройки текущего пользователя, в данный момент вошедшего в систему.
HKEY_LOCAL_MACHINE (HKLM) — Общие настройки для всех пользователей данного компьютера.
HKEY_USERS (HKU) — Профили всех пользователей данной машины.
HKEY_CURRENT_CONFIG (HKCC) — Профили оборудования, информация о драйверах.

Подключ/Subkey (иногда Ключ, если корневой раздел называется корневым разделом или корневым ключом) Реестра — путь в Реестре, аналогичный пути к каталогу (папке) файловой системы. Обычно каждый подключ хранит или настройки для конкретного случая. Например, настройки конкретной программы или профиль конфигурации оборудования. Выглядит примерно так: Software\TestKey (в полном виде, вместе с корневым ключом, например: HKEY_CURRENT_USER\Software\TestKey).

Подключ может содержать как и другие подключи, так и значения (values), представляющие собой поименованные переменные, содержащие значения конкретного параметра

Обзорная статья про Реестр Windows на Википедии

Тестовый ключ

Для тестирования создадим тестовый ключ, который не будет влиять на какие либо программы и компоненты ОС. Это можно сделать, как вручную, с помощью программы Regedit, так и в автоматическом режиме, с помощью reg-файла, например, такого:

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\TestKey]
"value0"="text0"
"value1"="text1"
"value2"="text2"
"value3"="text3"
"value4"="text4"
"value5"="text5"

Файл на GitHub

Можно создать и reg-файл для удаления тестового ключа из Реестра, если что-то пойдет не так:

Windows Registry Editor Version 5.00

[-HKEY_CURRENT_USER\Software\TestKey]

Файл на GitHub

Решение

1. Подключаем пространство имен Microsoft.Win32:

using Microsoft.Win32;

2. Создаем переменную с именем подключа Реестра и переменную типа RegistryKey. Этот объект и будет рулить нужной веткой Реестра:

string subkey = "Software\\TestKey";
RegistryKey key = null;

3. Любые операции с Реестром могут привести к ошибкам, потому их как и операции ввода-вывода желательно оборачивать в try..catch:

try
{
    //тут будет код.
}
catch (Exception ex)
{
    Console.WriteLine("ERROR: " + ex.Message);
}

4. Открываем (под)ключ Реестра:

key = Registry.CurrentUser.OpenSubKey(subkey, true);

Внимание! Если необходимо писать в ключ Реестра, обязательно устанавливаем второй параметр функции OpenSubKey в true, т.к. в противном случае, мы получим ошибку UnauthorizedAccessException: Не удалось выполнить запись в раздел реестра.

Обсуждение на Cyberforum

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

6. Получаем имена всех значений и в цикле удаляем их с помощью функции DeleteValue(имя_параметра);

foreach (string valname in key.GetValueNames())
{
    Console.WriteLine("Delete value: " + valname);
    key.DeleteValue(valname);
}

7. Закрываем (под)ключ Реестра.

key.Close();

Все получилось:

Код целиком

На PasteBin

Тестовый пример

Пример на GitHub