Захват криптоключей Mifare и копирование ключей домофонов IronLogic своими руками / Хабр

Захват криптоключей Mifare и копирование ключей домофонов IronLogic своими руками / Хабр NFC

Keyguardmanager.keyguardlock

Этот класс содержит 2 метода: disableKeyguard() и reenableKeyguard(). Первый метод разблокирует только не защищёный экран. Если экран защищён каким-либо методом, то вызов будет проигнорирован. Метод reenableKeyguard() необходимо вызвать для повторной блокировки экрана, иначе блокировщик не будет запускаться после его выключения.

Минусы данного решения: нельзя разблокировать экран защищённый, допустим, паролем да ещё и надо по какому-то событию вызывать перезапуск экрана блокировки. Вдобавок данный класс является устаревшим начиная с API 13, так что на него не стоит надеяться.

Part list

NFC brigde by elecfreaks
LED1: SMD RGB LED 1x

LED2: SMD yelow LED 1208 1x

R1,R2: SMD 10Ω Resistor 1208 2x

R3,R4: SMD 220Ω Resistor 1208 2x

OK1: Optokppler PC817 1x

JP1: Pin Header 2,54 RM 5x

Unlocker

Ввод пароля через shell

Этот способ я придумал первым так как он достаточно прост, но требует root. В Андроиде с shell-а можно вызвать команду «input», которая позволяет вводить текст и эмулировать нажатия клавиш. Для ввода текста используется такой синтаксис:

input text "type your text here"


Эмуляция нажатий клавиш производится с помощью такой команды:

input keyevent KEYCODE

Список кодов клавиш можно найти

Алгоритм разблокировки у данного метода очень прост:

  1. Пользователь сканирует метку, запускается наше Activity.
  2. Вводим пароль с помощью shell команды «input», и с её же помощью посылаем код клавиши Enter.

Готовые решения


Единственным готовым решением, которое я нашёл, для реализации разблокировки девайса с помощью метки, является программа

. Она платная, а бесплатной версии нет. Посмотрев видео на его странице в Google Play, я сразу для себя решил, что ЭТО не стоит своих денег. Всё реализовано простейшим способом:

  1. Пользователь включает экран устройства и видит стандартный блокировщик экрана.
  2. Он его разблокирует.
  3. Появляется Activity NFCSecure, которое делает вид, что надёжно блокирует доступ к устройству (при нажатии на иконку разблокировки страница почему-то мигает, что не вселяет доверия).
  4. Прикладываем метку и окно закрывается.

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


В общем это приложение достаточно дырявое и защиту сравнимую со стандартным экраном блокировки оно не предоставляет.

Захват криптоключей mifare и копирование ключей домофонов ironlogic своими руками

Голыми руками захватывать криптоключи и копировать брелоки Mifare для домофонов конечно невозможно, а вот собрать прибор, который будет это делать вполне реально. Не буду здесь рассказывать о том, что такое Mifare и вдаваться в технические подробности, скажу только, что данная технология используется сейчас, например, в домофонах, и для того, чтобы скопировать домофонный брелок, необходимо знать криптоключи, которыми он был закрыт.

Внимание! Данная статья создана исключительно в образовательных целях. Напоминаем, что любое проникновение в информационные системы может преследоваться по закону.

У многих, интересующихся технологией MIfare, наверняка есть простейшее устройство для чтения-записи карт и брелоков Mifare, состоящее из модуля PN532 и USB-UART адаптера:

Захват криптоключей Mifare и копирование ключей домофонов IronLogic своими руками / Хабр

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

Я предлагаю вашему вниманию более бюджетный вариант на основе подобного «малого джентльменского набора» из модуля PN532 и USB-UART адаптера, позволяющий захватывать данные от считывателя Mifare, например домофона, и рассчитывать криптоключи, с которыми считыватель обращается к метке.

Разработанное устройство в своей основе имеет недорогую, «народную» отладочную плату на основе процессора STM32F103C8T6, прозванную ещё «BluePill» c подключенными к ней модулем PN532 и USB-UART адаптером. Подключается данный агрегат через USB-OTG кабель к смартфону на Андроиде. Собирается всё это в макетном варианте без пайки, с помощью перемычек и имеет примерно такой вид, хоть и непрезентабельный, но вполне рабочий:

