Как сделать клон карты тройка

Добавил пользователь Дмитрий К.
Обновлено: 05.10.2024

Полностью перезаписываемые карты найти легко, стоят несколько долларов за штуку, но я не уверен что их можно приобрести по одной, так что придется отдать 100-200 долларов за ~~10-15 штук.

Про ПО уже написали выше, все открыто и бесплатно.

Что вызывает поистине невероятное удивление, это то, как государственные предприятия (мосгортранс и метрополитен) умудрились не попилить всех денег что были выделены, а приобрести хорошо работающее ПО. Стоп-листы в метрополитене работают отлично, в т.ч. если ты вошел в метро, а через 35 минут вошел на другой станци, поезд до которой едет не менее 40 минут, карте твоей скорее всего настанет конец. Обновления стоп-листов в турникетах метро происходят примерно раз в 10 минут, так что о внесении карты в стоп-лист узнаешь довольно быстро. Естественно нет смысла стоять и тупить "а че это оно не пускает".
В общем система достаточно качественная, что удивляет. Клонировать лимитные карты тоже нет смысла, т.к. они в стоп-лист попадут при первом же использовании второй карты. (точнее не при первом использовании, а через ~~15 минут после первого её использования).

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

Вообще можно было ставить даже и не вайфай, а 3G/4G-модем, либо и то и другое вместе, и предоставлять пользователям в транспорте платный интернет (по той же карте "тройка"), но это уже сооовсем другая история.

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

Reliance upon others is weakness. For the strong. But strength for the weak.
-Chronicle of The Metal Age.


LightAngel


Всем привет, сегодня мы поговорим о карте “Тройка”. А именно я расскажу вам о том, как можно с помощью нее бесплатно ездить. Осуществляется это с помощью чипа Mifare Plus , этот чип имеет в себе уязвимость, благодаря чему мы и сможет совершить этот способ бесплатных поездок. Также немаловажным фактором является то, что все данные хранятся на этом же чипе.

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

Начнем:

Некоторые ребята заинтересовались этим еще в далеком 2016 году. И за это время они создали интересную программу.

Программа носит названия Troika Dumper , информацию о ней вы сможете найти GitHub .

Основной для создания данного приложения использовалось приложение “Мой Проездной”, его разобрали по кусочка и собрали его то, чем мы будем пользоваться.

Принцип работы:

С помощью этой программы мы сможете выполнять любые действия с памятью описанной карты. Чтобы воспользоваться этими функциями, вам понадобится телефон с операционной системой Андроид выше версии 4.4, а также NFC которые будет иметь чип, а также поддерживать карты от Mifare .

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

Как создавалось:

После того как ребята разобрали программу “Мой проездной”, то они изменили большое количество параметров в это приложение, также удалили проверку SLL -сертификата, который был необходим, чтобы можно было присоединиться к серверу, а это означало, что перехватывать трафик можно было куда эффективнее. После этих манипуляций выяснилось, что абсолютно вся информация по карте хранится на ней же. Поэтому программа может сохранить все данные карты, после чего использовать их для дальнейшего использования.

Пользование программой:

Чтобы начать использовать ее, вам всего лишь необходимо запустить ее, после чего поднести вашу карточку. Как только это будет выполнено, на экране вы увидите некоторую информацию.

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

Администрация форума не имеет отношения к пользователям форума и к публикуемой ими информации. Пользовательское соглашение

Фото: Василий Кузьмиченок / ТАСС

Обвиняемые свою вину не признали, приговор будет вынесен 31 августа.

Проникновение в периметр

Представитель ЦППК от комментариев отказался.

В дальнейшем, утверждает обвинение, используя полученные данные, обвиняемые самостоятельно пополняли проездные билеты (в ходе следствия было изъято более 200 бесконтактных смарт-карт), которые затем продавали, а также использовали сами. В частности, значительная часть билетов была сделана для проезда по Горьковскому и Ярославскому направлениям, где живут двое из обвиняемых.

Фото:Артем Геодакян / ТАСС

При этом один из адвокатов подсудимых указал, что в материалах уголовного дела отсутствует судебное решение о прослушивании телефонных переговоров.

Много не заработать

Используем Apple Pay, Android Pay, Mastercard Paypass, Visa PayWave и карту Тройка в качестве пропуска на работу

