Я работаю над игрой, и одно из требований, предъявляемых лицензионным соглашением к звуковым ресурсам, которые я использую, заключается в том, чтобы они распространялись таким образом, чтобы сделать их недоступными для конечного пользователя. Итак, я думаю об объединении их в простой файл, зашифровывая их или что-то подобное. Проблема в том, что используемая мной звуковая библиотека (Hekkus Sound System) принимает только путь к файлу ‘char *’ и выполняет внутреннее чтение файла. Поэтому, если я буду продолжать использовать его, мне придется переопределить функции файла c stdio, чтобы обрабатывать шифрование или все, что я решу сделать. Это кажется выполнимым, но меня это беспокоит. Просматривая в Интернете, я вижу людей, сталкивающихся со странными неприятными проблемами, делающими это на платформах, которые меня интересуют (Win32, Android и iOS).
Есть ли кроссплатформенная библиотека, которая позаботится об этом? Есть ли лучший подход, который вы бы порекомендовали?
У вас есть возможность использовать именованный канал вместо обычного файла? Если это так, вы можете представить канал в звуковую библиотеку как файл для чтения, и вы можете расшифровать свои данные и записать их в канал, без проблем. (Увидеть Руководство Биджа для объяснения именованных каналов.)
Переопределение stdio таким образом, что библиотека, которую вы не знаете, как она работает, работает точно так, как разработчик не имеет в виду, не выглядит для меня правильным подходом, поскольку это не очень просто. Реализация ramdrive требует столько усилий, что я рекомендую поискать другую аудио-библиотеку.
Звуковая система Hekkus Я обнаружил, что он был собран одним человеком и последний раз обновлялся в 2012 году. Я бы не стал полагаться на библиотеку, в которой работал только один человек, не делясь источниками.
Мой совет, потратьте свое время на поиск подходящей звуковой библиотеки вместо того, чтобы искать подозрительную работу вокруг этого.
Одна из возможностей заключается в использовании зашифрованная петлевая файловая система (Google для дополнительных ресурсов).
Это работает так, что вы помещаете свои активы в зашифрованную файловую систему, которая фактически находится в простом файле. Эта файловая система где-то монтируется как устройство обратной петли. Пароль необходимо указывать во время подключения / подключения. После монтирования все файлы доступны как обычные файлы для вашего программного обеспечения. Но в остальном файлы зашифрованы и недоступны.
Это зависит от компилятора и не гарантируется, но многие позволяют вам встраивать файлы / ресурсы непосредственно в исполняемый файл и читать их в коде, как будто с диска. Вы могли бы встроить свои звуковые файлы таким образом. Однако это значительно увеличит размер вашего exe.
Еще один UNIX-ориентированный подход:
Переменная окружения LD_PRELOAD может использоваться для переопределения любая общая библиотека, с которой связан исполняемый файл. Все символы, экспортируемые библиотекой, упомянутой в LD_PRELOAD, разрешаются в эту библиотеку, включая вызовы функций libc, таких как open
, read
, а также close
, Используя libdl, библиотека обёрток также может обращаться к исходной реализации.
Итак, все, что вам нужно сделать, это запустить процесс, использующий звуковую систему Hekkus, в среде, в которой LD_PRELOAD настроен надлежащим образом, и вы можете делать все, что угодно, с файлом, который он читает.
Однако обратите внимание, что абсолютно невозможно сохранить данные недоступными для пользователя: сам факт того, что он должен их слышать, означает, что у него должен быть доступ. Даже если бы все программное обеспечение в цепочке использовало шифрование, а ваш пользователь не желал взламывать аппаратное обеспечение, было бы точно не трудно соединить выходной аудиоразъем с входным аудиоразъемом, не так ли? И вы не можете запретить пользователю использовать наушники, не так ли? И, конечно же, ядро может видеть весь аудио вывод в незашифрованном виде и может отправить копию куда-то еще …
Решением вашей проблемы будет виртуальный диск.
http://en.wikipedia.org/wiki/RAM_drive
Использование части памяти в оперативной памяти, как если бы это был диск.
Для этого тоже есть программное обеспечение. Кэширование баз данных в оперативной памяти становится популярным.
И он предотвращает нахождение файла на диске, что делает его легкодоступным для пользователя.