Захват криптоключей Mifare и копирование ключей домофонов IronLogic своими руками / Хабр

Схему сборки очень проста и представлена в текстовом виде:

PN532 ___________________STM32F103C8T6

SCK_____________________PA5(SPI1_SCK)
MISO____________________PA6(SPI1_MISO)
MOSI____________________PA7(SPI1_MOSI)
SS______________________PB0(GPIO_OUTPUT)
SIGIN___________________PB11(TIM2_CH4)
SIGOUT__________________PA12(TIM1_ETR)
SIGOUT__________________PA15(TIM2_ETR)
VCC_____________________ 5V
GND_____________________GND

USB-UART________________STM32F103C8T6

RX______________________PA9(USART1_TX)
TX______________________PA10(USART1_RX)
5V_____________________ 5V
GND_____________________GND

ВАЖНО! Переключатели интерфейса PN532 должны быть установлены в режим SPI! Прошить STM32 можно с помощью утилиты FlashLoaderDemonstrator через существующий USB-UART адаптер.
Внимание для работы с новой версией прошивки необходимо изменить схему подключения вывода SIGOUT на PA12 и PA15 (Ранее было на PA0 и PA12)!

Вот демонстрация захвата криптоключа от имитатора считывателя домофона(Arduino PN532):

Так как считыватели IronLogic(IL), для работы с которыми и разрабатывалось данное устройство, пытаются прочитать метку с криптоключом, рассчитанным на основе UID данной метки, то этот UID сначала надо задать. Сделать это можно двумя способами – вручную или считать с метки. После этого производим захват и ждем расчета криптоключей.

Следующая вкладка программы «Запись на Classic» использует возможность ранних версий считывателей IL записывать копии на дешевые заготовки Mifare Classic. Этот способ основан на том, что считыватель IL после авторизации посылает домофону не оригинальный UID метки, а информацию, записанную в первом блоке (в общем случае совпадающую с UID оригинала). Для этого мы должны захватить и рассчитать криптоключ метки, которая послужит заготовкой, закрыть с его помощью нулевой сектор, а в первый блок этой метки записать четыре байта UID метки, которая служит прототипом. Для этого нам даже не надо захватывать криптоключ оригинала и снимать его дамп, достаточно узнать его UID, но это справедливо только в том случае, если оригинал — «оригинальный», а не является копией, тогда всё-таки придется читать первый блок и уже его записывать в копию. Чтобы было понятнее, рассмотрим такой пример – предположим, что мы хотим сделать копию оригинального ключа с UID 0xEBD52AC5, который записан и в первом блоке оригинала, на обычную метку Mifare Classic с UID, допустим, 0x12345678. Для этого мы с помощью представленного устройства, метко обозванного одним товарищем «Шайтан-Машиной», находим криптоключ именно для этого UID и именно для того объекта (подъезда, дома …), который нам нужен. Пусть криптоключ получился 0xABCDEF098765, тогда отредактируем нулевой сектор дампа копии следущим образом:

Захват криптоключей Mifare и копирование ключей домофонов IronLogic своими руками / Хабр

В первый блок запишем UID оригинала 0xEBD52AC5, а в третий блок шесть байт криптоключа, найденного для этой заготовки — 0xABCDEF098765. Запишем дамп в заготовку, и получим копию домофонного ключа. Примерно так прибор SMKey делает копии IronLogic на обычные Mifare Classic, и именно так поступает данная программа записи. В поле «Код» заносим вручную или считываем с оригинального ключа 4 байта UID, которые будут записаны в 1-й блок копии. Стартуем и, далее следуем подсказкам программы. Сначала считываем UID заготовки, потом подносим устройство к домофону и захватываем данные аутентификации. После окончания расчета программа предложит поднести заготовку для записи данных. Если будет найдено более одного криптоключа, то после записи первого варианта будет дана возможность проверить полученную копию. Если копия не подходит, то следует попробовать следующий рассчитанный ключ, или стереть (привести в исходное состояние) заготовку для дальнейшего использования. Копия может не работать также из-за того, что неправильно определили код, который записывается в 1-й блок копии – например если попытаетесь записать реальный UID не оригинального брелока, а его копии, сделанной по вышеописанному методу.В таком случае надо использовать не UID метки, а данные из 1-го блока, которые можно получить в разделе «Копирование сектора».