TL;DR В статье описывается процесс создания системы контроля доступа (СКУД), в которой в качестве идентификатора могут использоваться карты Тройка, любые бесконтактные банковские карты EMV, а также телефоны с Apple Pay и Android Pay. Управление системой происходит через Telegram-бота.

Основные задачи системы

  • Избавиться от лишних карт — в качестве идентификатора используется то, что уже есть у пользователя: транспортная карта, телефон или банковская карта. Какой идентификатор использовать — каждый выбирает сам. Система работает со всеми типами идентификаторов одновременно.
  • Избавиться от бюро пропусков и сложных программ управления — нам надоело выдавать и забирать карты у пользователей, держать отдельные компьютеры для управления пропусками, изучать переусложненные программы.
  • Управление через Telegram — заведение и удаления пользователей происходит удаленно и не требует компьютера.

Пожалуйста, не нужно больше карт!

Распухший от карт кошелек

— У вас уже есть наша карта?
— Пощадите…

Сейчас каждый хочет всучить вам свою карту: магазины, фитнес-клубы, парковки, бизнес-центры, VIP-скидки-баллы-накопления. Предлагать человеку носить с собой еще одну карту просто унизительно. А учитывая, что карты стандарта EM-Marine (125kHz), которые популярны в системах контроля доступа на территории СНГ, имеют толщину в три раза больше обычных ISO 7810 — это втройне унизительно.
Поэтому первое требование к нашей системе — никаких дополнительных карт.

Сравнение толщины карт EM4100 EM-Marine и ISO7810

Сравнение толщины карт Em-Marine и ISO7810

Помимо физических размеров, карты EM-Marine технологически отсталые. Такую карту можно легко клонировать с расстояния полуметра прямо из кармана прохожего.

Все СКУД неудобные

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

В некоторых случаях сложные СКУД необходимы: в крупных зданиях с множеством зон доступа, турникетами, охраной, временными пропусками.

В случаях, когда контролировать доступ нужно к одной или двум дверям, такие усложнения не оправданы. Даже содержание отдельного компьютера с программой под СКУД — перебор для нас.

У нас нет отдельных сотрудников, занимающихся выпуском пропусков, нет временных пропусков и охраны. Администрирование системы должно быть настолько простым, чтобы любой новый человек мог быстро её освоить без инструкций. Так как ответственного за СКУД человека может не быть на месте, управление системой должно быть удаленным.

Технически карта выполнена на базе чипа Mifare Plus, работающего в режиме SL1 — режим эмуляции Mifare Classic 1K. На обратной стороне карты находится 10-значный номер, который используется для удаленного пополнения баланса карты. Этот номер удобно использовать в качестве идентификатора в СКУД.


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

Apple/Android Pay и банковские карты

Apple Pay, Android Pay, Samsung Pay, Visa PayWave, Mastercard PayPass — все это коммерческие названия платежных инструментов, которые работают по одному протоколу EMV Contactless Specifications.

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

Существует заблуждение, будто POS-терминал должен отдельно поддерживать Apple/Android Pay, поэтому пользователи предпочитают искать на кассе специальную пиктограмму, чтобы быть уверенным, что их платежный инструмент поддерживается. На самом деле, почти везде, где поддерживается бесконтактная оплата, будет работать любое устройство.

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


Некоторые карты не передают реквизиты Cardholder Name и лог транзакций, но PAN (номер карты) передается всегда. Этот номер не изменяется на протяжении всего срока действия карты.

Поэтому именно PAN мы решили использовать в качестве идентификатора для пропуска в СКУД. Для простоты и большой приватности, было решено использовать последние 10 цифр от номера карты. Таким образом, формат идентификатора получается такой же длины, как и номер карты Тройка.

В итоге, в базе данных идентификаторов мы имеем однородные записи длинной в 10 цифр, без необходимости дополнительно помечать где карта Тройка, а где EMV-карта.

Читаем EMV-карты на коленке

Читать EMV-карты можно любым NFC-ридером, поддерживающим передачу произвольных APDU-команд. Для этого не требуются промышленные сертифицированные ридеры, подойдет любой модуль для Arduino за $3

Чтобы изготовить прототип считывателя, мне потребовалось бегло изучить протокол EMV. Под спойлером — краткий разбор протокола EMV с примерами чтения на Arduino и компьютере.

