Зашифровать пароль в исходном коде C - PullRequest
4 голосов
/ 28 марта 2012

Есть ли способ сохранить статический пароль способом, который действительно трудно найти в скомпилированном приложении?

Мне нужны два разных приложения. Одним из них является облегченный FTP-клиент для Windows, который подключается только к одному жестко запрограммированному серверу. Другая - игра Objective C, которая позволяет пользователям создавать пакеты уровней и использовать пароли для их сохранения. Они могут быть воспроизведены без пароля, но не открываются в редакторе уровней. Я шифрую пароли с помощью AES, но мне нужно как-то сохранить пароль для расшифровки.

Единственная идея, которую я нашел до сих пор, - сохранить пароль не как одну строку, а как несколько строк. Это может очень хорошо работать для игры, потому что я могу просто соединить строки, которые уже есть. Или я мог бы сохранить его как длинную строку и использовать секретный алгоритм для извлечения пароля из этой строки - хотя возникает вопрос: могут ли приложения C на Windows или приложения Какао на OS X просто декомпилироваться, чтобы найти этот алгоритм?

Есть ли более безопасные способы сделать это?

Ответы [ 3 ]

2 голосов
/ 28 марта 2012

можно ли приложения C на Windows или приложения Cocoa на OS X просто декомпилировать, чтобы найти этот алгоритм?

Да, все, что создано человеком, может быть сломано другим человеком. Никогда не использует обратимые алгоритмы для хранения чувствительных данных - они будут подвергаться обратному проектированию . Как пишет sidran32, вы можете хранить хеши, но это не поможет вам с клиентом

2 голосов
/ 29 марта 2012

Зачем проходить через боль декомпиляции - простой

$strings <binary>

сделает это :) Хранение ваших паролей в коде никогда не сработает: вы можете разделить их, закодировать их, зашифровать их любымкак вам нравится - будет момент, когда вам нужно будет собрать детали, чтобы проверить их.И именно в этот момент злоумышленник может подключиться, вероятно, с помощью отладчика.Я дал ответ на аналогичный вопрос с более подробной информацией.

Единственный действительно безопасный способ - хранить пароли как внеполосную информацию, вне вашего кода (или двоичного файла дляэто важно).Такие типы DRM, которые вы имеете в виду, никогда не работают в течение более длительного периода времени, как доказывают миллионы взломанных Microsoft или других продуктов.

0 голосов
/ 28 марта 2012

Строковые литералы обычно сохраняются и хранятся где-то в двоичном файле даже в скомпилированном исходном коде C.

То, что вы могли бы сделать, - это метод, аналогичный тому, как (правильно реализованные) веб-приложения проверяют информацию для входа в систему, где эта информация хранится в базе данных. Просто сохраните пароль в хешированном виде. Часто метод заключается в использовании соли MD5 + (, вот описание и пример PHP-кода ). Что вы можете сделать, это вместо передачи или хранения открытого текста пароля, просто хэшируйте ввод пользователя и проверяйте хеш против сохраненного значения хеша. Соответствующие хэши соответствуют соответствующим паролям.

EDIT

Это не поможет в случае с FTP-сервером, поскольку вы не можете изменить его исходный код ...

...