eXeLab
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 28 января!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Русский / Russian English / Английский

Сейчас на форуме: hlmadip (+3 невидимых)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS · SVN ·

 eXeL@B —› Программирование —› Чтение х64 ветки реестра из х86 процесса
Посл.ответ Сообщение

Ранг: 34.2 (посетитель)
Статус: Участник

Создано: 27 декабря 2018 05:46 · Поправил: BlackCode New!
Цитата · Личное сообщение · #1

Всем привет

Собственно основной вопрос, это как прочитать из ветки х64 разрядного реестра необходимое значение, из х86 процесса.
Перед тем как написать сюда, естественно перекопал гугл.
Четкого рабочего метода (кода) не нашел. Куча всяких "рекомендаций" без конкретики. Может правда не там искал.

В общем задача состоит в том, чтобы прочитать из ветки деинсталлятора значение "InstallLocation", т.е. путь куда установлена программа.
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Proc_is1]
"InstallLocation"="C:\Program Files\Proc\SuperProc"

К сожалению целевая программа больше не создает никаких ключей в реестре,
из которых можно было бы получить путь ее установки на жестком диске.
Такой код естественно не работает, ключ-то открывает, но RegQueryValueEx выдает в eax == 2, типа не находит значение.
Code:
  1. invoke RegCreateKeyEx,HKEY_LOCAL_MACHINE,chr$("SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Proc_is1"),0,NULL,REG_OPTION_NON_VOLATILE,KEY_READ,NULL,addr hKey,NULL
  2. .if eax
  3. return FALSE
  4. .endif
  5. mov pType,REG_SZ
  6. mov cbData,MAX_PATH
  7. invoke RegQueryValueEx,hKey,chr$("InstallLocation"),NULL,addr pType,lpPath,addr cbData
  8. .if eax != ERROR_SUCCESS
  9. invoke RegCloseKey,hKey
  10. return FALSE
  11. .endif
  12. invoke RegCloseKey,hKey

С флагами, типа KEY_WOW64_32KEY и KEY_WOW64_64KEY поигрался, но безрезультатно.
Большая просьба, если кто-то когда-то сталкивался с аналогичной задачей поделиться опытом, а лучше рабочим кодом
Заранее премного благодарен за участие.
Спасибо, и с наступающим Новым годом


Ранг: 250.9 (наставник)
Статус: Участник
RBC

Создано: 27 декабря 2018 06:49 New!
Цитата · Личное сообщение · #2

у меня на дельфи 7 такой код воркает:

Code:
  1. Const
  2.   KEY_WOW64_64KEY = $0100;
  3.   KEY_WOW64_32KEY = $0200;
  4. //
  5.   reg := tregistry.create(KEY_READ or KEY_WOW64_64KEY);
  6.   try
  7.     reg.RootKey := HKEY_LOCAL_MACHINE;
  8.     reg.OpenKey('SOFTWARE\Microsoft\Cryptography',false);
  9.     RS := reg.ReadString('MachineGuid');
  10.   finally
  11.     reg.free;
  12.   end;

| Сообщение посчитали полезным: BlackCode, TerminatorX


Ранг: 34.2 (посетитель)
Статус: Участник

Создано: 27 декабря 2018 07:31 New!
Цитата · Личное сообщение · #3

Kindly пишет:
у меня на дельфи 7 такой код воркает:

Спасибо большое
У меня тоже заработало
Code:
  1. invoke RegOpenKeyEx,HKEY_LOCAL_MACHINE,chr$("SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Proc_is1"),0,KEY_READ+KEY_WOW64_64KEY,addr hKey
  2. .if eax
  3. return FALSE
  4. .endif
  5. mov pType,REG_SZ
  6. mov cbData,MAX_PATH
  7. invoke RegQueryValueEx,hKey,chr$("InstallLocation"),NULL,addr pType,lpPath,addr cbData
  8. .if eax != ERROR_SUCCESS
  9. invoke RegCloseKey,hKey
  10. return FALSE
  11. .endif
  12. invoke RegCloseKey,hKey
  13. return TRUE

У меня оказывается в иклюде масма было определено так
KEY_WOW64_64KEY = 100
Т.е. десятеричное число, по этому и не работало
 eXeL@B —› Программирование —› Чтение х64 ветки реестра из х86 процесса
Эта тема закрыта. Ответы больше не принимаются.

Оригинальный DVD-ROM: eXeL@B DVD !

Вы находитесь на форуме сайта EXELAB.RU
Проект ReactOS