Проблемы NFC:  Мобильное приложение Mir Pay

Этот способ не будет также работать для последних версий ПО считывателей IL. В таком случае копию можно сделать, скопировав полностью 0-й сектор ( 4 блока) на заготовку, позволяющую записывать 0-й блок с помощью раздела приложения «Копирование сектора». Здесь также сначала находим криптоключ оригинала, читаем его нулевой сектор и затем пишем на заготовку. Ввиду отсутствия под рукой заготовок ОТР и ОТР-2.0, эта функция пока тестировалась только на заготовках ZERO, хотя новые версии считывателей требуют использовать ОТР-2.0.

Ну и на закуску – раздел приложения «Запись UID» позволяет изменять UID, восстанавливать испорченный 0-й блок и сбрасывать на дефолт криптоключи заготовок ZERO.

Итак – коротко подытожу. Чтобы сделать такое устройство, приобретаем или ищем по своим загашникам модуль PN532, любой из USB – UART адаптеров FTDI, PL2303, CH340 или CP2102, отладочную плату STM32F103C8T6, полтора десятка перемычек, USB-OTG переходник и смартфон(планшет) на Андроиде с OTG. Собираем по вышеприведенной схеме само устройство, прошиваем *.bin файлом STM32 и устанавливаем *.apk приложение из архива
на смартфон. Для корректной работы приложение на смартфоне должно запускаться при подключении USB-UART адаптера или по умолчанию, или выбором вручную, иначе приложение не получит доступ к адаптеру.

Несколько слов хочу сказать по поводу модуля PN532 – не все эти модули «одинаково полезны»! Из трёх модулей(таких как на фото выше), приобретенных мной, один плохо читал и записывал метки, особенно ZERO и ОТР-2.0, но нормально работал в пассивном режиме со считывателями домофонов, другой вел себя с точностью до наоборот и только третий более-менее справлялся и с метками и с домофонами(правда хуже чем первые два). Возможно мне не повезло и именно эта партия модулей оказалась не лучшего качества, но жалуются на них и другие люди. Впрочем – кому как повезет. Это я к чему говорю? В продаже появились модули PN532 немного другой компоновки, которые дороже, но, по отзывам не имеют таких проблем:

Захват криптоключей Mifare и копирование ключей домофонов IronLogic своими руками / Хабр

Если же кому-нибудь попадется PN532, который плохо пишет-читает метки, то могу посоветовать добавить к устройству модуль RC522, стоящий сущие копейки, но прекрасно выполняющий свои функции, по следующей схеме:

RC522____________________STM32F103C8T6

RST______________________PB12(GPIO_OUTPUT)
SCK______________________PB13(SPI2_SCK)
MISO_____________________PB14(SPI2_MISO)
MOSI_____________________PB15(SPI2_MOSI)
SDA______________________PA8(GPIO_OUTPUT)
VCC______________________ 3.3V
GND______________________GND
В этом случае PN532 будет работать только при захвате данных от считывателя, а вся тяжесть работы с метками ляжет на плечи RC522. Обратите особое внимание — RC522 необходимо подключать на напряжение только 3.3В!

P.S. Обновил ПО устройства — добавилась возможность эмуляции Mifare Classic 1K и создания базы данных меток для нескольких объектов старых домофонов IronLogic. В эмулятор можно загрузить бинарный файл дампа размером 1К, а на вкладке «База меток» можно ввести сколько надо UID-ов пустых заготовок, затем захватить для них криптоключи на различных адресах и потом уже записывать их не выходя к объекту. UID и криптоключ А 0-го сектора записанной метки сохраняется в базе данных, что позволяет при необходимости просто стереть метку, которая была записана на этом устройстве.

UPD. Очередное обновление устройства. Основное — сейчас устройство научилось производить захват и расчет криптоключей от последних версий считывателей IL, вплоть до новых 4-полосных считывателей с последней актуальной прошивкой 7.20 выложенной на сайте!
Еще раз обращаю внимание! Схема подключения модуля PN532 для новой прошивки KeyToolsSTM.bin немного изменена: теперь SIGOUT подключен на PA12 и PA15 контролера STM32, а не на PA12 и PA0, как раньше!

