Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.06.2012, 09:09   #1
Air
Участник клуба
 
Аватар для Air
 
Регистрация: 30.04.2007
Сообщений: 1,307
По умолчанию D7, Win7: Чтение реестра без прав админа.

Доброго времени суток.
В программе использую процедуру идентификации, что бы в случае кражи программы не каждый мог её запустить, а именно декодировать текст.

Для этого я читаю данные из:
HKEY_LOCAL_MACHINE\HARDWARE\DESCRIP TION\System\CentralProcessor\0
Не только от туда, но...

Проблема в том, что на ХР всё было гуд, а Win7 не даёт доступ на чтение этих ключей. До тех пор, пока не запустишь прогу от имени админа.
Программа является текстовым редактором и запускать всегда с подтверждением текстовики не гуд.
___

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

Как это реализовать?
Ну не запускать же через runas.

P.S. Хочу подчеркнуть, что мне нужно только чтение, а не запись.
Всё гениальное - просто!
Air вне форума Ответить с цитированием
Старый 26.06.2012, 09:39   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

в порядке предложения.
а может быть, стоит пересмотреть ваш подход к защите?
ну, при установке своего супер-пупер редактора читайте из нужной ветки (при установке программы всё равно нужны права админа), результат кодируйте/шифруйте и сохраняйте в более "спокойное" место (например, в Application Data / HKCU и т.п.)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 26.06.2012, 09:56   #3
Air
Участник клуба
 
Аватар для Air
 
Регистрация: 30.04.2007
Сообщений: 1,307
По умолчанию

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

Защита не супер-пупер) даже мне, чтобы активировать программу, приходится прогонять её через отладчик, что бы узнать
какой она там ключ сгенерировала :D За 3 года уже шестой ключ 0_0 Хотя всё что я менял это ОС и драйвера)

Мне интересна сама технология получения прав админа без перегрузки приложения.
P.S. если скажем при первом запуске скопировать данные из HKLM в HKCU то обмануть защиту будет куда проще...
ну как бы смысл теряется, сделать reg файл и прога будет везде и всегда работать.

В старой (прежней) технологии эти данные считывались при каждом запуске, кодировались и сравнивались в ключом в ветке программы с настройками.

У этой задачи 2 решения:
1. полный пересмотр параметров идентификации (что довольно долго)
2. своевременный запрос админ-доступа к реестру. (на момент дешифровки текста)
Всё гениальное - просто!
Air вне форума Ответить с цитированием
Старый 26.06.2012, 10:43   #4
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

Цитата:
Win7 не даёт доступ на чтение этих ключей
даёт, если вежливо попросить )

Код:
program
  readReg;

{$APPTYPE CONSOLE}

uses
  Windows;

var
  res: integer;
  key: hKey;
  buf: array[byte] of char;
  sz: DWORD;
begin
  res := RegOpenKeyEx(HKEY_LOCAL_MACHINE, 'HARDWARE\DESCRIPTION\System\CentralProcessor\0\', 0, KEY_QUERY_VALUE, key);
  if (ERROR_SUCCESS = res) then begin
    //
    sz := sizeof(buf);
    res := RegQueryValueEx(key, 'Identifier', nil, nil, @buf, @sz);
    if (ERROR_SUCCESS = res) then
      writeln('Value: ', buf)
    else
      writeln('Could not read the key, error=', res);
    //
    RegCloseKey(key);
  end
  else
    writeln('Could not open the key, error=', res);
  //
  readln;
end.
Изображения
Тип файла: jpg readReg.jpg (21.7 Кб, 182 просмотров)
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 26.06.2012, 10:53   #5
Air
Участник клуба
 
Аватар для Air
 
Регистрация: 30.04.2007
Сообщений: 1,307
По умолчанию

veniside
Интересный подход)
Благодарю.
Всё гениальное - просто!
Air вне форума Ответить с цитированием
Старый 26.06.2012, 10:58   #6
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

просто класс TRegistry из дельфи по-умолчанию пытается открыть ключ со всеми правами
нужно использовать OpenKeyReadOnly() или назначать свойство Access перед открытием ключа:

Код:
program
  readReg;

{$APPTYPE CONSOLE}

uses
  Windows, Registry;

var
  reg: TRegistry;
begin
  reg := TRegistry.Create();
  reg.RootKey := HKEY_LOCAL_MACHINE;
  //
  // 0) does not work even for Admin without elevation
  reg.OpenKey('HARDWARE\DESCRIPTION\System\CentralProcessor\0\', false);
  writeln('0.Value: ', reg.ReadString('Identifier'));
  reg.CloseKey();
  //
  // 1) should work for everyone
  reg.OpenKeyReadOnly('HARDWARE\DESCRIPTION\System\CentralProcessor\0\');
  writeln('1.Value: ', reg.ReadString('Identifier'));
  reg.CloseKey();
  //
  // 2) should work for everyone
  reg.Access := KEY_QUERY_VALUE;
  reg.OpenKey('HARDWARE\DESCRIPTION\System\CentralProcessor\0\', false);
  writeln('2.Value: ', reg.ReadString('Identifier'));
  //
  reg.Free();
  //
  readln;
end.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."

Последний раз редактировалось veniside; 26.06.2012 в 11:05.
veniside вне форума Ответить с цитированием
Старый 26.06.2012, 11:07   #7
Air
Участник клуба
 
Аватар для Air
 
Регистрация: 30.04.2007
Сообщений: 1,307
По умолчанию

Хм.
Видимо значение false в операторе OpenKey() лишь не создаёт ключ в случае его отсутствия. Мда, ХР была попроще)
Всё гениальное - просто!
Air вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не изменяется параметр реестра win7 Unconnected Visual C++ 2 24.11.2011 19:54
сброс прав Админа kasya Свободное общение 1 19.01.2011 17:32
Чтение данных из реестра TranzitZP Microsoft Office Access 2 30.12.2010 23:01
Запись в реестр без прав администратора =LeonZone= Win Api 12 07.03.2010 19:06
Установка Delphi без прав администратора. Вадим Буренков Свободное общение 5 05.03.2010 13:56