RFID модуль PN532: как я домофонный ключ скопировал

xterm — xterm

В вычислениях , Xterm является стандартным эмулятором терминала для системы X Window . Пользователь может одновременно запускать множество различных вызовов xterm на одном и том же дисплее , каждый из которых обеспечивает независимый ввод / вывод для процесса, запущенного в нем (обычно это оболочка Unix ).

xterm возник до X Window System. Первоначально он был написан как автономный эмулятор терминала для VAXStation 100 (VS100) Марком Вандевурдом, учеником Джима Геттиса , летом 1984 года, когда началась работа над X. Быстро стало ясно, что он будет более полезен как часть X, чем как отдельная программа, поэтому он был перенаправлен на X. Как рассказывает Геттис, «внутреннее устройство xterm отчасти так ужасно потому, что изначально предполагалось, что один процесс сможет управлять несколькими дисплеями VS100 ».

После многих лет работы над эталонной реализацией X примерно в 1996 году основная линия разработки перешла на XFree86 (который, в свою очередь, является ответвлением от X11R6.3), и теперь его поддерживает Томас Дики .

Также доступно множество вариантов xterm. Большинство эмуляторов терминала для X начинались как разновидности xterm.

RFID модуль PN532: как я домофонный ключ скопировал

Понадобился тут еще один ключ для домофона. Казалось бы, чего проще: идем в правление, покупаем ключик… а ключиков-то и нету! И не будет. Ну может будет, но потом. Возможно, следующим летом. Но это не точно.

Ладно, мы люди не гордые, идем в ближайший «Дом быта», просим сделать копию. Там берут, прикладывают к своей шайтан-машине и возвращают. Правда без копии. Потому что копию сделать нельзя. Потому что безопасность должна быть безопасной и ключик зашифрован. Не унываем, идем в другую мастерскую… в третью… после пятой приходит понимание, что мы в жопе и спасение утопающих — дело рук самих утопающих. Беглое сканирование показало, что мы имеем дело с ключом стандарта Mifare Classic.

Disclaimer

Товарищ майор, данная статья носит исключительно образовательный характер и не преследует целей по взлому транспортных карт и иных устройств, основанных на Mifare Classic. Автор не поддерживает и осуждает любые киберпреступления.

1. Железо

Из оборудования понадобится купить только RFID-модуль PN532 (я использовал версию V3). На июнь 2021 года стоит платка менее 500 рублей. Остальное скорее всего у вас есть: компьютер и usb-uart преобразователь. В качестве последнего я использовал многострадальный Pinboard с ft232 на борту, вы можете использовать любой другой, но народ жаловался, что модуль на cp2102 почему-то работает не всегда корректно.

Работать будем по UART — и тут есть подвох. На некоторых платах RX- и TX-выводы не обозначены. В таком случае, поступаем просто: смотрим на 4-пиновый разъем: после пина VCC идет TXD (на месте SDA), а следом — RXD. Подключаемся к компу, запускаем свой любимый терминал, выставляем скорость 115200, открываем нужный порт и посылаем следующую HEX-последовательность:

Модуль должен ответить:

На скриншоте ниже представлен вывод на примере программы Terminal v1.9b.

Если все прошло успешно, отключаемся, идем дальше. Если нет — проверяем питание модуля, пробуем менять местами RX и TX, перезагружаем компьютер, переустанавливаем винду, протираем экран тряпочкой… Ну и так далее, пока не заработает.

2. Ставим Linux на виртуалку

КЭП, но если у вас уже линух, то эту часть можно пропустить. С остальными продолжим. Ставить будем Ubuntu Server 16.04. Описывать установку на VirtualBox я не буду — там все стандартно:

  • качаем торрент-файл по официальной ссылке
  • скачиваем образ
  • создаем виртуалку (гигов 10 диска, гига 4 ОЗУ), в сетевых настройках виртуалки выставляем «сетевой мост»
  • подцепляем образ в качестве загрузочного диска
  • запускаем виртуалку
  • выбираем английский язык
  • нажимаем Install Ubuntu

Еще раз введите пароль. Теперь, когда вы под рутом, установите ssh (если не сделали этого на этапе установки системы):

Далее узнайте свой ip:

Если вы не забыли указать сетевой мост в начальных настройках, и ваш роутер поддерживает DHCP, то будет назначен ip из подсети вашего роутера.

Сворачиваем окно виртуалки, открываем putty, вбиваем адрес, который только что узнали, попадаем в консоль:

Все, теперь удобно копипастить команды из браузера на сервер 🙂

