Да, вы можете легко использовать декомпилятор для извлечения таких констант, особенно строк (поскольку они требуют большего объема памяти). Это даже будет работать в двоичных файлах машинного кода и даже проще для VM-языков, таких как Java и C#.
Если вам нужно хранить что-то секретное, вам нужно будет пройти долгий путь. Просто шифрование строки, например, добавило бы уровень безопасности, но для тех, кто знает, что она делает, это не будет большим барьером. Например, сканирование файла для мест с необычной энтропией, скорее всего, откроет ключ, который использовался для шифрования. Существуют даже системы, которые кодируют секреты, изменяя используемые низкоуровневые команды в двоичном формате. Эти инструменты заменяют некоторые комбинации команд другими эквивалентными командами. Но даже тысячи систем не слишком сложно обойти, так как необычная комбинация команд покажет использование таких инструментов.
И даже если вам удастся защитить строку с помощью какого-то шифрования в вашем двоичном формате, в какой-то момент вам понадобится расшифрованная версия для вашего исполнения. Создание дампа памяти в момент времени, когда используется строка, также будет содержать копию секретного значения. Это особенно проблематично в Java, поскольку вы не можете освободить фрагмент памяти, а строка является неизменной (это означает, что «изменение» строки приведет к созданию нового фрагмента памяти).
Как вы видите, проблема далека от тривиальной. И, конечно, нет способа дать вам 100% -ную безопасность (подумайте обо всех взломанных играх и т. Д.).
Что-то, что можно реализовать безопасным способом, это использовать Public-key cryptography. В этом случае вам нужно будет скрывать секретный ключ. Это может быть возможно, если вы можете, например, отправить вещи на свой сервер, чтобы зашифровать их, или у вас есть оборудование, которое предоставляет Trusted Platform Module. Но это может быть нецелесообразно для вашего дела.
Да; это, безусловно, возможно. Какой язык? – SLaks
Существует стандартная программа 'strings', которая будет печатать распечатанные данные из объектных файлов - ее можно использовать для поиска строк в исполняемых файлах и чрезвычайно полезны. Возможно, вам понадобится использовать опцию '-a', чтобы получить максимальную выгоду. –