Для чтения EMV карт подойдут такие устройства:

Описанный ниже процесс не является корректной реализацией протокола EMV. Приведенные команды APDU содержат ошибки и нарушают рекомендации EMVco, из-за чего могут не работать с некоторыми картами.

Для изучения протокола EMV рекомендуется читать официальную документацию, которую я, к своему стыду, почти не читал.

Приведенные APDU-команды будут одинаковыми не зависимо от выбранного оборудования. Однако в случае с PC/SC ридером не нужно заботиться о низкоуровневых командах, настраивать модуляцию и т.д.

Для того чтобы послать произвольную APDU команду на карту, достаточно такого когда:

Начало коммуникации — команда SELECT (PPSE)

Начало общения с EMV-картой всегда происходит с чтения файла PPSE (Payment System Environment) командой SELECT.

APDU-команда SELECT PPSE

Старт платежного приложения — SELECT AID

В ответ на SELECT PPSE карта должна вернуть FCI (File Control Information) со списком приложений, существующих на карте. Помимо платежных приложений (VISA, MasterCard, AmericanExpress) карта может содержать неплатежные приложения, используемые для других нужд.

Ответ карты VISA на SELECT PPSE


Из всего этого нас интересует только идентификатор платежного приложения (AID). В данном случае, это значение A0000000031010, означающее Visa International.

AID помечается маркером 4F. Вторым битом после маркера следует длина данных, в нем содержащихся. Несмотря на то, что длина AID может варьироваться от 5 до 16 байт, в большинстве случаев она равна 7 байтам. Поэтому для простоты поиска AID в ответе, мы будем искать маркер 4F 07 и считать 7 байт после него как AID. Такой подход очень примитивный и может не работать в случаях, если длина AID будет другой, но для нашей задачи это не важно, так мы скорее всего никогда не столкнемся с картами, отличными от Visa и MasterCard. Поэтому наш самодельный парсер PPSE-ответа можно упростить до такой логики: если ответ начинается с 6F, заканчивается на 90 00 и содержит внутри последовательность 4F 07, ответ считается корректным.

Некоторые популярные AID


Получив значение AID, его нужно запустить командой SELECT. В данном случае мы запускаем приложение Visa International, полученное из ответа на PPSE SELECT

APDU-команда SELECT AID

Обработка PDOL (Processing Options Data Object List)

В ответ на запуск платежного приложения карта может затребовать от считывателя PDOL (Processing Options Data Object List). Это набор параметров POS-терминала — поддерживаемые протоколы и стандарты, валюта, в которой будет производиться расчет, дата, случайное число для криптографии, и так далее.

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

Ответ карты на старт платежного приложения. Содержит запрос PDOL.


Пропустим этот ответ через парсер:


Вот тот же ответ, обработанный более умным парсером. Видно каждый параметр PDOL:


Разберем запрос PDOL подробнее

Карта ожидает ответ на PDOL в том же порядке, в котором следуют запросы, и ровно той длины, которая указана после каждого параметра PDOL. Если сложить длину всех параметров (последний байт каждого параметра), получится 33 байта. Значит карта ожидает от считывателя PDOL длиной в 33 байта.

Так как мы не собираемся списывать с карты деньги, наша задача — сформировать самый простой из возможных ответ PDOL, который удовлетворит карту. Если наш ответ не понравится карте, она ответит кодом 6985 Conditions of use not satisfied.

Экспериментальным путем я выяснил, что почти на все запросы PDOL можно ответить нолями, кроме Terminal Transaction Qualifiers (TTQ). В случае с VISA, нам нужно убедить карту в том, что терминал соответствует спецификации VCPS 2.1.1. Для этого ответ на TTQ должен выглядеть так:


Подробнее про формат TTQ здесь.

Карты MasterCard, которые мне довелось испытать, позволяли игнорировать PDOL и отдавали PAN-номер без корректного ответа на PDOL.

Вот как будет выглядеть минимальный рабочий ответ на запрошенный выше PDOL:

Поиск PAN-номера