Вместо дорогого и капризного модуля PN532 можно сделать несложную антенну с модулем сопряжения. Схема приведена на рисунке:

Захват криптоключей Mifare и копирование ключей домофонов IronLogic своими руками / Хабр

За основу взята статья Простой Mifare-сниффер. Конструкция самой антенны хорошо описана в статье, у меня же неплохо работает бескаркасная катушка диаметром 30мм из 9 витков одножильного изолированного провода, взятого от витой пары интернет кабеля. Прошивка для этой схемы требуется уже другая — KeyTools_WPN.bin. Обратите внимание — такая антенна работает только в пассивном режиме, т.е. только для захвата данных от считки и эмуляции метки. Чтобы читать-записывать метки необходимо дополнить устройство модулем RC522, схема подключения которого приведена выше.
Важное дополнение — вывод PA12 отладочной платы уже подтянут к 3.3В резистором 10кОм, именно исходя из этого выбран номинал R3 = 4к7, но на некоторых платах STM подтягивающий резистор имеет другое сопротивление! Рекомендую замерить сопротивление между РА12 и 3.3В на плате и если оно отличается от 10кОм, то перепаять резистор!

Появилась так же возможность подключения устройства к смартфонам без OTG — для этого вместо USB — UART адаптера подключается Bluetooth модуль типа HC-05, HC-06, а на смартфоне устанавливается приложения KeyToolsBT. Предварительно на Bluetooth модуле с помощью АТ команд необходимо установить скорость обмена 115200! Питание можно организовать от аккумулятора через повышающий преобразователь 5В.

Устройство обсуждается на форуме: Kazus. По всем вопросам обращайтесь туда.

Архив
GitHub

Использование keyguardlock

Следующий метод использует устаревшее API, но тем не менее успешно выполняет свою задачу на Android 4.3. Так же как и в предыдущем методе нам придётся очистить пароль, чтобы разблокировка сработала.

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

  1. Пользователь сканирует метку, запускается наше Activity.
  2. Чистим пароль:
    ((DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE)).resetPassword("", 0).
  3. Разблокируем экран:
    KeyguardManager keyguardManager = (KeyguardManager) context.getSystemService(Activity.KEYGUARD_SERVICE);
    KeyguardLock keyguardLock = keyguardManager.newKeyguardLock("nfcunlocker");
    keyguardLock.disableKeyguard();
  4. Запускаем сервис, который в фоновом режиме создаст BroadcastReceiver, который будет принимать событие выключения экрана:
    ScreenReceiver screenReceiver = new ScreenReceiver();
    IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_OFF);
    registerReceiver(mReceiver, filter);
  5. Как только получено событие оповещающее о том, что экран выключен — включаем блокировку и восстанавливаем пароль.


Данный метод работает достаточно стабильно, но пользуется устаревшим API.

Как пользоваться программой

Unlocker встраивается в контекстное меню и настроек в привычном понимании у него нет. Если вам нужно удалить какой либо файл, который не удаляется стандартными средствами, то нужно кликнуть по нему правой кнопкой мыши и выбрать в появившемся меню «Unlocker».
Захват криптоключей Mifare и копирование ключей домофонов IronLogic своими руками / Хабр
Далее в выпадающем меню программы выберите, что нужно сделать: «Удалить», «Переименовать» или «Удалить» файл и нажмите «ОК».
Захват криптоключей Mifare и копирование ключей домофонов IronLogic своими руками / Хабр
Далее в выпадающем меню программы выберите, что нужно сделать: «Удалить», «Переименовать» или «Удалить» файл и нажмите «ОК».
Захват криптоключей Mifare и копирование ключей домофонов IronLogic своими руками / Хабр

В целом это очень полезная программа, которая пригодится любому пользователю компьютера.

Копируем ключ от домофона miifare телефоном mct

