VBScript: поиск и удаление ключей реестра
Скрипт для поиска и удаления искомых ключей реестра.
1. Запрос искомой фразы для поиска.
2. Вывод результатов в окне Блокнота с возможностью исключения параметров по желанию пользователя.
3. Сохранение файла отчёта в текущей директории по выбору пользователя.
Option Explicit Dim sSearchFor, st, st0, sRegTmp, sOutTmp, eRegLine, iCnt, sRegKey, aRegFileLines, stroca, isDel, delLine, delLines, resbox Dim wssh : Set wssh = CreateObject("WScript.Shell") Dim FSO : Set FSO = CreateObject("Scripting.FileSystemObject") sSearchFor = InputBox("Введите в поле искомое слово." &vbcrlf&vbcrlf& "Задавая искомую фразу, будьте осторожны: Убедитесь в уникальности имени удаляемого параметра. ", "Реестр | fate (modified by Lucky)") If sSearchFor = "" Then Cleanup() Dim StartTime : StartTime = Timer sRegTmp = wssh.Environment("Process")("Temp") & "\RegTmp.tmp " sOutTmp="RegDel "&sSearchFor&".txt" wssh.Run "regedit /e /a " & sRegTmp, , True aRegFileLines = Split(FSO.GetFile(sRegTmp).OpenAsTextStream(1, 0).Read(FSO.GetFile(sRegTmp).Size), vbcrlf) 'делим текст данных на строки FSO.DeleteFile(sRegTmp) Dim txt : Set txt = fso.OpenTextFile(sOutTmp,2,True) txt.WriteLine "" txt.WriteLine ""&vbcrlf&"" For Each eRegLine in aRegFileLines On Error Resume Next If InStr(1, eRegLine, "[", 1) > 0 Then 'проверяем: это раздел (если есть [) или параметр. sRegKey = eRegLine end if If InStr(1, eRegLine, sSearchFor, 1) > 0 Then 'если в строке найдено искомая фраза, работаем с ней: If sRegKey <> eRegLine Then st0=Split(eRegLine,"=") 'делим пераметр на то что левее "=" (имя) и правее "=" (значение) st=Replace(st0(0),"""","") 'берем лишь имя параметра для построения пути stroca=Mid(sRegKey,2) stroca=Replace (stroca,"]","",1) 'исключяем знаки ] из строки Раздела txt.WriteLine stroca &"\"& st 'запись строки в обрабатываемый файл else stroca=Mid(sRegKey,2) stroca=Replace (stroca,"]"," ",1) stroca =Trim(stroca) txt.WriteLine stroca & "\" 'запись строки в обрабатываемый файл End If iCnt = iCnt + 1 End If Next txt.Close Erase aRegFileLines If iCnt < 1 Then wssh.Popup "Поиск длился " & FormatNumber(Timer - StartTime, 0) & " сек. " & _ "По запросу " & chr(34) & sSearchFor & chr(34) & _ " ничего не найдено.",, "Реестр | fate (modified by Lucky)", 4096 FSO.DeleteFile(sOutTmp) Cleanup() End If wssh.Popup "Поиск длился " & FormatNumber(Timer - StartTime, 0) & " сек. " & _ iCnt & " совпадений по запросу " & chr(34) & sSearchFor & chr(34),, _ "Реестр | fate (modified by Lucky)", 4096 wssh.Run "NotePad " & sOutTmp, 3, True 'открытие NotePad с отчётом об удалении delLines = Split(FSO.OpenTextFile(sOutTmp,1).ReadAll, vbcrlf) For Each delLine in delLines if Left(delLine,1)<>"0 then Err.Clear : wssh.RegRead delLine if Err.Number=0 then resbox=resbox&delLine&vbCrLf&vbCrLf end if End if end if Next if resbox<>"" then resbox="Следующие строки удалить не удалось:"&vbCrLf&resbox isDel=wssh.Popup(resbox&"Хотите сохранить файл отчета удаляемых строк?",, _ "Отчёт | fate (modified by Lucky)", 36) if isDel=7 then FSO.DeleteFile(sOutTmp) Cleanup() Sub Cleanup() Set wssh = Nothing Set FSO = Nothing WScript.Quit End Sub
Авторы скрипта — Lucky и fate.
Предложения в русском языке начинаются с большой буквы и заканчиваются точкой.
В названии ветки всегда должен быть указан язык программирования или среда исполнения скрипта, если это возможно.
VBS: Прочитать значение реестра REG_BINARY
Подскажите /помогите решить задачу получения содержимого параметра (REG_BINARY) реестра в читаемом виде с целью дальнейшей обработки.
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Svod] "VFData"=hex:01,00,00,00,27,00,00,00,01,00,00,00,80,c3,c9,01,73,76,6f,64,00,36,\ 36,37,32,00,00,36,36,37,32,2d,30,30,35,36,31,00,73,76,6f,64,00
Заранее благодарен за любые идеи.
2 Ответ от smaharbA 2011-07-26 18:42:30
Re: VBS: Прочитать значение реестра REG_BINARY
hklm=2147483650 if GetObject("winmgmts:\\.\root\default:StdRegProv").GetBinaryValue(hklm, "SOFTWARE\Svod", "VFData", arr) = 0 Then for x=lbound(arr) to ubound(arr) arr(x) = right(0 & hex(arr(x)), 2) next msgbox lcase(join(arr,",")) end if
вот только одно — Зачем ? (с)
Я конечно далек от мысли. (с)
3 Ответ от TAOSoft 2011-07-26 21:23:28
Re: VBS: Прочитать значение реестра REG_BINARY
Как бы правильно выразиться. Вот если через реестр смотреть, то видно, что параметр содержит в себе » svod 6672 6672-00561″ и еще ряд символов непонятного значения (содержания). Можно ли содержимое представить как строку. Нужно это для 1) определить как и что пушиться в этот параметр 2) после осознания 1 скриптом это дело править.
4 Ответ от smaharbA 2011-07-27 06:47:56 (изменено: smaharbA, 2011-07-27 07:00:28)
Re: VBS: Прочитать значение реестра REG_BINARY
hklm=2147483650 if GetObject("winmgmts:\\.\root\default:StdRegProv").GetBinaryValue(hklm, "SOFTWARE\Svod", "VFData", arr) = 0 Then s="" for each x in arr s=s & chrb(x) next msgbox s end if
hklm=2147483650 if GetObject("winmgmts:\\.\root\default:StdRegProv").GetBinaryValue(hklm, "SOFTWARE\Svod", "VFData", arr) = 0 Then s="" for each x in arr s=s & chr(clng("&h" & x)) next msgbox replace(s,chr(0)," ") end if
Я конечно далек от мысли. (с)
5 Ответ от Rod 2012-05-25 00:05:54
Re: VBS: Прочитать значение реестра REG_BINARY
Здравствуйте! Возникла анологичная ситуация с REG_BINARY кодом. Помогите прочесть
60 8e fb 64 3e 40 b9 cf ac 08 00 90 3e d0 c6 50 6e b4 e0 03 39 5b df 0b -это пароль от моего почтового ящика.
6 Ответ от alexii 2012-05-25 08:18:35
Re: VBS: Прочитать значение реестра REG_BINARY
Rod, не проще ли Вам будет воспользоваться соответствующими утилитами от NirSoft?
7 Ответ от Rod 2012-05-25 15:21:28
Re: VBS: Прочитать значение реестра REG_BINARY
Пробовал различные варианты, но никаких результатов не добился. И администрация сайта уже больше месяца никак не помогла. Войти в данный ящик могу только дома через агента майл.ру. А большую часть времени работаю вне дома. Плюс ко всему я еще и полный юзер. Пароль нужен крайне необходимо, а не восстановить и соответственно изменить уже долгое время не могу. Нашел только через реестр BIG_BINARY код и опять в тупике. Помогите пожалуйста. Спасибо!
8 Ответ от Rom5 2012-05-25 18:03:42
Re: VBS: Прочитать значение реестра REG_BINARY
Пароль наверняка в реестре в зашифрованном виде.
Т.е. Вам остается только штатными путями либо через админов менять пароль. Ведь должен же быть еще дополнительный имейл для высылки пароля.
Либо везде (на других машинах) использовать аналогичный агент предварительно импортировав ключ реестра с работающей машины.
9 Ответ от Flasher 2012-05-27 12:24:53
- Flasher
- Заблокирован
- Неактивен
Re: VBS: Прочитать значение реестра REG_BINARY
Какие именно? Просмотр паролей за звёздочками с помощью PassView, Revelation, SeePassword, Password Cracker, MPR и т.д. или через ссылку «Забыли» в подобном окне?
Получение данных реестра
Вы можете получить или изменить данные реестра с помощью класса WMI StdRegProv и его методов. При использовании служебной программы Regedit для просмотра и изменения значений реестра на локальном компьютере StdRegProv позволяет использовать скрипт или приложение для автоматизации таких действий на локальном компьютере и удаленных компьютерах.
StdRegProv содержит методы для выполнения следующих действий:
- Проверка разрешений доступа для пользователя
- Создание, перечисление и удаление разделов реестра
- Создание, перечисление и удаление вложенных ключей или именованных значений
- Чтение, запись и удаление значений данных
Данные реестра организованы поддерями, ключами и вложенными ключами, вложенными под ключом верхнего уровня. Фактические значения данных называются записями или именованными значениями.
Ниже приведены поддеревы:
Например, в записи реестра HKEY\SOFTWARE\Microsoft \DirectX\InstalledVersion поддерев HKEY — SOFTWARE, подключи — Microsoft и DirectX, а именованное значение — InstalledVersion.
RegistryKeyChangeEvent возникает при изменении определенного ключа, но запись не определяет, как изменяются значения, и это событие не активируется изменениями под указанным ключом. Чтобы определить изменения в иерархической структуре ключей, используйте RegistryTreeChangeEvent, который не возвращает определенные значения или изменения ключей, которые происходят. Чтобы получить определенное изменение значения входа, используйте RegistryValueChangeEvent, а затем прочитайте запись, чтобы получить базовое значение.
StdRegProv имеет только методы, которые можно вызывать из C++ или скрипта, которые отличаются от структуры классов Win32.
В следующем примере кода показано, как использовать метод StdRegProv.EnumKey для перечисления всех подразделов программного обеспечения Майкрософт в разделе реестра.
HKEY_LOCAL_MACHINE ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ\Майкрософт\
const HKEY_LOCAL_MACHINE = &H80000002 strComputer = "." Set objReg=GetObject("winmgmts:!\\" & strComputer & "\root\default:StdRegProv") strKeyPath = "SOFTWARE\Microsoft" objReg.EnumKey HKEY_LOCAL_MACHINE, strKeyPath, arrSubKeys For Each subkey In arrSubKeys Wscript.Echo subkey Next
$HKEY_LOCAL_MACHINE = 2147483650 $strKeyPath = "SOFTWARE\Microsoft" $objReg = [WMIClass]"root\default:StdRegProv" $arrSubKeys = $objReg.EnumKey($HKEY_LOCAL_MACHINE, $strKeyPath) foreach ($subKey in ($arrSubKeys.sNames))
StdRegProv имеет различные методы для чтения различных типов данных значений записи реестра. Если запись имеет неизвестные значения, можно вызвать StdRegProv.EnumValues для их перечисления. В следующей таблице перечислены соответствия между методами StdRegProv и типами данных.
Способ | Тип данных |
---|---|
GetBinaryValue | REG_BINARY |
GetDWORDValue | REG_DWORD |
GetExpandedStringValue | REG_EXPAND_SZ |
GetMultiStringValue | REG_MULTI_SZ |
GetStringValue | REG_SZ |
В следующей таблице перечислены соответствующие методы для создания новых ключей или значений или изменения существующих.
Способ | Тип данных |
---|---|
SetBinaryValue | REG_BINARY |
SetDWORDValue | REG_DWORD |
SetExpandedStringValue | REG_EXPAND_SZ |
SetMultiStringValue | REG_MULTI_SZ |
SetStringValue | REG_SZ |
В следующем примере показано, как считывать список источников для системного журнала событий из раздела реестра.
\система событий\HKEY_LOCAL_MACHINE SYSTEM\Current Control Set Services\\
Обратите внимание, что элементы в многостроонном значении рассматриваются как коллекция или массив.
const HKEY_LOCAL_MACHINE = &H80000002 strComputer = "." Set objReg=GetObject("winmgmts:!\\" _ & strComputer & "\root\default:StdRegProv") strKeyPath = "SOFTWARE\Microsoft" objReg.EnumKey HKEY_LOCAL_MACHINE, strKeyPath, arrSubKeys For Each subkey In arrSubKeys Wscript.Echo subkey Next
Поставщик реестра размещается в LocalService, а не LocalSystem. Поэтому удаленное получение информации из поддеревого HKEY_CURRENT_USER невозможно. Однако скрипты, выполняемые на локальном компьютере, по-прежнему могут получить доступ к HKEY_CURRENT_USER. Модель размещения можно задать на локальном компьютере, но это риск безопасности, так как реестр на удаленном компьютере уязвим для враждебного доступа. Дополнительные сведения см. в разделе «Размещение и безопасность поставщика».
Переход по указанному в буфере обмена пути или ключу реестра
Q: Задача в необходимости перехода к файлу, папке или ключу реестра, указанному в буфере обмена по имени или пути.
- Если в пути к отсутствующему каталогу/файлу имеются оба варианта косой черты, то объектом для перехода станет родительский каталог.
- Разделы реестра могут быть записаны в т. ч. в виде аббревиатур (HKCU, HKCR, HKLM, HKCC, HCU) в любом регистре и иметь ‘:’ на конце.
- Если указан параметр или несуществующий ключ реестра, произойдёт переход в существующий в путевой цепи куст.
- Разделителем в путевой цепи может быть прямой или обратный слэш, в т. ч. с лишними пробелами по обе стороны.
- Могут быть указаны лишние концевые пробелы, знаки табуляции, переводы строк, кавычки, квадратные скобки.
- Поддерживаются длинные пути (более 259 символов), относительные пути и пути с переменными окружения.
- В цепочке относительного пути на наличие также проверяются все составные компоненты.
- Запрещённые символы в конце путей файлов и каталогов отсекаются.
- Виртуальный каталог может открываться по GUID> или ::GUID>.
A: VBS-скрипт (описание работы в шапке):
'=============================== VBS ============================== ' Назначение: Перейти к объекту в активной панели ТС по указанному ' в буфере имени файла/каталога, ключу реестра или GUID ' Условие: указать %$SystemX86%\wscript.exe перед путём к скрипту ' Параметры: "" "%P%Z" '============================================= Автор: Flasher © === Option Explicit : Dim FSO, C, REx, R If WSH.Arguments.Count <> 2 Then MsgBox "Укажите два параметра!",_ 4144, " Переход по пути в панели ТС" : WSH.Quit Set FSO = CreateObject("Scripting.FileSystemObject") With GetObject("New:1C3B4210-F441-11CE-B9EA-00AA006B1A69)") .GetFromClipboard : If Not .GetFormat(1) Then Quit 1 C = .GetText : If Len(C) = 0 Then Quit 0 End With : Set REx = New RegExp With REx .IgnoreCase = 1 .Pattern = "(H[CK]|(::)?\<|%|[A-Z]:)[^\r\n""]+[^\s\\""]" If .Test(C) Then C = .Execute(C)(0) Else .Pattern = " *[^\s/|:\\<*?>""][^\r\n\t|:<*?>""]*" If .Test(C) Then C = RTrim(.Execute(C)(0)) Else Quit 1 End If : .Pattern = "^(::)?\]+" If REx.Test(C) Then C = .ExpandEnvironmentStrings(REx.Execute(C)(0)) Else Quit 1 REx.Pattern = ".+/.+\\.+|.+\\.+/.+" : If REx.Test(C) Then _ REx.Pattern = "(.+)[\\/][^\\/]+[\\/]?$" :_ If REx.Test(C) Then Set C = REx.Execute(C)(0) :_ If FSO.FolderExists("\\?\" & C) + FSO.FileExists("\\?\" & C) = 0 Then C = C.Submatches(0) If Mid(C, 2, 1) <> ":" Then C = WSH.Arguments(1) & C If FSO.FileExists("\\?\" & C) + FSO.FolderExists("\\?\" & C) = 0 Then For R = 3 To UBound(Split(Replace(C, "/", "\"), "\")) If FSO.FolderExists("\\?\" & C) Then R = 0 : Exit For Else C = FSO.GetParentFolderName(C) Next : If R Then Quit 1 End If End If If FSO.FolderExists("\\?\" & C) + FSO.FileExists("\\?\" & C) = 0 Then Quit 1 Else On Error Resume Next If Left(C, 1) = "" : .Run """%COMMANDER_EXE%"" /A /O /S """ & C & """" : Quit 0 End With Sub Quit(T) If T Then MsgBox "Содержимое буфера обмена не эквивалентно" & vbCr &_ "существующему пути в системе или реестре !", 4144, " Переход по пути в панели ТС" Set FSO = Nothing : WSH.Quit End Sub
Flasher
02.01.2020
Свежие комментарии
Архивы
Категории
- Рубрик нет