Загрузка данных


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⁠.