Защита файлов содержимого
Я хочу простой уровень защиты моих файлов контента (ресурсов) в моем приложении. Например, у меня есть различные звуковые и графические файлы, используемые в моем приложении. Я думаю, я могу обернуть их в архив SFX (возможно, упакованный с WinRAR), а затем в моем приложении запустить SFX exe с некоторыми параметрами, например, -silent. Но, возможно, это не лучший способ сделать это, поэтому, если вы можете дать мне несколько советов, это было бы здорово.
PS Я знаю, это не звучит недостижимо (как, например, есть), но это необходимо по ряду причин.
PS Я мог бы использовать некоторую справку для метода, чтобы скрыть файлы после полного извлечения SFX (или другого пакета).
Спасибо.
2 ответа
Не используйте архив SFX.
Ну, многое зависит от того, как вы используете свои ресурсы. Если у вас много библиотечного кода, для которого требуются имена файлов, то эти файлы необходимо некоторое время сохранять на жестком диске. Если вы можете, вы хотите выяснить, могут ли ваши звуковые и мультимедийные библиотеки передаваться по указателю, - тогда вы сами загружаете файлы, дешифруете их и передаете указатели на расшифрованные буферы в API медиа.
Что касается фактического шифрования. Либо используйте формат файла архива, что-то вроде zlib. Это дает вам возможность хранить все ваши файлы данных в одном зашифрованном архиве и расширять их в памяти.
Или сверните свое собственное шифрование файла. Преимущество XOR-шифрования в домашних условиях заключается в том, что оно очень быстрое.
Почти все шифрование файлов сводится к:
- Начните с "ключа". Короткая строка.
- Используйте ключ для инициализации генератора случайных чисел.
- XOR байты из rng с данными, которые должны быть зашифрованы для его шифрования.
- Позже для расшифровки данных:
- начать с того же ключа, инициализировать Rng
- Который будет генерировать тот же поток байтов,
- XOR их с зашифрованными данными, чтобы расшифровать его.
Проблема (очевидно) в том, что ключ должен существовать в клиенте, чтобы любой решительный хакер мог его получить. Таким образом, здесь нет никакого смысла быть слишком модным здесь. Просто сгенерируйте 256 байтов "случайных" данных и используйте их для шифрования и дешифрования ваших файлов при загрузке их в память или для записи во временную папку.
Если вам нужно записать файлы ttemp, вы можете использовать FILE_FLAG_DELETE_ON_CLOSE, чтобы заставить временную папку безопасно себя очистить, не оставляя незашифрованных ресурсов на диске.
Заархивируйте ваши файлы ресурсов и затем XOR каждого 32-битного блока архивного файла с ключом, который вы выбираете. Во время выполнения XOR каждый входящий 32-битный блок с ключом снова перед передачей его в zip-библиотеку для декомпрессии в памяти.
Очень легкое запутывание, но оно должно помешать кому-либо просто открыть zip-файл.