конвертер кодов карт доступа

forum-bolid.ru

Преобразовать код карты

Как преобразовать код карточек Виганд в формат кода Dallas TouchMemory?

Для преобразования кода карточек Виганд в формат кода Dallas TouchMemory необходимо дополнить код Виганд нулевыми битами до 7-ми байт и посчитать для них циклическую контрольную сумму:
8-й байт 5-7 байт 2-4 байт 1-й байт
CRC дополнение до 7-ми байт код Вигант 01

Т.е. на примере кода 011 55982 получается следующий код:
8-й байт 7-й байт 6-й байт 5-й байт 4-й байт 3-й байт 2-й байт 1-й байт
CRC дополнение код Виганд дополнение
011 55982
05 00 00 00 0B DA AE 01

Циклическая контрольная сумма получается по правилу фирмы Dallas. Расчет осуществляется следующим образом:
Спойлер CRCTable : array [0..255] of byte = (
0,94,188,226,97,63,221,131,194,156,126,32,163,253,31,65,
157,195,33,127,252,162,64,30,95,1,227,189,62,96,130,220,
35,125,159,193,66,28,254,160,225,191,93,3,128,222,60,98,
190,224,2,92,223,129,99,61,124,34,192,158,29,67,161,255,
70,24,250,164,39,121,155,197,132,218,56,102,229,187,89,7,
219,133,103,57,186,228,6,88,25,71,165,251,120,38,196,154,
101,59,217,135,4,90,184,230,167,249,27,69,198,152,122,36,
248,166,68,26,153,199,37,123,58,100,134,216,91,5,231,185,
140,210,48,110,237,179,81,15,78,16,242,172,47,113,147,205,
17,79,173,243,112,46,204,146,211,141,111,49,178,236,14,80,
175,241,19,77,206,144,114,44,109,51,209,143,12,82,176,238,
50,108,142,208,83,13,239,177,240,174,76,18,145,207,45,115,
202,148,118,40,171,245,23,73,8,86,180,234,105,55,213,139,
87,9,235,181,54,104,138,212,149,203,41,119,244,170,72,22,
233,183,85,11,136,214,52,106,43,117,151,201,74,20,246,168,
116,42,200,150,21,75,169,247,182,232,10,84,215,137,107,53);
KeyCode: array[1..8] of byte;
KeyCode[ 8 ] := 0;

For j := 1 to 7 do
KeyCode[ 8 ] := CRCTable[ KeyCode[ 8 ] xor KeyCode[ j ] ];

Полученный 8-ми байтный код можно заносить в БД для использования в АРМ «Орион».

Источник

Копировщик RFID-меток стандарта EM-Marin

Как известно, во многих системах доступа используются карты RFID стандарта EM-Marin с частотой 125 КГц. Не исключением стал и домофон моего дома. Одна проблема – неплохо бы научиться копировать такие карты, ибо ценники на их копирование не радуют. В сети, конечно, существует довольно много схем копировщиков (да и китайцы продают свои копировщики за копейки — правда, они часто при копировании ставят свой пароль на болванки), но почему бы не собрать свой собственный копировщик? Вот об этом и нижеприведённая статья.

Начинать разработку копировщика стоит с выяснения, а на что вообще можно скопировать такие метки? Почитав форумы, можно узнать, что наиболее распространёнными болванками для копирования являются T5577, T5557, EM4305.

Теперь нужна схема. Возьмём аналоговую часть такого копировщика у RECTO и подключим её к микроконтроллеру atmega8. Дополним преобразователем уровней для подключения к COM-порту на базе max232 (желающие могут использовать ST232 или ещё что, чтобы подключится по USB, но у меня на компьютере COM-порт есть, как есть и переходник USB-COM, так что у меня такой задачи не стояло).

Получится вот такая схема:

конвертер кодов карт доступа

