Дешифровка и кодировка данных в реестре

Тема в разделе "Реестр Microsoft Windows", создана пользователем Dragokas, 5 фев 2014.

  1. Dragokas
    Оффлайн

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.477
    Симпатии:
    4.306
    Предлагаю в этой теме накапливать знания
    о стандартных алгоритмах шифрования значений и параметров в реестре,
    а также способах их дешифровки.

    _______________
    Начну,
    1) ROT-13 (Цезарь)
    К коду символов всех латинских литер добавляется число 13.
    На примере зашифрованного пути к ярлыка в меню "Пуск":
    Ветка: HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\UserAssist\

    Coded.png
    Функция дешифровки на VBS за авторством REMS (www.petri.co.il)
    Код (vb.net):
    function encodedecode(s)
       ' ROT13 ("ROTate by 13 places") is a simple Caesar cipher
       ' used for obscuring text by replacing each letter with the
       ' letter thirteen places down the alphabet.
       ' ROT13 scrambles only letters.

       For i = 1 To Len(s)
         cd = Asc(Mid(s, i, 1))
         If  cd >= 65 and cd =< 90 then 'uppercase
           cd = cd+13
           If  cd > 90 then cd = cd-26
         ElseIf  cd >= 97 and cd =< 122 then 'lowercase
           cd = cd+13
           If  cd > 122 then cd = cd-26
         End If
         coded = coded & chr(cd )
       Next
       encodedecode = coded
    End Function

    Decoded.png
     
    Последнее редактирование: 5 фев 2014
    Kиpилл нравится это.
  2. Kиpилл
    Оффлайн

    Kиpилл Команда форума Администратор

    Лучший автор месяца

    Сообщения:
    12.208
    Симпатии:
    4.977
    Dragokas, у тебя где то был vbs для дешифровки бинарников - обратной и классической последовательности?
     
  3. Dragokas
    Оффлайн

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.477
    Симпатии:
    4.306
    Там не шифрование, а простое кодирование было. Код символа -> текст.
    Найду - отправлю код. Или нужен образец байтов.

    На счет Reversed Hex. Такой вывод давала мне WMI при попытке получить серийный номер диска.
    При этом в режиме повышенных привилегий, S/N выдавался уже в нормальном виде (как на этикетке ЖД).
    Скрины результатов без прав (слева) и с правами (справа) прилагаются:
    Phys_Media_Rights_off.png Phys_Media_Rights_on.png
    Сам запрос для получения S/N:
    Код (vb.net):
    Const wbemFlagReturnImmediately = &h10
    Const wbemFlagForwardOnly = &h20

    Set objWMIService = GetObject("winmgmts:\\.\root\CIMV2")
    Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_PhysicalMedia", "WQL", _
    wbemFlagReturnImmediately + wbemFlagForwardOnly)

    For Each objItem In colItems
        if instr(objItem.Tag, "DRIVE") <> 0 then msgbox "Tag: " & objItem.Tag & vblf & "SerialNumber: " & objItem.SerialNumber
    Next
    Итого нужно строку вида:
    2020202020202020202020203157304641444b57
    превратить в строку:
    W1F0DAWK

    Код будет такой:
    Код (vb.net):
    s = "2020202020202020202020203157304641444b57"
    For i = 1 To Len(s) Step 4
        d = d & Chr("&h" & Mid(s, i + 2, 2)) & Chr("&h" & Mid(s, i, 2))
    Next
    WScript.Echo Trim(d)
    (спасибо за помощь Казанский)

    Код (DOS):
    @echo off
    SetLocal EnableExtensions EnableDelayedExpansion

    call :Hex_To_String "2020202020202020202020203157304641444b57" out
    echo -%out%-
    pause
    Exit /B

    :Hex_To_String %1-in.Reversed.Hex.Number %2-out.String
      SetLocal& set "x16=%~1"
      set n=45
      for %%A in (- . / 0 1 2 3 4 5 6 7 8 9) do set s.!n!=%%A& set /a n+=1
      set n=65
      for %%A in (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) do set s.!n!=%%A& set /a n+=1
      set n=97
      for %%A in (a b c d e f g h i j k l m n o p q r s t u v w x y z) do set s.!n!=%%A& set /a n+=1
      set xs=
      for /L %%C in (0,4,8184) do (
        if "!x16:~%%C,1!"=="" goto _ex_Hex
        set /A cplus=%%C+2
        call set /A x10=0x%%x16:~!cplus!,2%%
        call set xs=!xs!%%s.!x10!%%
        set /A x10=0x!x16:~%%C,2!
        call set xs=!xs!%%s.!x10!%%
      )
      :_ex_Hex
      EndLocal& set "%~2=%xs%"& Exit /B
    Смысл в том, чтобы каждую пару 16-ричных чисел поменять местами, а затем x16 -> x10 -> String.

    Собственно батник, в котором реализовано получение S/N всех физических дисков прилагаю.
     

    Вложения:

    Последнее редактирование: 16 фев 2014
    Kиpилл нравится это.
  4. Dragokas
    Оффлайн

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.477
    Симпатии:
    4.306
    Нашел тот VBS.

    Hex -> String
    Код (vb.net):
    strIn = InputBox("Введите значение REG_EXPAND_SZ (REG_MULTI_SZ)")
    a = Split(strIn, ",")

    For i = 0 To UBound(a) Step 2
      strOut = strOut & Chr(CInt("&H" + a(i)))
    Next

    'Урезаем Null '\0'
    Do While Right(strOut, 1) = vbNullChar
      strOut = Left(strOut, Len(strOut) - 1)
    Loop

    'Копирование текста в буфер обмена
    CreateObject("WScript.Shell").Run "cmd.exe /C <nul set /p ""=" & strOut & """ | CLIP", 0, False
    ret = InputBox("Результат скопирован в буфер обмена", , strOut)
    String -> Hex
    Код (vb.net):
    strIn = InputBox ("Введите текст для перевода в REG_EXPAND_SZ (REG_MULTI_SZ)")

    For i = 1 To len (strIn)
      strOut = strOut & Hex(Asc(mid(strIn,i,1))) & ",00,"
    Next

    strOut = strOut & "00,00"
    'Копирование текста в буфер обмена
    CreateObject("WScript.Shell").Run "cmd.exe /C <nul set /p ""=" & strOut & """ | CLIP", 0, False

    ret = inputbox ("Результат скопирован в буфер обмена",,strOut)
     
     
    Последнее редактирование: 16 фев 2014
    Kиpилл нравится это.
  5. Kиpилл
    Оффлайн

    Kиpилл Команда форума Администратор

    Лучший автор месяца

    Сообщения:
    12.208
    Симпатии:
    4.977
    Dragokas, не замечал такую штуку:
    знаки
    00 и 2e отображаются точкой.
    Причем 2e на любой раскладке.
    Что за точка в знаке 00?
     
  6. Dragokas
    Оффлайн

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.477
    Симпатии:
    4.306
    Ну дык, считай в уме.


    Открывай блокнот и пиши: ALT + 46. Что видишь?
     
    Kиpилл нравится это.
  7. Kиpилл
    Оффлайн

    Kиpилл Команда форума Администратор

    Лучший автор месяца

    Сообщения:
    12.208
    Симпатии:
    4.977
    точка.
    А нули то почему точка,причем какая то особенная?
     
  8. Dragokas
    Оффлайн

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.477
    Симпатии:
    4.306
    Нули - то наверное из реестра взято 2-байтовое значение.
    Старший байт пустой, вот и нули.
    Точка самая обычная. Смотри таблицу символов.
     

Поделиться этой страницей