Женщина продолжила задавать вопросы, но я уже её игнорировал, и переключился на мужика:
Я: С вас 160!
М: *достаёт 5000рэ* Вот пожалуйста!
Я: *протягиваю руку, но мужик отдергивает купюру*
М: Сейчас 60 рублей посмотрю, чтобы вам удобней было.
Я: *стою и жду*
М: Вы пока сдачу отсчитывайте.
Я: Не беспокойтесь, сразу отсчитаю, как только получу от вас деньги.
Оживилась женщина.
Ж: А можно, пожалуйста как-то быстрее, я тороплюсь.
Я: *поворачиваюсь к мужику* Поторопитесь пожалуйста, очередь собирается.
М: Вы пока сдачу отсчитайте, у меня тут мелочи много, чтобы я сразу вам её дал, а вы мне сразу сдачу, чтоб не ждать.
Ж: *обращаясь ко мне* Молодой человек, давайте быстрее!
Я: *выхватываю 5000рэ из рук мужика, которое он держал в той же руке, что и кошелёк, кладу их на кассу, проговаривая «Ваши 5000», отсчитываю сдачу, выдаю сдачу, проговаривая «Ваша сдача — 4840 рублей», убираю 5000 в кассу*

Проблемы NFC:  Как Xiaomi умудрилась сделать новые смартфоны хуже старых после перехода на китайские процессоры —

Немая пауза. Мужик стоит с лицом а-ля мем «Ты чаво наделал?» и смотрит на 4840 рублей, затем на меня, затем снова на деньги.
Я: Пожалуйста ожидайте. *Поворачиваюсь к женщине* Что для вас?
Ж: А мне уже ничего и не надо. Слишком долго работаете!
Я: Мне очень жаль…
Поворачиваюсь, а мужик уже уходит в даль. Даже кофе не забрал.

P.S. Когда перед вами явный мошенник, и вы это знаете, то не нужно прямо в лоб его обвинять в том, что он мошенник. Это может вызавть дополнительные проблемы в виде скандала или «Ты в чём меня обвиняешь, брат?»… Просто будьте бдительны и соблюдайте кассовую дисциплину. А также можете посмотреть кучи роликов из интернета с такими мошенниками, чтобы по общим признакам распознавать мошенника. Если вас начинают торопить, не торопитесь. Если вас начинает отвлекать другой покупатель, скажите ему, что в порядке очереди, и просто игнорируйте его, пока до него не дойдёт его очередь. Если мошенник начинает утверждать, что он таки дал вам купюру, а на самом деле нет, то предложите ему посмотреть камеры. Если же он скажет, что он торопится, то предложите ему зайти позже. Если он требует своих денег, то стойте на своём. Если к нему подключился свидетель, который «видел, как вы убирали купюру», то предложите посмотреть камеры и ему. Главное не сдаваться, не боятся, и не поддаваться на провокации, и стоять на своём. Даже если потом окажется, что вы действительно убрали купюру и перед вами был не жулик, то дешевле обойдётся извинится, а не платить недостачу в кассу из своего кармана.

Немного о самих метках

Про алгоритм выбора Activity при сканировании метки можно почитать

. Вкратце можно сказать, что ОС выбирает Activity на основании содержимого метки. Для гарантированного запуска нашего Activity нужно воспользоваться

(Android Application Records), что обозначает просто запись названия пакета приложения на метку. С помощью данного способа можно было бы гарантированно запускать разблокировку, но у меня не было под рукой меток, которые поддерживают стандарт NDEF. Поэтому я идентифицирую их по уникальному

Нет простой возможности разблокировки

Опять же, по соображениям безопасности приложение на устройстве не может просто взять и разблокировать экран защищённый каким-либо методом (пароль, пин, паттерн и др.). На данный момент существует 2 стандартных решения, которые позволяют разблокировать экран:

  1. Класс KeyguardManager.KeyguardLock.
  2. Флаги окна FLAG_DISMISS_KEYGUARD и FLAG_SHOW_WHEN_LOCKED.

Особенности копирования ul-карт

Узнать тип клонируемой карты можно нажав «?» рядом с типом карты. Если это UL-карта, то никаких дополнительных действий не потребуется — UL-карта копируется наиболее просто.

