2

Добрый день.

Возможно ли хранение и изменение данных в .exe файле? Думал про ресурсы, но они ReadOnly. Может быть кто-то знает еще варианты?

Собственно задача поместить счетчик\переменную и т.д. в exe файл, т.е. чтобы после перезапуска счетчик не обнулялся.

10
  • к вашим услугам файлы appConfig/webConfig/etc
    – DreamChild
    19 авг 2014 в 15:59
  • Именно в .exe, appConfig под пользователем (а именно от пользователя он не ReadOnly) хранится где-то в пользовательских папках.
    – Alexis
    19 авг 2014 в 16:01
  • ничего не понял. что значит "под пользователем"? о каких еще пользовательских папках идет речь?
    – DreamChild
    19 авг 2014 в 16:03
  • 1
    Разумеется, не одно и то же. Settings - это лишь удобная обертка над одной специальной секцией appConfig. Впрочем, в данном случае это лишь вопрос терминологии. Сложно дать конкретный рецепт, не зная, что именно вы задумали. Возможно ли это? Подозреваю, что адекватными средствами этого не сделать. Если боитесь открытости (кстати тут тоже вопрос - а кому и зачем может понадобиться менять appConfig?) то можно писать данные в базу, либо в некий специальный файл (имхо извращение), либо вообще писать их в тот же конфиг в зашифрованном виде (извращение еще большее)
    – DreamChild
    19 авг 2014 в 16:31
  • 1
    @z668, в последнее время это нормально.
    – AseN
    19 авг 2014 в 17:36

1 ответ 1

5
  1. Правильное, рекомендованное Microsoft место для сохранения данных между запусками программы — Settings. Заметьте, что вам нужны именно user settings, а не application settings.
  2. Вы не можете хранить данные внутри .exe. т. к. .exe будет скорее всего находиться в недоступном для записи каталоге. (Представьте себе, что было бы, если бы любой вирус мог модифицировать любой исполняемый файл!). Даже если каталог будет доступен для записи, система не даст вам модифицировать файл, принадлежащий запущенному процессу.
  3. Если вам нужно скрыть данные от пользователя-неспециалиста, поверьте, никто не будет заглядывать в %APPDATA%. Можете, конечно, для самоуспокоения как-нибудь зашифровать данные перед записью. В любом случае, специалист легко дизассемблирует ваш код, восстановит логику и сможет сам прочитать/модифицировать значение, так что от специалиста вы всё равно не спрячетесь.
5
  • 1) Согласен. 2) Благодарю за информацию, теперь понятно, что это невозможно стандартными методами. 3) Поспорил бы. Сборка накрыта новым реактором с полной защитой (т.е. даже переделана в нативную). Так что посмотрим))) de4dot под новый реактор еще не обновляли.
    – Alexis
    19 авг 2014 в 18:01
  • @z668: Ну, если уверены, тогда просто зашифровывайте при записи. Но вам ещё надо защититься от копирования старой версии того же файла поверх новой. Какие именно файлы вы модифицируете, пользователь легко выяснит через (например) ProcMon, так что в принципе всё равно, куда класть данные.
    – VladD
    19 авг 2014 в 18:08
  • @VladD, я еще до написания об этом подумал. Защита ставилась собственно от рефлектора и школоло, опытные реверсеры вскроют все (Windows 8 то вскрыли, хотя там защита вообще через сервер активации). По поводу подмены файла на старый, благодарю, но вот как правильно организовать - даже не представляю. Сравнивать дату последней записи в файл - это легко обходится. Есть идеи?
    – Alexis
    19 авг 2014 в 18:12
  • 1
    @z668: Ну, например, можно модифицировать ещё какой-нибудь файл и сравнивать дату последней модификации (имеют право отличаться, но не слишком). Это конечно отнюдь не панацая. Можно в другом файле хранить ещё какую-то доп. информацию и проверять её на консистентность. Лучше всего было бы конечно использовать сервер активации, тогда количество запусков можно хранить на нём и не париться. (Но это, понятно, не всегда возможно.)
    – VladD
    19 авг 2014 в 18:20
  • 1
    Благодарю. Курс действий понятен. Прога будет под Администратором запускаться, так что в принципе без разницы куда писать файл.
    – Alexis
    19 авг 2014 в 18:26

Ваш ответ

By clicking “Отправить ответ”, you agree to our terms of service and acknowledge you have read our privacy policy.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками или задайте свой вопрос.