PAN-номер может содержаться в трех местах:

  • Track 2 Equivalent Data — маркер 57. Может иметь длину от 0 до 19 байт, но обычно всегда равен 13 (19 байтам). Поэтому как маркер можно использовать последовательность 57 13. Первые 8 байт всегда содержат PAN-номер.
  • Application Primary Account Number (PAN) — маркер 5A. Всегда имеет длину 8 байт, поэтому можно искать как маркер последовательность 5A 08. Содержит только PAN номер.
  • Track 2 Data — маркер 9F 6B" — . Длина обычно 13 байт. Содержит PAN номер и другую информацию.


И парсим все ответы на предмет маркеров 57 13 либо 5A 08. Найденные 8 байт карты можно дополнительно чекнуть на контрольную сумму с помощью Алгоритма Луна.

Если номер валидный, берем его последние десять цифр.

В итоге наш примитивный алгоритм чтения PAN-номера можно изобразить в виде блок-схемы


Первый прототип

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

Считыватель Parsec

С самого начала мы не хотели городить кустарные поделки на arduino или raspberry pi, поэтому стали искать решение на базе промышленного оборудования.

Так как на рынке готовых решений не существует устройств даже примерно похожих на то, что нам было нужно, мы стали спрашивать у всех производителей СКУД, кто сможет реализовать наши извращенные фантазии в своем оборудовании.



Parsec PNR-P03E позвоялет запрограммировать любой нестандартный алгоритм чтения карт

Большинство RFID-считывателей, которые доступны в продаже, поддерживают только определенный формат идентификаторов. Например Mifare, HiD iClass и т.д.

Нам же требовалось, чтобы считыватель поддерживал одновременно несколько форматов карт, и реализовывал нестандартный протокол чтения EMV-карт.

Ключевые особенности считывателя PNR-P03E


Считыватель самостоятельно определяет тип карты и выполняет считывание нужной области памяти. Если определить тип карты не удалось, считыватель игнорирует её. Прочитанная область памяти конвертируется в десятизначный идентификатор и передается на контроллер.

Контроллер БОРЕЙ

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

Часто контроллеры СКУД состоят из нескольких блоков управления и компьютера с базой данных. Мы принципиально не хотели держать отдельный компьютер и искали компактное решение в виде одного устройства, которым можно управлять через API для интеграции с Telegram-ботом.

Так мы нашли контроллер БОРЕЙ от компании ИТРИУМ.



Плата контроллера БОРЕЙ в настенном корпусе

Устройство работает под управлением Linux на базе ARM-процессора.

Основные достоинства устройства, которые редко можно встретить у других контроллеров:

  • Полностью автономный — все функции выполняет одно устройство. Для управления не нужно дополнительных программ или отдельного компьютера. База данных хранится на SD-карте. При отключении интернета контроллер продолжит работать.
  • Web интерфейс и REST API — возможность управлять контроллером через браузер и интегрировать с Telegram-ботом через API. Позволяет управлять пропусками удаленно.
  • Подключение по Ethernet — устройство подключается в IP-сеть. Имеет встроенный коммутатор на 2 порта.
  • Идентификаторы произвольной длины до 64 бит — возможность интегрировать контроллер с нестандартными идентификаторами разной длины. Позволяет иметь гибридную систему с идентификаторами разной длины.

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

Если доступ запрещен, контроллер посылает сигнал индикации на считыватель, и тот горит красным цветом и пищит о том, что доступ не разрешен.

Управление контроллером

Контроллер подключается в сеть c помощью Ethernet-кабеля. Начальная настройка требует только задать IP-адрес устройства. Никакого программного обеспечения, помимо браузера, не требуется.


Создание нового пропуска в веб-интерфейсе контроллера БОРЕЙ

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

Бюро пропусков в Telegram

Чтобы каждый раз не обучать нового администратора, как пользоваться веб-интерфейсом контроллера, мы решили создать Telegram бота, через которого будет происходить добавление/удаление пропусков. Это возможно благодаря наличию в контроллере БОРЕЙ REST API.

Администрирование СКУД через Telegram-бота

В процессе работы над системой мне часто задавали одни и те же вопросы, которые наверняка возникнут и в комментариях. Я собрал самые популярные:

Иллюстрации к статье — aquamine
Помощь в написании кода — ValdikSS
Написание Telegram бота — Alexey Tsverov
Разработка прошивки считывателя — компания Parsec и лично Леонид Стасенко
Помощь в настройке контроллера — компания ИТРИУМ и лично Глеб rgmih Рыбаков

Читайте также: