Загрузка данных
1.3. Инструментарий для создания и перепаковки (Repackaging)
Для сборки пакетов MSI стороннего ПО, не имеющего нативного инсталлятора такого формата, применяются два основных подхода:
1. Декларативное описание (Инструментарий WiX Toolset): Свободный набор инструментов, позволяющий создавать пакеты из XML-описаний. Процесс компиляции схож с разработкой ПО: исходный код .wxs компилируется утилитой candle.exe в объектный файл .wixobj, а затем связывается линкером light.exe в готовый .msi.
2. Снапшотный метод (Перепаковка через снимок системы): Использование утилит типа Advanced Installer, Advanced Repackager или EMCO MSI Package Builder. Метод заключается в создании «снимка» (Snapshot) чистой операционной системы до запуска инсталлятора стороннего производителя (.exe) и второго снимка — после завершения установки. Утилита сравнивает два состояния файловой системы и реестра, вычленяет изменения и автоматически генерирует проект MSI.
1.4. Практический пример: Разработка проекта в WiX Toolset
Ниже представлен детальный исходный XML-код конфигурации проекта WiX для упаковки сторонней утилиты командной строки:
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Product Id="A1B2C3D4-E5F6-7A8B-9C0D-1E2F3A4B5C6D"
Name="ThirdParty Custom Utility"
Language="1049"
Version="2.4.1"
Manufacturer="External Vendor Corp."
UpgradeCode="0F1E2D3C-4B5A-6F7E-8D9C-0B1A2C3D4E5F">
<Package InstallerVersion="200"
Compressed="yes"
InstallScope="perMachine"
Description="Перепакованный пакет утилиты стороннего производителя"
Comments="Сборка выполнена в рамках учебной практики" />
<MajorUpgrade DowngradeErrorMessage="Более новая версия [ProductName] уже установлена в системе." />
<MediaTemplate EmbedCab="yes" />
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder">
<Directory Id="INSTALLFOLDER" Name="ThirdParty Utility">
<Directory Id="BINDIR" Name="bin" />
<Directory Id="DOCDIR" Name="docs" />
</Directory>
</Directory>
<Directory Id="ProgramMenuFolder">
<Directory Id="ApplicationProgramsFolder" Name="ThirdParty Utility"/>
</Directory>
</Directory>
<ComponentGroup Id="ProductComponents" Directory="BINDIR">
<Component Id="MainExecutableComponent" Guid="11223344-5566-7788-99AA-BBCCDDEEFF00">
<File Id="MainExe" Source="SourceFiles\utility.exe" KeyPath="yes" />
<File Id="ConfigJson" Source="SourceFiles\config.json" />
</Component>
<Component Id="HelperLibraryComponent" Guid="55667788-99AA-BBCC-DDEE-FF0011223344">
<File Id="CoreDll" Source="SourceFiles\core.dll" KeyPath="yes" />
</Component>
</ComponentGroup>
<ComponentGroup Id="DocumentationComponents" Directory="DOCDIR">
<Component Id="ReadmeComponent" Guid="99AABBCC-DDEE-FF00-1122-334455667788">
<File Id="ReadmeTxt" Source="SourceFiles\readme.txt" KeyPath="yes" />
</Component>
</ComponentGroup>
<DirectoryRef Id="ApplicationProgramsFolder">
<Component Id="ApplicationShortcut" Guid="AABBCCDD-EEFF-0011-2233-445566778899">
<Shortcut Id="ApplicationStartMenuShortcut"
Name="Run Custom Utility"
Description="Запуск сторонней утилиты"
Target="[BINDIR]utility.exe"
WorkingDirectory="BINDIR"/>
<RemoveFolder Id="CleanUpShortCut" On="uninstall"/>
<RegistryValue Root="HKLM"
Key="Software\ExternalVendor\CustomUtility"
Name="installed"
Type="integer"
Value="1"
KeyPath="yes"/>
</Component>
</DirectoryRef>
<Feature Id="ProductFeature" Title="Основная программа" Level="1">
<ComponentGroupRef Id="ProductComponents" />
<ComponentRef Id="ApplicationShortcut" />
</Feature>
<Feature Id="DocFeature" Title="Документация" Level="1">
<ComponentGroupRef Id="DocumentationComponents" />
</Feature>
</Product>
</Wix>
Процесс сборки данного пакета через командную строку:
1. candle.exe project.wxs -out project.wixobj — синтаксический анализ и генерация промежуточного объектного представления.
2. light.exe project.wixobj -out CustomUtility.msi — валидация таблиц баз данных, внедрение бинарных файлов внутрь CAB-архива инсталлятора, создание результирующего MSI-файла.
ГЛАВА 2. ОРГАНИЗАЦИЯ ЗАЩИТЫ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ КОМПЬЮТЕРНЫХ СИСТЕМ
2.1. Классификация угроз безопасности ПО
Защита программного обеспечения на уровне компьютерных систем охватывает защиту программного кода от анализа и реверс-инжиниринга, защиту исполняемой среды от внедрения вредоносного кода, а также управление правами доступа пользователей к программным компонентам.
Угрозы классифицируются по трем направлениям:
1. Нарушение конфиденциальности данных и алгоритмов: Несанкционированный доступ к коммерческой тайне внутри исполняемых модулей (обратная разработка, декомпиляция).
2. Нарушение целостности: Модификация исполняемого кода приложения (патчинг, внедрение инъекций, вредоносных закладок).
3. Нарушение доступности: Использование уязвимостей переполнения буфера или утечек памяти для вызова отказа в обслуживании (DoS).
2.2. Программно-аппаратные методы защиты
Для противодействия угрозам реверс-инжиниринга (особенно актуального для управляемого кода, такого как .NET (C#) или Java, который компилируется в промежуточный байт-код) применяются следующие методы защиты программных продуктов:
Обфускация (Запутывание кода)
Процесс преобразования исходного или байт-кода в форму, сохраняющую функциональность, но крайне сложную для анализа человеком и декомпиляторами. Применяемые алгоритмы обфускации:
Переименование идентификаторов: Замена осмысленных имен классов, методов и переменных на бессмысленные последовательности (например, a, b, _1).
Запутывание потока управления (Control Flow Obfuscation): Разбиение линейных алгоритмов на сложные структуры ветвления, внедрение «мертвого» кода, ложных циклов и условных переходов, которые никогда не выполняются, но запутывают граф вызовов декомпилятора.
Шифрование строк: Скрытие строковых констант (ключей API, путей, сообщений об ошибках) в бинарном файле с помощью алгоритмов XOR, AES. Расшифровка происходит динамически в оперативной памяти непосредственно перед использованием строки.
Применение протекторов кода и упаковщиков
Специализированное ПО (VMProtect, Themida), которое компилирует критически важные участки кода в байт-код уникальной виртуальной машины, интерпретируемой встроенным в протектор движком во время выполнения. Это делает классическую декомпиляцию практически невозможной. Также протекторы внедряют:
Анти-отладку (Anti-Debugging): Проверка системных API на наличие подключенного отладчика (например, функции IsDebuggerPresent).
Анти-дамп (Anti-Dump): Защита от считывания образа программы из оперативной памяти.
2.3. Защита на уровне операционной системы и сетевого окружения
Защита функционирующего ПО внутри компьютерной системы требует правильной настройки системных политик безопасности.
Ограничение прав доступа и списки ACL
Разграничение прав пользователей в файловой системе NTFS осуществляется с помощью списков контроля доступа (ACL — Access Control List). Программные каталоги (C:\Program Files) конфигурируются таким образом, чтобы права на запись и модификацию исполняемых файлов имели только учетные записи с правами Администратор или TrustedInstaller. Обычным учетным записям пользователей делегируются права исключительно на «Чтение и выполнение». Это предотвращает подмену исполняемых файлов и библиотек вредоносными программами.
Использование групповых политик (AppLocker / SRP)
Для предотвращения запуска несанкционированного или потенциально опасного ПО в операционной системе настраивается подсистема AppLocker. Формируются жесткие правила выполнения программ, базирующиеся на:
Цифровых подписях издателей (Publisher): Разрешается запуск ПО, подписанного доверенными сертификатами (например, Microsoft, Oracle).
Хэш-суммах файлов (Hash): Блокируется запуск любых модифицированных исполняемых файлов, чья контрольная сумма (SHA-256) не совпадает с эталонной.
Путях файловой системы (Path): Запрет выполнения исполняемых файлов из пользовательских каталогов с правами на запись, таких как C:\Users\...\AppData\Local\Temp.