2015-01-30 3 views
0

Я хочу создать простое консольное приложение, которое будет выполнять некоторые полезные функции, которые я регулярно использую для своей школы (, чтобы проверить, является ли число простым, писать коэффициенты числа, решать квадратичное уравнение и т. Д.).Как изменить константу пользователя?

Но, как я делал это, я решил добавить некоторые подробности о приложении, чтобы сделать пользовательский интерфейс симпатичнее: написать имя приложения, версия ...

я пришел к мысли о том, чтобы иметь admin, который я могу ввести, а затем я могу изменить эти дополнительные данные или изменить пароль.

Но если у меня есть пароль, который я хранить как константные переменной или регулярную переменную const string password = "blablabla;" каждый раз, когда я запустить приложение будет иметь один и тот же пароль "blablabla" так есть способ, чтобы как-то изменить пароль и другие дополнительные данные поэтому программа сохраняет новые значения постоянно?

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

Я также думал, что программа может открыть исходный код, а затем изменить эти инициализированные значения, но тогда мне нужно скомпилировать этот файл, и я тоже этого не хочу.

Я просто хочу, чтобы приложение .exe запускалось и может постоянно изменять эту информацию с помощью пароля администратора.

Кто-нибудь теперь, если это можно сделать и как?

Я пишу это приложение на C++.

Спасибо заранее

+1

Если вы используете C++, то почему это помечено C? – Biffen

+1

В зависимости от того, какую ОС вы используете, вероятно, подходят API, которые вы можете использовать для хранения предпочтений, паролей и т. Д. Пожалуйста, добавьте тег для вашей целевой ОС. –

+0

@ Biffen Я думал, что это можно решить и в C тоже. –

ответ

1

есть способ, чтобы как-то изменить пароль и другие дополнительные данные, таким образом, программа сохраняет новые значения постоянно?

Теоретически, вы можете изменить константы в сегменте данных исполняемого файла. Как это сделать, зависит от исполняемого формата. Но я бы подумал, что это обходное решение, и было бы сложно предотвратить изменение пользователем исполняемого файла без пароля. То, что вы действительно хотите, это переменные. И у вас есть хорошая идея, как инициализировать переменные:

Я думал, чтобы сохранить все эти дополнительные данные в некотором файле

Хорошая идея. Простое решение, возможно подходящее для области вашего приложения.

если файл изменен, тогда данные будут, и я не хочу этого. Я хочу изменить данные только с помощью пароля администратора.

Затем как-то защитите файл. Вы могли бы, например, не давать никому права на запись в файл. Или, если вы параноик (это просто небольшое консольное приложение только для вас, верно?), Зашифруйте его ...

Я также думал, что могу зашифровать эту информацию, но все же можно легко изменить.

Это не будет легко без ключа. Конечно, они могут модифицировать криптотекст, приводя к мусорным данным, но если вас это беспокоит, осознайте, что если у них есть доступ на запись к вашим файлам, они могут просто удалить саму программу.

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

0

Вам нужно добавить ресурсы для Windows в приложение, а затем обновить их время выполнения.

https://msdn.microsoft.com/en-us/library/ms648004%28v=vs.85%29.aspx

+2

Nasty - нет гарантии, что ваше приложение будет доступно для записи, и попытка его изменения может привести к срабатыванию антивирусных проверок и т. Д. Также вы теряете все свои данные конфигурации всякий раз, когда вы установите новую версию своей программы. –

+0

@PaulR: Чтобы быть справедливым, хотя ... это работает без отдельного магазина (** если ** он работает), чего хочет OP. Я не уверен, почему программа, которая проверяет, является ли число первичным, требует пароль администратора, хотя ... – Damon

+0

@Damon: возможно, это нормально для одноразового взлома для личного использования, но это не очень хорошее решение в целом, и поскольку StackOverflow нацелен на то, чтобы быть полезным поисковым хранилищем вопросов и ответов хорошего качества для будущих посетителей (т. е. речь идет не только о решении непосредственной проблемы OP). Я думаю, что это делает этот ответ равным -1. –

Смежные вопросы