Сворачиваем виртуалку, идем в putty, дальше работаем уже там.

3. Внутри Linux

Итак, мы сделали проброс usb-порта из винды в убунту. Если же у вас изначально Linux, то просто вытащите-воткните usb-uart переходник. Набираем в консоли команду:

В моем случае обнаружилось два rs232 порта: ttyUSB0 и ttyUSB1. Пробуем подключиться. Отключаем UART-переходник от PN532, на переходнике закорачиваем RX и TX, в консоли заходим под рута:

Вместо «/dev/ttyUSB0» должен быть ваш порт. Экран очистится и на нем будет отображаться только курсор. Пробуем набирать любой текст с клавиатуры.

Если текст набирается успешно, значит выбран правильный rs232-интерфейс и он работает корректно. Если же терминал молчит, то попробуйте выбрать другой порт (например, /dev/ttyUSB1). Должно заработать — ведь как-то у вы прошли тест из первой главы? Получилось? Отлично, продолжаем.

Нажмите Ctrl+A, затем Shift + K, затем Y — так вы выйдете из терминала.

Небольшое (но полезное) дополнение, которое можно пропустить
Наберите (находясь все так же под рутом) команду:

Выходим из putty и подключаемся заново. Теперь набираем

Далее нажмите Enter и войдите под рутом:

Выполните, например, команду:

Получите список файлов и директорий:

Теперь закройте окно putty, подключитесь заново и наберите:

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

Теперь вы можете перемещаться выше-ниже по предыдущему экрану (курсором, либо PgUP/PgDown). Для выхода из этого режима нажмите еще два раза Esc. Можно и просто записать все что выводилось на экран в файл (разумеется, в пределах размера буфера, который указывается через переменную defscrollback в файле /etc/screenrc):

Все это очень удобно, если у вас прервалась putty-сессия во время какого-то процесса (например, ребутнулся роутер во время подбора ключей) и нужно подключиться в состояние «как было».

4. Установка nfc-tools

Подключаем обратно PN532. Дальше все довольно стандартно. Находясь под рутом, набираем:

Создаем файл конфигурации:

Вместо nano можете заюзать любой удобный редактор (я предпочитаю vim). В файле прописываем:

  • log_level — уровень логирования (если не работает, увеличьте до 3, будет более подробный вывод команды)
  • device.connstring — тут после двоеточия указываем путь до порта, полученный на этапе dmesg.

Если ошибок не появилось (скрин ниже), ключик успешно считан, можно продолжать.

Иногда модуль может подвисать (причем подвисание сохраняется и при перезагрузке):

В этом случае отключаем проброс USB (убираем галку).

Далее выполняем тест через терминал из п.1 статьи и делаем проброс USB обратно. Должно заработать.

5. Установка подборщика криптоключей mfoc

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

Для теста приложите болванку из комплекта PN532 к модулю и выполните:

Чтение ключа должно пройти без ошибок, а на выходе получится дамп. Теперь попробуйте приложить свой домофонный ключ и запустить заново. Программа будет долго пытаться использовать стандартные криптоключи, но в итоге у нее ничего не получится и она выдаст ошибку: «No sector encrypted with the default key has been found, exiting..»

Значит, придется где-то взять хотя бы один криптоключ. Начинаем ломать!

6. Darkside Attack: установка mfcuk

Mfcuk является реализацией атаки Mifare Classic «Dark Side» Key Recovery, основанной на статье Nicolas T. Courtois The dark side of security by obscurity, которая использует уязвимости ГПСЧ и ответов об ошибках Mifare карт. Для нас это лишь означает, что эта тулза может выломать криптоключ опорного (как правило, нулевого) сектора, а остальные ключи уже можно будет получить через подборщик mfoc. Ликбез окончен, начинаем установку!

Сначала все стандартно:

А дальше нужно применить небольшой патч. Дело в том, что согласно вот этой статье, существуют «weaker» ключи, а в mfcuk не существует логики по данному типу. В результате тулза крутится сутками, а результата нет. Впрочем, статья 2016 года и может уже починили (последний коммит mfcuk от 2018 года), но мы рисковать не будем и сделаем проще: скопируем пропатченные исходники с гитхаба автора статьи:

И если вы подумали, что это все, то нет. Автор упомянутой статьи, поправив один баг, наплодил другой. Хорошо, что есть комменты 🙂 Цитата: «В авторском фиксе файлов crapto1.c/mfcuk.c есть нюанс — там sleepmillis заменено на sleep. На win* системах оно работает корректно, а в unix-like — нет, в 1000 раз медленнее». Ну что же, исправим это досадное недоразумение:

Должно выдать ОК. Теперь можно и компилировать:

Далее прикладываем домофонный ключик к плате (желательно приклеить скотчем, чтобы не сполз), переходим в папку src и набираем команду:

Через некоторое время (примерно через час) начинают вылезать первые результаты. На строчки ERROR не обращайте внимание. Ваша задача — дождаться, пока пара ключей maxhii/maxloi начнут от вывода к выводу повторяться. Однако, не спешите прерывать сканирование. На скрине выше показан пример ложного срабатывания. Далее можно видеть пример правильного ключа, обычно он начинает появляться на maxhi/maxlo равным 5-6.

В конце скриншота можно наблюдать ошибку: «Segmentation fault (core dumped)». Причину ошибки выяснить так и не удалось, а возникать она может уже на первых итерациях, когда ключ еще не найден, тогда приходится начинать все заново. После того, как я заменил металлическую подставку под платой на картонную коробку, ошибка стала вылетать гораздо реже. Возможно, возникали какие-то наводки и программе сносило крышу.

Если вы прождали пару часов, а программа так ничего и не выводит, то шансов уже меньше, некоторые ключи просто не поддаются копированию. Например, у меня получилось натравить эту тулзу только на оригинальный ключик. На копию не было никакой реакции. Как вариант, оставьте сканироваться на ночь. Не помогло? Попробуйте собрать оригинальный mfcuk, может он у вас сработает.

Получилось? Теперь нужно собрать криптоключик. Берем последние 6 цифр maxhii (включая начальные нули, если они есть), аналогично 6 цифр maxloi, в нашем случае получается: be33fef612ae. Теперь можно начинать подбор остальных ключей.

7. И снова mfoc

Заходим в папку /dist и запускаем переборщик с нашим криптоключом (сразу укажем количество попыток -P 20000).

Если вместо скрина ниже будет ошибка «No sector encrypted. », то это означает, что вы поспешили остановить работу mfcuk и следует повторить последние действия из предыдущей главы.

На скрине можно видеть, что для нулевого сектора ключ подошел и mfoc начинает подбор остальных ключей. Это может занять довольно продолжительное время. Причем, иногда один ключ подбирается несколько часов (особенно, первый), а иногда за час может прилететь два-три ключа. У меня на подбор оставшихся 15 ключей ушло где-то часов 8. Кроме того, эта тулза так же может выдавать ошибку «Segmentation fault (core dumped)». После чего ее нужно запускать снова, указывая последовательно все найденные ключи:

Лучше всего это автоматизировать. Я для этого заюзал два простейших скрипта. Скрипт перебора: mloop.sh

И скрипт добавления найденных ключей в файл key.log, а также оповещения в телеграм: mtest.sh

Вместо «bot12345678:ANYTOKEN» следует вставить токен своего телеграм-бота, а вместо «-123456654321» — ID чата, куда будет отправляться сообщение.

Эти скрипты следует создать в папке /dist/mfoc/src/. В той же папке нужно создать файл key.log, куда прописать найденные ключи (как минимум, один) в следующем формате

Да, я знаю, что mfoc умеет полноценно работать с файлами ключей, но обнаружил я это уже потом, а переписывать скрипт было лень.

Вывод mfoc можно мониторить командой:

Этот лог затирается после каждого найденного ключа. В результате вам будет периодически капать сообщение:

Кроме того, автоматом будет пополняться файл key.log, а так же в консоль будут выводиться сообщения:

Так что найденные ключи не потеряются, даже если у вас нет телеграм бота. Когда будет найден 16-й ключ, работу скриптов следует прекратить:

Проверьте, что скрипты больше не выполняются:

Если по какой-то причине они еще висят, то их следует убить командой kill. Теперь можете попробовать сделать дамп:

В результате должно получиться следующее:

И вот у вас на руках дамп dump.mfd, который вы можете теперь при наличии ключей заливать куда угодно и использовать. Так что же, победа?! Как бы не так…

8. Заливка дампа и несколько последних рывков

Первое, что приходит в голову, это залить дамп на ключик, который шел в комплекте с PN532. Ну что же, попробуем это сделать. Для этого сначала нужно получить его дамп. Прикладываем пустой ключ к плате и запускаем mfoc:

Запускаем само копирование:

Успешно! Теперь идем к домофону, дрожащей рукой прикладываем ключик и… Облом! Домофон даже не пискнул. В чем же дело?

Возвращаемся обратно, прикладываем этот ключ к PN532, делаем отдельный дамп:

Теперь сравниваем два дампа:

А вот и косяк! Первый (нулевой) сектор ключа оказался не перезаписан! А он чуть ли не самый главный, ведь там хранится ID, который вносится в память домофона. Пробуем записать еще раз. Форматируем китовый ключ:

Теперь запишем дамп, но с ключом -W, который указывает, что нужно писать в нулевой сектор тоже.

Так что же делать? Где взять подходящий ключ? Самый простой вариант — купить ключ Mifare Zero, стоит рублей 30-40 и у него нулевой сектор можно записать сколько угодно раз. Что же, пробуем:

Теперь бежим и… хотя нет, мы теперь умные, сначала сравниваем дампы:

Успешно! Ни одного выпавшего байта, для верности сделаем даже сравнение md5-сумм:

Идеальное совпадение с оригинальным ключом. Идем теперь к домофону, прикладываем наш новый ключ и… слышим в ответ презрительное молчание. Да в чем теперь-то дело?! Ключи ведь идентичны!

Успокоившись, мы узнаем, что хотя содержимое ключей и совпадает, почти все современные домофоны научились фильтровать Mifare Zero. На смену им пришли One-Time Programmable (OTP) ключи, у которых нулевой сектор можно записать только один раз, но они гораздо лучше маскируются под оригинал. Большинство домофонов (в том числе и мой) спокойно проглатывают MF OTP-2.0, но для более привередливых существуют MF OTP-3.0. Стоят они обычно раза в полтора дороже, но они работают!

Покупаем такой ключик, делаем дамп, записываем…

Уже без особого энтузиазма идем к домофону и… Бинго. Оно заработало! =)

Статья, на которую опирался в этом нелегком пути:

Во вложении пропатченные mfcuk файлы — на случай недоступности (не забудьте заменить sleep на sleepmillis, как описано в статье).
Так же добавил архивы с оригинальными nfc-tools, mfcuk, mfoc — на случай, если их на гите забанят.

Вклад в сообщество

Сообщение UFO » 07.11.2011,06:00

xterm из комплекта Cygwin тоже, вроде, нормально отображает.

Скриншот с дефолтным размером шрифта:

Тоже самое со средним размером шрифта:

При включенной опции «Enable Reverse Video»:

Сообщение Schicchi » 07.11.2011,10:12

Хм, похоже у Reflection была какая-то проблема с настройками. Создал новое соединение с настройками по умолчанию и ситуация улучшилась:

Изображение

для полноты картины скриншот putty:

Изображение

Тем не менее у обоих эмуляция не на высоте:
у Reflection мерцание текста «Blink» присутствует, но текст «Bold» отображается другими атрибутами, а должен оторажаться жирным шрифтом.

У Putty отсутствет и мерцание и жирный шрифт.

Судя по скриншоту у xterm присутствует и жирный шрифт и мерцание (т.к. тест «Blink» не выделен другими атрибутами)
Но согласитесь, DECTerm выглядит гораздо приятнее. Хотя и у него не без проблем: разъехались линии рамки и надпись «This is double height» отображается некорректно. Так что выходит пока ближе всего по качеству к DECTerm-у у нас XTerm. А Windows терминалки не дотягивают даже то XTetm-a.

Содержание

Эмуляция терминала

Ранние версии эмулировали VT102 и Tektronix 4014. [6]

В более поздних версиях добавлены управляющие последовательности для DEC и другие терминалы, такие как:

    : Добавлено в обновлении 24. [7] : Добавлено в обновлении 24. [7] : DECSTR (мягкий сброс терминала) был добавлен в патче 34. [8] : Несмотря на то, что это официально не эмулируется, некоторые функции VT520 были реализованы. [9] В патче 254 были добавлены элементы управления DECSMBV и DECSWBV для настройки громкости сигнала маржи и предупреждения. [10]

Настройка

Таблица 256 цветов, доступных в xterm с поддержкой цвета. номера цветов xterm и RGB значения показаны для каждого.

Как и большинство Икс приложений, xterm можно настроить через глобальные X ресурсы файлы (например, / usr / lib / X11 / app-defaults / XTerm), файлы ресурсов для каждого пользователя (например, ~ / XTerm, ~ / .Xresources) или аргументы командной строки. Большинство параметров командной строки соответствуют настройкам ресурсов, как указано на странице руководства.

Пока название программы xterm, класс ресурсов X — XTerm. В uxterm сценарий отменяет это, используя UXTerm ресурсный класс.

xterm обычно не имеет строки меню. Чтобы получить доступ к трем меню xterm, пользователи удерживают клавишу управления и нажимают левую, среднюю или правую кнопку мыши. Поддержка «панели инструментов» может быть встроена, вызывая те же меню.

