Защита файлов содержимого

Мне нужен простой уровень защиты файлов контента (ресурсов) в моем приложении. Например, в моем приложении используются различные звуковые файлы и файлы изображений. Думаю, можно завернуть их в SFX-архив (Возможно, упакованный WinRAR), потом в моем приложении запустить SFX-exe с какими-то параметрами, типа -silent. Но это может быть не лучший способ сделать это, поэтому, если вы можете дать мне несколько предложений, это было бы здорово.

P.S. Я знаю, что это не звучит неуязвимо (во всяком случае, он есть), но это необходимо по некоторым причинам.

P.S. Я мог бы использовать некоторую помощь для метода, чтобы скрыть файлы после завершения извлечения SFX (или какого-либо другого пакета).

Спасибо.


person frbry    schedule 17.05.2010    source источник


Ответы (2)


Не используйте архив SFX.

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

Что касается фактического шифрования. Либо используйте формат файла архива, что-то вроде zlib. Это дает вам возможность хранить все ваши файлы данных в одном зашифрованном архиве и расширять их в памяти.

Или разверните собственное шифрование для каждого файла. Свернутое домашнее шифрование XOR имеет то преимущество, что оно очень быстрое.

Почти все шифрование файлов сводится к:

  • Начните с «ключа». Короткая строка.
  • Используйте ключ для инициализации генератора случайных чисел.
  • XOR байтов из rng с данными, которые нужно зашифровать, чтобы зашифровать их.
  • Позже, чтобы расшифровать данные:
  • начните с того же ключа, инициализируйте rng
  • Который будет генерировать тот же поток байтов,
  • XOR их с зашифрованными данными, чтобы расшифровать их.

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

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

person Chris Becke    schedule 18.05.2010
comment
Проблема в том, что я не могу изменить приложение, которое будет использовать извлеченный контент. Таким образом, это должно быть простое решение, такое как извлечение файлов в необычную папку (по крайней мере, для пользователя базового уровня), например C:\Windows\System32. Может быть, я могу поставить n байтов перед исполняемым файлом SFX. Тогда мое приложение-загрузчик могло бы удалить байты, а затем выполнить его? - person frbry; 18.05.2010

Заархивируйте файлы ресурсов, а затем XOR каждого 32-битного блока архивного файла с выбранным ключом. Во время выполнения XOR каждый входящий 32-битный блок снова с ключом, прежде чем передать его в вашу zip-библиотеку для распаковки в памяти.

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

person genpfault    schedule 17.05.2010