Внутреннее устройство UL-карт отличается от CL и PL. Данные на карте адресуются постранично, размер страницы — 4 байта, ключей авторизации нет, шифрование отсутствует. Чтение данных производится командой блочного чтения с указанием номера начальной страницы: по команде читаются 4 страницы, длина считанных данных 16 байт, т.е. длина считанных 4 страниц равна длине одного блока.

Считать одну страницу — нельзя, нет команды 🙂 Запись данных можно производить как командой страничной записи, так и командой блочной записи, но из блока будут записаны только первые 4 байта. Т.е. налицо некоторый идиотизм: чтение данных производится блочной командой, а запись — страничной, но что имеем — то имеем 🙂 На страницах 0…1 хранится UID карты вперемешку с BCC1. На странице 2 хранится BCC2, лишний и никому не нужный байт INT, а также 2 байта управляющего слова LOCK.c2rw08

Установка битов LOCK делает соответствующую страницу доступной только по чтению, причём единожды установленный бит сбросить не удастся — OTP зона, однако (One Time Programming). Такой же особенностью обладает страница 3:

Подробности внутреннего устройства UL-карт можно посмотреть в соответствующих мануалах.

Для копирования UL-карты следует установить UL-режим, считать оригинал и записать его на RW-карту. Для того, чтобы карта считалась полностью, в меню следует активировать пункт «Read full data«: после этого карта всегда будет считываться полностью, независимо от установок активности страниц.

Для того, чтобы записались все страницы, т.е. копия была полной, требуется разрешить запись страниц с помощью кнопочек, рядом с соотв. полями данных. Если какие-то страницы записывать не требуется — деактивируем их. После этого записываем данные («Write card«) на UL-RW.c2rw09

Собственно и всё. Если требуется подкорректировать UID, то исправляем данные в страницах 0 и 1, затем нажимаем кнопку «Fix!«, чтобы правильно сформировать байты BCC1 и BCC2, и после этого записываем данные в RW-карту. Также данные можно перенести в обычную UL-карту, но, разумеется, страницы 0-2 скопированы не будут (2я страница не будет скопирована целиком).

Пишем обходные пути

Так как Android API не предоставляет нам красивых решений для разблокировки, то придётся писать

костыли

обходные пути.

В итоге было написано базовое приложение реализующее 3 метода разблокировки. Решил назвать его NFC Unlocker (ссылки на Google Play и исходники в конце поста). Реализованные обходные пути могут быть не стабильны, но это и так понятно исходя из их названия.

После чтения метки ОС должна запустить наиболее подходящее Activity. Поэтому воспользоваться BroadcastReceiver’ом не получится. Далее я опишу эти методы.

Про копирование mifare classic и нехороших людей

Давно я подзабил на дела ЖЖ-шные, до сих пор никак не развернусь на хабре и руки не доходят допилить стандалон, но иногда происходят такие вещи, от которых хочется рычать, зубами стучать и за жопу прикусывать. Вот и сейчас.

Итак, для многих уже не секрет, что появились карты Classic, у которых возможно переписать нулевой сектор. Продают их кетайцы (по крайней мере, я знаю одного) и откуда они, карты эти, взялись — неизвестно. Возможно, это какая-то небольшая партия «обычных» немного неудавшихся китайских классиков, а возможно и целенаправленно изготовленная. Я больше склоняюсь ко второму варианту.
Работают эти карты шикарно. По крайней мере с метро у меня не возникло вообще никаких проблем. С автобусами тоже (там, правда, по традиции все еще проще можно сделать — в конце поста расскажу как). Да и с электричками, как поговаривает народ в теме, все замечательно. Ну это и понятно — серийник меняется, все рады, поют и танцуют.

А теперь о жопокусательном. Некоторые не очень хорошие товарищи (например Захват криптоключей Mifare и копирование ключей домофонов IronLogic своими руками / Хабрmifare) толкают эти китайские карты, обычный ридер ACR122 и софт, сляпаный из libnfc, mfoc и mfcuk за какие-то баснословные деньги. А это должно быть бесплатно.Яздесь главный мифейрщик,я сказал — я сделал.