Что она из себя представляет? Сдвоенный эмиттерный повторитель, колебательный контур, детектор и RC-фильтры. За счёт того, что RC-фильтры имеют разные постоянные времени, сравнивая между собой уровни напряжения между каскадами можно выделять изменение сигнала RFID-метки. Данной задачей у нас будет заниматься встроенный в atmega8 компаратор. Генерацию 125 КГц сигнала у нас будет обеспечивать встроенный в atmega8 ШИМ-контроллер.

Комбинация RFID-метка – считыватель образуют трансформатор, где метка является вторичной обмоткой. Передача информации меткой производится путём изменения нагрузки вторичной обмотки. В результате в катушке считывателя (первичной обмотке) изменяется ток. Выделением этих импульсов тока и занимается приведённая выше аналоговая часть схемы. Колебательный контур нужно настроить на максимальное напряжение в контрольной точке, например, сматывая/наматывая витки катушки. Правда, говорят, лучше всё же напряжение немного меньше максимума — стабильнее работает. У меня в контрольной точке около 40 В.

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

конвертер кодов карт доступа

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

А очень просто. Примем, что номер карты по нибблам имеет вид AB CD EF GH IJ. Карта выдаёт вот что:

1) Девять единиц в начале;
2) Ниббл A;
3) Чётность ниббла A (1 бит);
4) Ниббл B;
5) Чётность ниббла B (1 бит);

16) Ниббл I;
17) Чётность ниббла I (1 бит);
18) Ниббл J;
19) Чётность ниббла J (1 бит);
20) Ниббл чётности колонок для нибблов A B C D E F G H I J;
21) Бит 0.

Считываем все 64 бита, расшифровываем и получаем 40 бит кода карты. Логично, что если самому выдать такой код, замыкая катушку карты приложенной к считывателю, мы получим эмулятор карты. Но сейчас нас интересует не он.

Карту мы читать научились, а вот как передать данные карте? Для этого нужно просто включать или выключать частоту 125 КГц в соответствии с протоколом обмена с картой. На время “молчания” считывателя карта питается запасённой энергией.

Болванки T5557/T5577 полностью совместимы между собой по протоколам записи, однако, имеют немного разные минимальные и максимальные времена импульсов (к счастью, времена T5557 перекрываются с T5577). У EM4305 протокол записи иной.

Чтобы записать T5557 я воспользовался кодом BolshoyK. В таблице ниже указаны параметры сигналов для брелока T5557.

конвертер кодов карт доступа

Запись начинается с сигнала StartGape – требуется отключить сигнал 125 КГц примерно на 300 мкс. Это сигнал карте, что сейчас ей начнут передавать данные. Дальше следует передать болванке информацию. Кодирование передаваемых данных – тот же манчестер.

Болванки T5557/T5577 и EM4305 многофункциональные и умеют разные виды модуляций, поддерживают пароли и ещё много чего. В каждой болванке на борту имеется набор блоков по 32 бита. Назначение этих блоков разное. В некоторых – выдаваемый код ключа (он занимает два блока). В других – конфигурация. В третьих – идентификатор производителя. Мы будем использовать ограниченный функционал, поэтому желающие разобраться, что значат все эти биты, могут заглянуть в документацию к болванкам (я приложил её к архиву).

Блоки собраны в две страницы (0 и 1).
конвертер кодов карт доступа

В нулевой странице есть блок конфигурации с индексом 0. Его мы и будем задавать. Для T5557/T5577 у нас будут следующие конфигурационные байты: 0x00,0x14,0x80,0x40 в соответствии с таблицей из документации (красным я отметил выбранные единичными битами режимы):

конвертер кодов карт доступа

Таким образом, у нас выбрано: частота передачи данных RF/64 (125 КГц/64), кодирование типа манчестер, выдача блоков до второго (в блоках 1 и 2 у нас будет располагаться код, выдаваемый картой). Перед записью следует отправить код операции (2 бита opcode) и один бит защёлки (lockbit). Коды операции 10b и 11b предшествуют записи данных для страниц 0 и 1 (младший бит задаёт номер страницы, старший — код записи страницы). У нас выдаётся 10b для кода операции (вся работа идёт с нулевой страницей) и 0b для бита защёлки. После передачи всех этих данных необходимо передать трёхбитный адрес записываемой страницы. Все передачи данных для T5557/T5577 ведутся от старшего бита к младшему.

