«Вездеход» для домофона на EM4305 и ридере Proxmark 3

Тут случай случился, из серии «не было бы счастья, да несчастье помогло» 🙂 Потерялся пропуск от офиса, но сохранился UID, и до конца рабочего дня надо было сделать копию пропуска, чтобы избежать объяснялок об учёте рабочего времени охране. Казалось бы, любой «ключник» делает дубликат карты E-Marine на щелчок пальцев, однако, по циферкам UID местные ключники ничего создать не могут — вот, продали пару болванок по цене «готового изделия», в которую самим надо записать UID утерянного пропуска.

Положение  для  чтения EM4305 надо ещё поискать…

Бывает так, что в хозяйстве есть множество «продвинутых» ридеров бесконтактных карт, но когда доходит до дела, не никакого толка от всего этого 🙂 Наболее подходящим оказался китайский клон Proxmark 3: это поделие наиболее дружественно к пользователю и знает много карт. Для начала следует выяснить, что за болванку Вам продали: может где-то есть продвинутые продавцы, но в наших краях знать товар «лицом» — дикость, название «метка домофонная» — это всё, что нужно знать о брелке 🙂 Вводим команду lf search и смотрим на результат.

Болванка T5577

Если поиск показал, что найден чипсет T55xx, то это счастье: чипы T5555/57/77 хорошо читаются, софта под них много, клонирование на проксмарке делается одной командой lf em 410x clone —uid 0F0368568B. Но такие болванки по какой-то причине не попались. Наш поиск вообще закончился ничем — нет никакого чипа в ридере. Чтобы из чипа Proxmark-ом что-то там считалось, надо ещё найти положение, и то, что брелок на первом фото лежит где-то там под антенной — это не просто так 🙂

Автоматический поиск типа болванки закончился неудачей

В нашем случае выяснилось, что в брелок уже записан какой-то UID, но чипсет неизвестен. Может так случиться, ни UID, ни чипсет не будут известны, но в этом нет ничего страшного: для клонирования используется только 2 типа ИМС: 1) T55xx, которые легко определяются , и остальные — 2) EM4x05, т.е. тип брелка можно определить методом исключения. Вводим команду lf em 4×05 info -p 00000000 (обычное значение пароля — нули).

Команда info с указанием типа, лучше определяет тип брелка

Если нет ответа, то следует изменить положение брелка: Proxmark их плохо видит (зависит от прошивки FPGA), но ридеры на дверях считывают EM4305 без проблем. Давать команду info не обязательно и можно перейти сразу к чтению дампа.

Дамп всех регистров EM4305

Считываем дамп данных из брелка: ничего интересного, но пусть будет на всякий случай — отклик на команды EM4305 лишний раз подтверждает с каким чипом работает ридер. Теперь подошли к главному — записи UID в формате E-Marine. На самом деле это побочная фича чипа EM4305, режим PIGEON.

Выдержка из мануала на ИМС EM4305

В мануале сказано, что при установке бита CO26 в регистре конфигурации R04, чип в качестве UID-а будет выдавать последовательность из 64-битов, записанных в регистрах R05, R06, R07. Ага, ща… нет ничего проще…

Устройство UID E-Marine

Дело в том, что UID E-Marine не так уж и просто устроен: мало того, что при передаче каждая тетрада UID дополняется битом паритета, так паритет считается ещё и по колонкам, вот как на картинке. Также важен порядок передачи битов. Встроенная возможность расчёта UID в командах Proxmark для EM4305 отсутствует, поэтому пришлось написать свой калькулятор: тут всё просто, вводим UID — получаем значение регистров.

Калькулятор UID для чипа EM4305

Значения регистров получены, и для UID=4A0013E431 записываем в брелок:
lf em 4×05 write -a 4 -p 00000000 -d 0015805F — запись конфигурации, всегда одно и то же
lf em 4×05 write -a 4 -p 00000000 -d 600515FF — 1я часть битовой передачи
lf em 4×05 write -a 4 -p 00000000 -d 20E3EA44 — 2я часть битовой передачи
Всё, пропуск готов, и он даже работает! Но самые «заметливые» должны были заметить расхождение с мануалом и калькулятором: в мануале регистр R07 указан, а в калькуляторе его нет. По факту, оказалось, что 64 передаваемых бита формируются из содержимого 2х регистров R05-R06, а не 3х, как написано в мануале.

Расчёт UID для «вездехода»

Поскольку остались лишние болванки, и в наличии есть удобный калькулятор, была сделана попытка проверить домофон на уязвимость: значение стирания данных во флэш-памяти 0xFF, а реальный ключ с таким номером — невозможен. Поэтому, для повышения надёжности, производители домофонов проверяют все номера в памяти и ключ со всеми FF в UID оказывается рабочим. Но неча домофон ругать, домофон не сейф, задача домофона — чтобы бомжи не ссали в подъезде 🙂

Скачать калькулятор можно здесь, пасс anyram.