Посему, расклад такой:
1. Карты покупаем у китайцев. Мыло: ouyangweidaxian@live.cn Цена и количество — как договоритесь. У меня получилось 5 карт, каждая по цене ~1000 рублей. Народ, вроде, уламывал его на 2. А кто-то покупал много и получалось дешевле. Возможно, есть и другие источники, пишите в комментарии. Этот проверенный мной лично.
2. Ридер ACR122 покупаем, например, тут. Хорошая контора, дай б-г им здоровья. Если до китайцев ехать ближе, чем до Зеленограда, то берите на ебэе. Выигрыш в цене — 150 рублей. Для особо замороченных могу порекомендовать как-то надыбать Touchatag. Ридеры, по сути своей, те же, а стоит дешевле.
3. Софт. На сегодня есть оффлайн две методики восстановления ключей: «Dark Side attack», реализуемая программно в mfcuk и «Nested attack», реализуемая в mfoc. Весь софт можно бесплатно скачать из репозиториев и собрать на какой-нибудь убунте за 15-20 минут, не проблема. Вот и получили мы готовый тулчейн для ломки классиков.
Так как я недавно начал потихоньку портировать и немного допиливать libnfc в MSVC чисто для своих рабочих и хобби проектов, то для простоты и удобства я выкладываю все эти тулзы, собранные в MSVC (под виндой, ессно) с моей сборкой libnfc (внимание, она рассчитана только на работу с ACR122 и его клонами!). Вот тут их можно скачать.

Проблемы NFC:  Как перевести деньги с мтс на мтс

Тулзы готовы к работе сразу же:
mfclassic — читает и пишет дампы, в том числе на китайские клоны прям сразу с заменой серийника,
mfcuk и mfoc — выковыривают ключи,
mfsetuid — небольшая тулза из libnfc для замены серийника китайских клонов и восстановления убитых клонов, если как-то получилось карту запоганить (например, неправильно записав чексумму или еще что-нибудь в нулевой блок).
Как с ними работать можно почитать в документации по ссылкам на проекты, которые я давал выше, это уже сами, без меня. Да, собраны тулзы на скорую руку в дебаг режиме и немного коряво, но задачи свои они выполняют.

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

Так, говна вбросил. Теперь вброшу плюшек:
1. Скоро (надеюсь) выложу универсальную тулзу для работы с классиками под винду: ГУИ, интегрированные mfoc и mfcuk, работа с проектами, редактор контетна по шаблонам примеры, работа с клонируемыми китайскими картами. Т.е. вы сами сможете взять нужную карту (например метро), вычитать ключи, в удобном редакторе подправить ее тип, кол-во поездок и т.д. и склонить на китайскую карту. Вот так.
2. Есть немножко физической халявы в МОСКВА Г, которую можно получить, приложив правильно мифейровый рычаг. Следите за постами, обязательно расскажу чуть позже. Думаю, это как раз будет мой первый пост на Хабре.
3. Как я и обещал выше, что касается автобусов в частности и МосГорТранса в целом, все очень просто. Покупаете в кассе настоящий бесконтактный билет на автобус (как ни странно, это классик а не ультралайт) и заправляете его несколькими поездками. Приходите домой, выковыриваете ключи и сливаете живой дамп. Потом расходуете поездки и заливаете дамп обратно. И так до бесконечности. Самый тупой и простой способ. Но делаете все на свой страх и риск, так как это — нарушение закона.Эксперимент экспериментом, а ездить по такому билету все же не надо. Законы надо уважать. А МосГорТрансу, который интересуется и негодует, рекомендую провести ревизию безопасности в своих системах и все поправить, чтобы таких досадных казусов больше не случалось. Наймите, в конце-концов нормального программера. Или договоритесь с нормальной конторой. И бабла попилить сможете, и безопасность подлатаете как следует, чтоб все остались довольны.

Вот вроде и все. Жду ваших комментов.

Сделаем свою реализацию

Самым идеальным вариантом для меня была интеграция со стандартным экраном блокировки. Хотелось, чтобы можно было прямо из него сканировать метки и авторизоваться, а если метки нет, то можно было бы использовать пароль как резервный вариант.


Перед тем как начать делать свою реализацию я определил две причины, по которым автор NFCSecure сделал своё приложение именно так, как оно работает сейчас, а не как задумал я. Опишем эти проблемы и пути их решения в разработанном мною приложении.

Сканер меток работает не всегда