конвертер кодов карт доступа

Задав код карты в блоках 1 и 2 и конфигурацию в блоке 0 можно получить дубликат RFID-метки. Как видите, всё просто.

Следующий тип болванок – это EM4305. Вот разбираться с записью этой болванки мне пришлось самому. Она также состоит из блоков по 32 бита, но назначение их иное.

конвертер кодов карт доступа

Кодирование передаваемых карте данных – по перепадам за интервал времени. Если перепад за интервал времени был, то это ноль, а если не было — единица. Конфигурационное слово хранится в 4 байте и для себя я определил его так: 0x5F,0x80,0x01,0x00 (кодирование манчестер, RF/64, выдача слова 6). В слова 5 и 6 я записываю код карты (те самые 64 бита, что выдаёт карта). EM4305 требует чтобы передача велась от младшего бита к старшему. Карта понимает, что с ней начинают обмен после выдачи ей комбинации импульсов:

конвертер кодов карт доступа
Коды команд

конвертер кодов карт доступа
Формат адреса блока

Таким образом задаётся конфигурация болванки EM4305 и её код.

Собственно, ничего большего простому копировщику и не требуется.

Я сделал несколько вариантов копировщика с разными дисплеями. Например, вот копировщик с дисплеем 1602:

конвертер кодов карт доступа

А вот видео работы копировщика на дисплее LPH9157-02:

А вот причина, по которой я заинтересовался копировщиками таких ключей — нужно было сделать много копий ключа от домофона (ждать посылки из Китая при этом тоже было лень), но ценник вот какой:

конвертер кодов карт доступа

В архиве все схемы, печатки, программы и документация на болванки. Есть версия для Arduino Nano (её нужно прошивать отдельно через программы для заливки сторонних прошивок).

Желающие могут открыть документацию на все эти болванки и реализовать поддержку паролей и иные режимы работы карт. Мне лично всё это было ненужно.

Отдельное большущее спасибо RECTO, BolshoyK и Shads — без вас я бы развлекался бы с разработкой довольно долго!

Источник

Эмулятор RFID

Эмулятор карт EM Marine

конвертер кодов карт доступа

Технология RFID

конвертер кодов карт доступа

Внешний вид RFID-меток

RFID (англ. Radio Frequency IDentification, радиочастотная идентификация) — имеет достаточно широкий частотный диапазон и достаточно большое количество различных стандартов, которые так или иначе применимы к данной технологии. Для справки: используются частоты: 125-135кГц, 400 кГц, 6.78МГц, 13.56МГц (карты метро и банковские карты), 27.125МГц, 40.68 МГц, 433.29 МГц, 869 МГц, 915 МГц, 2.45 ГГц, 5.8 ГГц и 24.125ГГц. Как видно частотный диапазон очень широкий.

Мы же будем говорить о самых распространённых и наименее защищённых картах частотного диапазона 125 кГц. Я разберу стандарт EM Marine 4102, так как именно с ним лучше всего знаком. Однако код эмулятора позволяет работать и с другими стандартами, работающими на частоте 125 кГц.

Чтобы мы могли дальше углубиться в теорию, следует рассказать пару слов о принципе работы RFID. Далее в тексте будет приводиться информация, относящаяся к стандарту 125 кГц EM Marine, прочие RFID решения устроены подобным образом.

конвертер кодов карт доступа

Считыватель, кроме информационного обмена осуществляет подачу питания. Метка из себя представляет ПЗУ, которое питается от электромагнитного поля, и после подачи питания просто отдаёт записанную информацию.

конвертер кодов карт доступа

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

Более детально о принципе работы можно прочитать в [1]

конвертер кодов карт доступа

Внутренности разобранной карты

Если разобрать карту, то можно увидеть антенну в виде катушки и чип залитый компаундом, в котором находится ПЗУ и конденсатор ёмкостью 75 пФ.

Описание протокола EM4102

Прежде, чем мы пойдём дальше, давайте разберёмся со стандартом EM4102, который мы будем эмулировать. EM4102 совместимая RFID-метка содержит 64 бита памяти только для чтения. По сути — это и есть ПЗУ, то есть информация может быть считана из неё, но не может быть изменена либо записана, проще говоря этот чип единожды прошивается на заводе. Структуру памяти метки можно посмотреть на рисунке ниже.

конвертер кодов карт доступа

Когда метка попадает в электромагнитное поле, излучаемое считывателем RFID, она получает энергию от поля (питание) и начинает передачу данных. Первые 9 битов – это логическая единица. Эти биты используются как последовательность маркеров для обозначения начала передачи. Поскольку во всех остальных данных используется контроль чётности, эта девятибитная последовательность единиц больше не встретится ни в каком другом месте. Далее идут 10 групп по 4 бита данных и 1 бит чётности на каждую группу. Наконец, есть 4 бита контрольной суммы и последний стоповый бит, который всегда равен нулю.

Метка повторяет цикл передачи данных, пока на неё приходит питание. Поэтому мы на ридере наблюдаем постоянное считывание метки.

Приведу пример данных, которые передаёт метка с номером: 0x06 — номер версии, и 0x001259E3 — данные.

конвертер кодов карт доступа

Кстати, номер, напечатанный на карте можно перевести в hex-номер, который получит считыватель. Например, на карте записан номер: 116,23152

Модуляция сигнала

Передача данных от метки до считывателя осуществляется с помощью модуляции несущего сигнала считывателя (в нашем случае несущей частоты 125 кГц). Обратите внимание, что от этой несущей частоты идёт и питание и ей же осуществляется модуляция сигнала. Для начала рассмотрим упрощённую схему взаимодействия считывателя и метки. Запомните эту картинку, мы ещё будем к ней обращаться.

конвертер кодов карт доступа

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

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

конвертер кодов карт доступа

Пример модуляции несущего сигнала

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

По стандарту RFID есть три популярных схемы модуляции:

конвертер кодов карт доступа

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

конвертер кодов карт доступа

Реальный промодулированный сигнал, снятый на катушке считывателя.

Делаем RFID-эмулятор

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

конвертер кодов карт доступа

Вот такой миниатюрный таракан, вполне может эмулировать метку

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

конвертер кодов карт доступа

Катушка индуктивности около 1 мкГн и микроконтроллер ATtiny85

Вот это дамы и господа и есть настоящее Хакерство, когда уровень понимания особенностей работы оборудования позволяет создавать технические решения, выходящие за рамки, обозначенные производителем! И это работает, проверено лично. Вот истинное значение слова «хакер», это не про взлом и воровство.

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

конвертер кодов карт доступа

Первая модификация — конденсатор 0,1 мкФ по питанию

Создание антенны

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

Собрать и настроить антенну очень просто, прямо как в картинке из [1].

конвертер кодов карт доступа

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

конвертер кодов карт доступа

Параллельный колебательный контур

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

конвертер кодов карт доступа

Где f — частота колебаний, L — индуктивность катушки, C — ёмкость конденсатора.

В данном случае у нас есть фиксированный параметр — частота, а с ёмкостью и индуктивностью мы можем играться. Для того чтобы рассчитать катушку, воспользуемся документом [2]. Все кто хоть как-то собираются делать антенны для RFID меток (любых частот), обязаны с ним ознакомиться!
Многие умельцы, как для ридеров, так и для эмуляторов (суть не важна) делают круглые катушки. Их проще считать и изготавливать, но они имеют существенный недостаток — их линейные размеры больше карточки. Я хочу изготовить катушку индуктивности в форме прямоугольника, с линейными размерами меньше размеров стандартной карты и, чтобы результирующее устройство было размером со стандартную карту RFID. В результате выбираю размер будущей катушки индуктивности практически такой же, как стоит в настоящей метке, то есть примерно 70х40 мм. Если конденсатор выбрать 10 нФ, то индуктивность катушки (из формулы выше), должна составлять у нас 162 мкГн. Теперь смотрим в документацию по расчёту прямоугольной катушки. Для намотки катушки выбрал провод сечением 0,2 мм. В результате открываем соответствующий раздел документации, и нашему взору представляется следующая славная формула.

