2012-07-03 3 views
3

Если мы хотим хранить важную информацию, такую ​​как пароли и адреса сервера, внутри исполняемого файла, сгенерированного компилятором Delphi, как мы можем это сделать, не зная окончательный размер исполняемого файла и двоичную структуру, например, в конце файла для пример?Как разместить информацию о конфигурации внутри исполняемого файла?

Примечание стороны:

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

Комментарий

Почему вниз проголосовали этот вопрос? Это достижимо! Не измеряет, если не интересен для большинства людей.

Я думаю об обновлении BIOS и других прошивок, таких как сателлитные телевизионные декодеры сигналов, которые обновляются сами. Как это возможно?

+0

Как простой INI FILE – PSyLoCKe

+0

Информация, которую вы хотите сохранить в ехе, должен быть изменен или только для чтения? – RRUZ

+0

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

ответ

3

Создать ресурс таблицы строк - это один из способов.

Создайте текстовый файл. скажем, secretstuff.rc (должен иметь расширение .rc) с чем-то вроде этого в нем.

STRINGTABLE 
{ 
    1,"This is my encrypted password in say Base64" 
} 

Скомпилируйте его в файл .res с помощью BRCC32.

Включите его в соответствующем коде с директивой компилятора

{$R secretstuff.res} 

После этого вы получаете доступ с TResourceStream.

Если вы хотите управлять им немного лучше, возможно, было бы разумно набивать их в dll вместо exe, тогда вы можете обновлять вещи, поставляя новую версию dll.

Там пример с его более подробно, с другой целью, но тот же принцип here

+3

Если вы добавите rc в dpr, вам не нужно его компилировать вручную. Используйте '{$ R 'secretstuff.res' '.. \ resources \ secretstuff.rc'}' или используйте среду IDE. Котировки используются в случае, если c/будет пробелами в путях. –

+2

Если OP использует старую версию Delphi, такую ​​как Delphi 2006, тогда совет Marjan не работает (пока) для них. (Похоже, что они используют старую версию delphi.) –

+0

@WarrenP, не правда. это работает, по крайней мере, с D5. – kobik

4

Вы можете использовать .rc-файл, чтобы поместить свои данные в пользовательский ресурс в конечном файле .exe. Затем вы можете получить доступ к этому ресурсу во время выполнения, например, с помощью TResourceStream, а также расшифровать и использовать его содержимое по мере необходимости. Однако вы не можете записывать новые данные в ресурс во время работы .exe, так как файл заблокирован ОС. Если вам нужно написать новые настройки и не иметь права на запись в реестр, вам придется использовать отдельный файл. У Windows есть специальные папки, в которых пользователи имеют доступ на запись в своих профилях пользователей.

+0

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

+0

Вы все равно будете использовать для этого специальный ресурс. Второе приложение может использовать функции Win32 API BeginUpdateResource() и 'UpdateResource()' для изменения данных ресурса. –

+3

@EASI - если вы обновите ресурс подписанного исполняемого файла, он больше не будет корректно подписан. И если ваш первый исполняемый файл находится в папке Program Files, ваш пользователь должен либо запустить оба приложения, либо выключить UAC (в Windows 6.x). – frogb