А точнее он не работает как минимум в двух случаях, которые нас интересуют:

  1. Когда экран выключен.
  2. Когда мы находимся на экране блокировки.

Я предполагаю, что в этих случаях сканер не работает по соображениям безопасности. После сканирования метки запускается наиболее подходящее приложение, и неизвестно что это приложение захочет сделать. Для примера, Google Wallet (судя по видео) требует пин-код и выбор карты перед тем как приложить устройство к терминалу.

Правила работы сканера находятся в системном приложении NfcNci.apk. Там то и находится константа которая определяет в каком состоянии должен быть девайс, чтобы работало сканирование (можно почитать здесь). Естественно эту константу нужно изменить.

Многие разработчики выкладывают на xda-developers уже готовые модифицированные файлы NfcNci.apk под нужный вам девайс, поэтому я просто взял готовый файл и заменил им приложение на моём устройстве.Константе можно установить как минимум одно из двух значений, которые позволят сканеру считывать метки при заблокированном экране:

  1. Сканер работает при выключенном экране.
  2. Сканер работает при включенном экране и даже с активной блокировкой.

Первое решение

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

Установка

  1. Скачиваем Анлокер и запускаем установочную программу. Выбираем русский язык.
    Захват криптоключей Mifare и копирование ключей домофонов IronLogic своими руками / Хабр 
  2. На следующем этапе нажимаем кнопку «Далее».
    Захват криптоключей Mifare и копирование ключей домофонов IronLogic своими руками / Хабр 
  3. Принимаем лицензионное соглашение.
    Захват криптоключей Mifare и копирование ключей домофонов IronLogic своими руками / Хабр 
  4. Важно! Вместе с программой идет Delta Toolbar — мы не советуем его устанавливать т.к. это совершенно ненужная программа, которая будет только засорять ваш компьютер. Нужно снять галочки, разрешающие установку этого тулбара.
    Захват криптоключей Mifare и копирование ключей домофонов IronLogic своими руками / Хабр 
  5. Выбираем папку установки программы. Можно оставить значение по умолчанию C:Program FilesUnlocker либо выбрать другую папку, в которую вы обычно устанавливаете приложения.
    Захват криптоключей Mifare и копирование ключей домофонов IronLogic своими руками / Хабр 
  6. Выбор компонентов для установки. Мы рекомендуем не снимать галочки — оставить все как есть и нажать «Установить».
    Захват криптоключей Mifare и копирование ключей домофонов IronLogic своими руками / Хабр 
  7. По завершении нажмите кнопку «Готово».
    Захват криптоключей Mifare и копирование ключей домофонов IronLogic своими руками / Хабр 

Установка флага для окна activity

И всё-таки флаг нам может помочь в реализации задуманного. Данное решение наиболее чистое, так как не требует рута и использует флаги окна, которые вполне себе разрешены. Для того, чтобы флаги сработали придётся очистить пароль методом DevicePolicyManager.


Алгоритм разблокировки таков:

  1. Пользователь сканирует метку, запускается наше Activity.
  2. Чистим пароль:
    ((DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE)).resetPassword("", 0);
  3. Ставим флаг окну нашего Activity:
    getActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
  4. Завершаем Activity в методе onAttachedToWindow, так как именно в нём к окну уже применён наш флаг.
  5. В методе onDestroy восстанавливаем пароль пользователя.

Флаги окна

Флаги нужно устанавливать на родительское окно Activity. FLAG_DISMISS_KEYGUARD разблокирует экран только в том случае, если он не защищён. После закрытия окна блокировщик не будет восстанавливаться пока не выключится экран. FLAG_SHOW_WHEN_LOCKED лишь спрячет блокировщик (даже защищённый) и после закрытия окна он сразу же перейдёт на передний план.

То есть, опять же, эти флаги не смогут разблокировать защищённый экран. Максимум что можно сделать — показать своё окно поверх него.

В данном случае, чем меньше давать возможностей разработчику, тем больше повышается безопасность самой ОС. Возможности флагов, особенно FLAG_SHOW_WHEN_LOCKED, позволяют отображать своё приложение поверх блокировщика не нарушая безопасности системы. Но, к сожалению, нас это не устраивает.

Оцените статью
NFC в смартфонах