Протоколы

Поддерживаемые функции управления терминалом включают:

В дополнение к протоколам, используемым в коммерчески доступных терминальных машинах, xterm добавил несколько протоколов, которые были приняты другими эмуляторами терминала, например:

Локализация Applications (приложений).

Зависит исключительно от написания приложения в соответствии со стандартом i18n и работой с базами termcap в случае xBSD или terminfo в случае Linux или SYSV -based для эмулируемого терминала TERM .

К сожалению, консольных фонтов пока, очень мало, не говоря уже о хороших и красивых фонтах.
Некоторые фонты и клавиатурный маппинг от Александра Рыбалко, можно найти:
https://people.freebsd.org/~ray/newcons/fonts/
https://people.freebsd.org/~ray/newcons/newcons_kbd/
https://people.freebsd.org/~emaste/newcons/

Пример конвертации bdf фонта в fnt используя vtfontcvt и его загрузку используя vidcontrol, см: https://wiki.freebsd.org/Newcons

Минимум позволяющий работать в консоли с UTF -8:
— отображение – /usr/bin/less (использовать в качестве PAGER )
— редактирование – /usr/bin/vi , редактор Vi в 10.1 собран с поддержкой wide-char
— псевдографика в mc выглядит красиво, встроенный редактор поддерживает utf-8
— любимый многими, простой редактор /usr/bin/ee не поддерживает utf-8, отображает криво, но позволяет набирать текст «вслепую».
— настройку chrasets и работу samba3x, samba4x – не проверял

Все вышенаписанное проверено на реальном железе с FreeBSD 10.1 и в гостевой FreeBSD 10.1 под VirtualBox, включая Xorg и несколько DE и WM.

Практика:
— используем syscons (4) для работы в консоли с KOI8-R, CP1251, CP866
— используем vt (4) для работы в консоли только с UTF -8

Вывод: наконец можно постепенно избавиться от разнообразия: CP866,CP1251,KOI8-R и тд и тп и использовать одну универсальную кодировку UTF -8.

Лучшие эмуляторы терминала для Linux

1. GNOME Terminal

Начать стоит с эмулятора GNOME Terminal, который по дефолту предоставляется пользователям графической оболочки Gnome (для использования с другими оболочками его следует установить вручную). От большинства стандартных терминалов он выгодно отличается наличием целого ряда функций, облегчающих работу.

Особенности:

  • Разноцветный текст в зависимости от выбранной пользователем цветовой схемы.
  • Изменение внешнего вида с помощью встроенных тем оформления.
  • Возможность сделать терминал прозрачным.
  • Работа с несколькими вкладками и поддержка мыши.
  • При изменении размеров окна предлагает варианты переноса текста.
  • Для выполнения разных задач можно создавать индивидуальные профили.
  • Делает ссылки кликабельными.

2. Termite

Это простой и ничем не примечательный эмулятор терминала для Linux, который «заточен» под управление горячими клавишами. Обладает набором базовых функций.

  • Поддерживает прозрачного фона, пользовательских шрифтов и цветовых схем.
  • Кликабельные ссылки.
  • Изменение размеров полосы прокрутки.
  • Позволяет вставлять и выделять текст.

3. Yakuake

Выпадающий эмулятор терминала для среды KDE (активируется и исчезает с экрана при нажатии кнопки F12). Активные пользователи Konsole заметят схожесть интерфейса этих двух программ, да и функции у них почти идентичные. Также Yakuake кое-что взял от своего коллеги под названием Quake.

4. Cool Retro Term

Этот эмулятор терминала linux не спутаешь ни с каким другим — его окно выглядит точь-в-точь как экран компьютера из 90-х. Предлагаемые пользователю цветовые темы и эффекты еще больше усиливают ностальгию по беззаветно ушедшим временам. Что же касается функций, то их набор вполне стандартный.

5. Guake Linux Terminal

Легкий и простой, но одновременно красивый терминал linux — именно так можно описать Guake. Запускается и сворачивается после нажатия горячей клавиши. Изначально он был разработан для рабочей среды Gnome, но используется и на других графических оболочках. Основа Guake — эмулятор, который был использован в Quake, отсюда и созвучность названий.

Особенности:

  • Позволяет открывать мультиэкраны и мультиокна.
  • Настройка цветовых схем с использованием сотен предустановленных паттернов.
  • Быстрый и легковесный.
  • Эргономичный интерфейс.

Оцените статью
Fobosworld.ru
Добавить комментарий

Adblock
detector