Скопировать UID Mifare и пройти по нему в универ

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

А в чем проблема?

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

И что мы будем с этим делать?

Ну, первое, что приходит в голову — забить найти способ скопировать карточку на какой-нибудь брелок, прицепить его к связке ключей и отлично им пользоваться. Правда, никто нам просто так скопировать карточку не даст — данные шифрованы. Да и вообще —  ну его нафиг, слишком небезопасно. Давайте копировать только то, что нужно пропускной системе — UID карточки?

О, давай! А как?

Итак, у нас есть карта с чипом для бесконтактных платежей:

Чип в ней работает на технологиях Mifare, то есть — обычная NFCшка. Значит — нам нужен ридер, который умеет такие карточки читать и писать. Например, ACR122U.

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

Любой брелок  подойдет, разве нет?

Хм, не совсем. Поскольку, пропускная система читает именно UID, изменять мы должны именно идентификатор брелока, а настоящие Mifare — девайсы такого не умеют: у них UID прожжен лазером где-то в ROM. Значит, будем искать (и находить) не совсем настоящие Mifare:

С виду — ничего необычного. На самом деле — это Mirafe Zero, которые отличаются от обычных тем, что нулевой сектор (это как раз место, куда пишется UID) не прожжен и вообще — обычная flash-память, которую можно читать и писать. Пробуем?

Давай уже что-нибудь скопируем, а?

Идет. Берем наш ридер, цепляем к USB, ставим драйвера и вот эту утилитку, выбираем наш ридер из списка и пытаемся прочитать приготовленный брелок

Ага, работает. Теперь — тыкнем кнопку read и прочитаем нулевой блок брелока

И тоже работает! Теперь — посложнее: бросим-ка на ридер нашу карточку и попробуем сделать то же самое
Упс… Облом. На самом деле, проблема только в том, что карточка, в отличие от пустого брелока честно защищена ключом доступа, без которого нам кроме, собственно, UID, ничего прочитать не светит

И что делать?

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

Давайте посмотрим на данные, которые получилось прочитать из нулевого сектора. Первые 4 байта (1EF0E801) — и есть наш UUID. А поскольку остальное содержимое блока пропускную систему интересует мало (и вообще, поди попробуй его считай без ключа-то), записанные там данные могут смело оставаться на нашей совести. Давайте попробуем вписать в начало блока нужный нам UID? 

Облом?

Ну, не то, что бы… Контрольную сумму, все-таки, никто не отменял. А поскольку байтики в UID изменились, старая CRC, хранящаяся в пятом байте данных блока нам больше не подходит.

Не подходит — пересчитаем. Идем к ближайшему онлайновому калькулятору CRC8 и получаем для нашего UID честные «F5», как правильную CRC. Вписываем это значение в пятый байтик и — шьем еще раз

Прошились. Теперь, по идее, для турникета, который умеет читать только UID не существует принципиальной разницы между моей банковской картой с платежными данными и пустой NFC болванкой. К слову сказать, полевые испытания, открывшийся замок турникета и шокированная служба охраны активно подтверждают мое смелое заявление. Ура?

Искренне Ваш, объясняющий охраннику, что он не террорист, GrakovNe