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

Такие дела.
Пока я тут отдыхаю, нежась в тепле, наш автор таки вышел с фонариком.
Ничего страшного пока не случилось, но глазки и нашивку на рабочей куртке парня мы таки закрыли.
Такие дела.
Заметка началась с небольшой просьбы, найти сигнатуру ярлыка (shortcut) Windows, т.е. LNK-файла, а вылезло несколько интересных вещей, которые стоит оставить, как зарубку на память.
Отвечаю на поставленный вопрос. Любой файл 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 (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)
Поделить диск можно как угодно, сработают и 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. Перезагружаем компьютер.
Если прямо сейчас попытаться установить драйвер видеоадаптера, то 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)
Родная ОС возвращена.
ФАНФАРЫ!
Задача довольно простая, имеется ключ в разделе Реестра 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"
Можно создать и reg-файл для удаления тестового ключа из Реестра, если что-то пойдет не так:
Windows Registry Editor Version 5.00
[-HKEY_CURRENT_USER\Software\TestKey]
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: Не удалось выполнить запись в раздел реестра.
5. Получить список значений в (под)ключе можно функцией GetValueNames()
, которая выдает строковый массив с именами значений Реестра.
6. Получаем имена всех значений и в цикле удаляем их с помощью функции DeleteValue(имя_параметра);
foreach (string valname in key.GetValueNames()) { Console.WriteLine("Delete value: " + valname); key.DeleteValue(valname); }
7. Закрываем (под)ключ Реестра.
key.Close();
Все получилось:
Итак, требуется написать программу, которая генерирует заданное количество файлов с определенным содержимым. Содержимое задается или в качестве байтового паттерна (т.е. если программе указать 0xFF
, то файл будет заполнен указанным количеством байт со значением 0xFF
) или случайных байт. Файлам также можно задать расширение, или сделать и имя файла случайным.
Выполнена в виде консольной программы, запускаемой со следующими параметрами:
Использование: filegen.exe <количество_файлов> <размер>[K|M|G] <расширение|/R> [байтовый_паттерн|/R]
<количество_файлов> - количество файлов
<размер> - размер:
по умолчанию - байты K - килобайты M - мегабайты G - гигабайты
<расширение> - расширение файла или /R - случайное имя файла
[байтовый_паттерн] - байтовый паттерн (HEX): от 0x00 до 0xFF, по умолчанию 0x00 или /R случайные байты
1. С#, Заполнение массива одним значением. (копия)
2. C#, заполнение массива случайными числами. (копия)
3. C#, Количество цифр (разрядов) числа. (копия)
4. C#. Перевод кило- мега- и гигабайтов в байты. (копия)