Как я перестал хранить FTP-пароли в FAR’e

в 13:26, , рубрики: FAR, FTP, информационная безопасность, пароль, Софт, метки: , ,

Однажды в свободную минутку своего рабочего времени я решил слить конфиги рабочего и домашнего FAR'ов. Открыв в WinMerge оба FarSettings.User.reg, вяло покручивая колёсико мышки, внезапно я зацепился взглядом за знакомые ftp-адреса своих учётных записей на всяких серверах. Увидев их на экране казённого компьютера, я почувствовал себя очень неуютно. И решил разобраться, насколько надёжно FTP-плагин от FAR'а хранит мои пароли.

  1. Создаю учётную запись, называю хост редким словом, чтоб потом было проще искать в реестре (именно там FAR хранит все настройки). В моём случае этим словом почему-то стало gremlin.
    Ставлю пароль — восемь единичек. Мне так удобнее, у них код ascii — 0x31 (я дальше «0x» буду опускать).
    Диалог редактирования параметров учётной записи
  2. Открываю regedit, запускаю поиск по слову gremlin, нахожу.
    Окно regedit
  3. Вижу в поле Password свои восемь единичек (теперь они — 67). Нолик после них говорит нам о том, что данные хранятся строкой (нолик — конец строки). И эти данные закодированы. Первые два байта непонятны.
  4. Открываю в FAR'е диалог редактирования параметров учётной записи FTP, ничего не меняю, сохраняю. Поменялись первые два байта, и байт, заместивший «единичку».
  5. Ставлю пароль «1234», сохраняю. Закодированная последовательность принимает вид: «89 b2 4a 49 48 4f 00 …» Монотонность байтов пароля не сохранилась, значит, кодирование выполнено не сложением-вычитанием побайтово с какой-то константой, а…
    …да. Им. Xor'ом. Исключающим ИЛИ. Сложением по модулю два. Самой таинственной операцией всех времён и народов. Супералгоритм пробегает по паролю одним байтом, ксорит их и… и всё.
  6. Набираю статистику, попутно с нервным хихиканьем ксоря между собой первые два таинственных байта.
    b0^b1	=>	xorbyte
    0d			5d
    0e			5e
    18			58
    30			70
    33			73
    3b			7b
    3f			7f
    49			59
    53			53
    57			57
    58			58
    69			79
    7c			7c
    

    Младший полубайт копируется, старший… короче, xorbyte=((b0^b1)&0x2f)|0x50.

Занавес, одинокие аплодисменты в темноте.

P.S. Программа под Windows и исходнички под VisualC.

Автор: nimblebots

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js