конвертер кодов карт доступа

Как видим параметры толщины и ширины катушки у нас неизвестные и изменяемые (упираются в толщину провода 0,2 мм), но общие прикидки мне дали цифру в 42 витка. Можно было бы сделать несколько итераций, и сделать прям точный-точный расчёт, но в нашем штучном случае, и так сойдёт.

После чего, необходимо изготовить каркас 70х40 мм для намотки катушки. Его я изготовил из текстолита и на него намотал катушку.

конвертер кодов карт доступа

Каркас из текстолита

конвертер кодов карт доступа

конвертер кодов карт доступа

Намотка и готовая катушка

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

конвертер кодов карт доступа

Начнём подбор резонансного конденсатора

Сначала я проверил конденсатор емкостью 10 нФ, который должен быть резонансным. Но амплитуда сигнала сразу просела, по сравнению с пустой катушкой. Тогда я взял конденсатор меньшего номинала. И так перебирал конденсаторы, пока не поймал резонанс. Таким образом резонансная ёмкость конденсатора составила 3,2 нФ.

конвертер кодов карт доступа

Сигнал без конденсатора, пустая катушка

конвертер кодов карт доступа

конвертер кодов карт доступа

конвертер кодов карт доступа

конвертер кодов карт доступа

Видно, что пробовал разные варианты, и было ясно что максимум лежит где-то между 3 и 4 нФ и результатом стал конденсатор 3,2 нФ (состоящий из двух конденсаторов в параллели). Всё, наша катушка готова к дальнейшим опытам.

Вообще, хочу заметить, что катушку можно сделать вообще в виде дорожек на печатной плате, и при небольшой серии изделий так и стоит делать. Вот, пример такой платы, именно на 125 кГц от Alexander Guthmann. К сожалению, сайт практически умер, а автор давно не выходит на связь, так что довольствуемся только моими фото. Если кто поможет его найти, буду признателен! Не знаю что с ним случилось.

конвертер кодов карт доступа

Таким образом, делать эмулятор сразу в виде печатной платы — нет никаких проблем. Думаю имея руководство [2], сможете рассчитать такое самостоятельно, раз это смог сделать четырнадцатилетний немецкий школьник.

Пробежимся по коду

Давайте кратенько пробежимся по коду, который можно посмотреть вот тут. Там пример эмуляции двух типов карт, я разберу только EM4102.

Перво-наперво, как гласит код, нам при прошивке микроконтроллера надо прошить fuse-биты в значение lfuse to 0xC0: таким образом, чтобы контроллер тактировался от внешнего генератора. Обращаю внимание, что любая перепрошивка контроллера будет сопряжена с тем, что его надо будет тактировать от внешнего источника, так как мы устанавливаем fuse биты с генерацией от внешнего генератора!

Весь код основан на макросах. Напомню, что такое макросы — это программа, которая подготавливает код к компиляции. Наша программа состоит всего из нескольких ассемблеровских инструкций: rjmp, call (2 такта), nop, ldi, out и ret (все по 1 такту)! Всё, весь остальной код формируется макросами в зависимости от макроса серийного номера (дефайна). Особенность работы в том, что у нас достаточно мало тактов для нормальной работы. Попробуй успей за 32 такта сделать что-то, учитывая что инструкции перехода в контроллере AVR занимают 2 такта. Поэтому весь код генерируют макросы в зависимости от ID-карты.

Дефайнами задаём какой тип карты мы эмулируем и задаём ID-карты. Это главный макрос, на основании которого и формируется остальной код. И, тадам, его величество макросы.

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

Рекурсивный макрос кодирования манчестер-кодом.

