2014-12-17 4 views
3

These are registry values of resulted output and i want my output to be chrome.exe it is decoded in edit binary valueКак читать значения REG_BINARY типа в виде строки из реестра в питона

from winreg import * 

import binascii 

aReg = ConnectRegistry(None,HKEY_CURRENT_USER) 
aKey = OpenKey(aReg, r"Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\CIDSizeMRU") 

for i in range(1024): 

    try: 
     name,value,type = EnumValue(aKey,i) 
     print(value) 
     print("\n") 
    except EnvironmentError:         
     break 

CloseKey(aKey) 

OUTPUT, как это. его только для одного значения:

b'v\x00l\x00c\x00.\x00e\x00x\x00e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0\x00\x00\x00\x85\x00\x00\x00\x10\x03\x00\x00<\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf8\x00\x00\x00\xa4\x00\x00\x00i\x03\x00\x00\x84\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00' 

Как его преобразовать в строку или текст?

+0

Вы можете использовать [bytes.decode] (https://docs.python.org/3.4 /library/stdtypes.html#bytes.decode), если вы знаете кодировку. Что вы ожидаете от этих данных в качестве итоговой строки? – TobiMarg

+0

Данные - это имена недавно использованных приложений, отличных от метро. Например (chrome.exe) –

+0

Я добавил картинку для большего упрощения –

ответ

1

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

Символы разделены нулевыми байтами (b'\x00). Таким образом, мы должны извлечь каждый второй символ (я предполагаю, что данные в value):

value[::2] 

Затем нам нужно найти первый нулевой байт завершает строку там (в противном случае декодирование не удается, из-за других данных в конце):

value[::2].find(b'\x00') 

Найденный индекс может быть использован, чтобы получить часть перед ним, а затем мы вызываем метод decode() сделать жала из объекта байт (decode() по умолчанию используется UTF-8 кодировка):

value[::2][:value[::2].find(b'\x00')].decode() 

Использование вашего примера будет выглядеть следующим образом. Входным является ваш пример OUTPUT. После использования value[::2] она выглядит следующим образом:

b'vlc.exe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0\x00\x85\x00\x10\x00<\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf8\x00\xa4\x00i\x00\x84\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00' 

И в конце концов, вы получите это:

'vlc.exe' 
+0

вы можете выслать мне свой код того, как вы декодировали. –

+0

, пока я пытаюсь закодировать его, я столкнулся с ошибкой значения [:: 2] [значение [:: 2] .find (b '\ x00')]. Decode() AttributeError: объект 'int' не имеет атрибута 'decode' –

+0

@AliAhmed oh, в моем коде отсутствовал ':', поэтому он получил только один int из 'value', а не все до' \ x00'). Исправлено. – TobiMarg