Собственно тут и осуществляется вся логика. Принимает на вход битовую маску и счётчик битов. Если счётчик не нуль, то вызываем ещё раз сами себя, декрементируя счётчик (рекурсивный макрос, ага). Далее в самом теле идут вызовы макросов baseband_0, baseband_1 и baseband_1_last. В зависимости от того, какой бит у нас “1” или “0”, мы модулируем сигнал манчестер кода с нуля на единицу или с единицы на нуль.

Помните выше я приводил таблицу в статье, как идёт кодирование содержимого карты, где идут биты чётности, и стоп биты в конце. Так вот, наша задача теперь ID-метки закодировать этим методом, для этого у нас существуют два макроса.

ROW_PARITY — расчёт бита чётности в строке из четырёх бит, COLUMN_PARITY — расчёт контрольной суммы всей посылки.

Ну то есть, так же точно передаём заголовочные 9 бит, потом манчестер кодинг, высчитывая бит чётности для каждых 4-х бит, в конце контрольная сумма и стоп бит.

Осталось разобраться, что же такое baseband. Для этого у нас служат ещё одни макросы обёртки (да сколько можно-то, а?).

Макросы baseband* — выполняют ассемблеровский код: вызывают соответствующие функции, и потом делают переход на другую команду. Макрос baseband_1_last — аналогична макросу baseband_1, кроме того что делает безусловный переход не на команду ниже, а в начало функции main. Макрос header — служит для вывода заголовка из девяти однотипных бит равных единице, и вызывает макрос манчестера с передачей числа и количества передаваемых бит.

Последнее, что осталось разобрать — это функции baseband30_0 и baseband30_1. Они описываются следующим кодом.

В зависимости от того, какая функция вызывается baseband30_0 или baseband30_1 в регистр r16 записывается значение того что должно быть на пине ввода/вывода: 1 или 0. После этого идёт безусловный переход на baseband30 осуществляется вывод и задержка на 19 тактов, после чего идёт возврат.

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

Давайте его скорее скомпилируем и посмотрим как он выглядит, как развернутся все эти макросы. Компилируем командой make (предварительно установив avr-gcc) и дизассемблируем получившийся elf-файл

Вначале у нас вектора прерываний, но нас интересует только первый jump. Так как остальные вектора никуда не ведут.

Здесь мы настраиваем порты ввода/вывода, и вызываем функцию main. A main состоит из безумного количества вызовов функций baseband30* и jump (так развернулся наша адский цирк макросов).

И так далее… пока не джампнемся снова на main

Ну и глянем как же выглядит наш baseband модуль.

В конце видно как delay развернулся в список jump и nop для задержки. Вот такая красивая магия.

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

Испытания

Применим все полученные знания и проведём испытания. Компилируем прошивку, прошиваем контроллер, не забывая правильно выставить Fuse-биты.

конвертер кодов карт доступа

Платка для прошивки

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

конвертер кодов карт доступа

И, о чудо! Оно работает, корректно считывается и в цикле даёт корректный ID! Без внешнего питания, с работой только от поля. Осталось всё это привести в порядок и сделать настоящую RFID-метку.

конвертер кодов карт доступа

Окончательный “заламинированный” вариант метки

Итого

Могу честно признаться, что до конца не верил, что это заработает. Питание от поля, нестандартные режимы работы контроллера, работа строго по тактам, самодельная катушка индуктивности. Плюс ещё работа самого RFID. И вот, вроде плёвая поделка растекается на пару месяцев чтения документации и разбора полётов. Но это работает, и эта штука по-настоящему гениальна. Так что ребята, вот такие штуки и есть настоящее хакерство. Дерзайте!

Домашнее задание

Раз вы всё-таки прочитали эту крутую статью, я её писал, старался, делал, теперь пора и вам что-то попробовать сделать. В коде эмулятора есть раздел, который эмулирует карты стандарта HID Proximity, с кодированием фазовым сдвигом. Вам в качестве развлечения и лучшего усвоения материала следует разобраться со стандартом HID и этим кодированием. Решение присылайте в комментарии. Удачи.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *