GitHub – RfidResearchGroup/proxmark3: RRG / Iceman repo, the most totally wicked repo around if you are into Proxmark3 and RFID hacking

GitHub - RfidResearchGroup/proxmark3: RRG / Iceman repo, the most totally wicked repo around if you are into Proxmark3 and RFID hacking Электронная цифровая подпись

Citation

Use this bibtex to cite this repository globally:

If you need to refer to a specific state of the repository, use a commit number or a date of access, e.g.:

  note = {Accessed: commit 12327f71a27da23831901847886aaf20e8ad3ca0}
  note = {Accessed: 2021-01-01}

Development

Note: This is a bleeding edge repository. The maintainers actively is working out of this repository and will be periodically re-structuring the code to make it easier to comprehend, navigate, build, test, and contribute to, so DO expect significant changes to code layout on a regular basis.

👉Remember! If you intend to contribute to the code, please read the coding style notes first.
We usually merge your contributions fast since we do like the idea of getting a functionality in the Proxmark3 and weed out the bugs afterwards.

The public roadmap is an excellent start to read if you are interesting in contributing.

Generic proxmark3 platforms

In order to build this repo for generic Proxmark3 platforms we urge you to read Advanced compilation parameters

We define generic Proxmark3 platforms as following devices.

Supported

  • RDV1, RDV2, RDV3 easy
  • Ryscorp green PCB version
  • Radiowar black PCB version
  • numerous Chinese adapted versions of the RDV3 easy (kkmoon, PiSwords etc)

Not supported

Unknown support status

256kb flash memory size of generic Proxmark3 platforms

Note:
You need to keep a eye on how large your ARM chip built-in flash memory is.
With 512kb you are fine but if its 256kb you need to compile this repo with even less functionality.
When running the ./pm3-flash-all you can see which size your device have if you have the bootloader from this repo installed.
Otherwise you will find the size reported in the start message when running the Proxmark3 client ./pm3.

OBS! Read the 256kb flash memory advisory

Maintainers

To all distro, package maintainers, we tried to make your life easier.

make install is now available and if you want to know more.

This document will be helpful for you

Official channels

Where do you find the community?

Precompiled binaries

See Proxmark3 precompiled builds

Proxmark3 gui

The official PM3-GUI from Gaucho will not work. Not to mention is quite old and not maintained any longer.

Proxmark3 rdv4

See the instruction links in the tables above to build, flash and run for your Proxmark3 RDV4 device.

Supported operative systems

This repo compiles nicely on

  • WSL1 on Windows 10
  • Proxspace environment release v3.10
  • Windows/MinGW environment
  • Ubuntu, ParrotOS, Gentoo, Pentoo, Kali, NetHunter, Arch Linux, Fedora, Debian, Raspbian
  • Android / Termux
  • Mac OS X / Homebrew (or MacPorts, experimental) / Apple Silicon M1
  • Docker container

Table of contents

  1. PROXMARK3 INSTALLATION AND OVERVIEW
  2. Notes / helpful documents
  3. How to build?
    1. Proxmark3 RDV4
    2. Generic Proxmark3 platforms
  4. What has changed?
  5. Development
  6. Supported operative systems
  7. Precompiled binaries
  8. Proxmark3 GUI
  9. Official channels
  10. Maintainers
  11. Citation

What has changed?

Proxmark3 RDV4 hardware modifications:

  • added flash memory 256kb
  • added smart card module
  • added FPC connector for peripherals such as Bluetooth battery addon
  • improved antennas
    • swappable
    • LF Q factor switch
    • LF 125/134 frequency switch
  • tiny PCB form factor
  • ABS case

Дубликатор домофонных ключей (ibutton) с мозгами из arduino nano

Добрый день! Как-то надоело платить по 150 рублей за копию ключа от домофона и решил собрать простой, бюджетный дубликатор iButton на Arduino. Цены на подобные готовые устройства «кусаются», хотя и функционал у них шире, копируют практически всё, включая беспроводные ключи. Мне достаточно простого копирования ключа iButton а-ля «кнопка». Интересно? Прошу под «cut»!

Итак, приступим! Для начала «техзадание», что должно уметь это устройство:
1) Читать содержимое ключа, интересно же что там зашито.
2) Копировать ключи, как это ни странно звучит 🙂
3) Прошивать «универсальный» ключ. Под словом «универсальный» будем понимать какой-либо свой ключ, который будет записываться по-умолчанию.

Мозгами будет Arduino Nano v3 неоднократно рассмотренная на этом ресурсе.

Корпусом для этого устройства будет служить неисправный «однобаночный повербанк», так же неоднократно обозримый и тут, и там. Из внутренностей «повербанка» останется только печатная плата с гнёздами USB и MicroUSB. Через MicroUSB будем питать устройство от 5В, так же может быть запитано от порта Mini-USB Arduino. Через USB подключим считыватель iButton. Всё остальные электронные компоненты выпаяны из платы «повербанка». Кнопка для дубликатора куплена в оффлайне, ничего особенного в ней нет, обычная, без фиксации. В корпусе проделаны отверстия для порта Mini-USB расположенного на плате Arduino и над кнопкой «Reset».
Захват криптоключей Mifare и копирование ключей домофонов IronLogic своими руками / Хабр

Считыватель iButton, взят от какого-то неведомого устройства, ничего особенного в нём нет, просто контактная площадка. К считывателю припаян USB штекер. Так как разъём используется не по назначению и чтобы ничего не «сжечь» при подключении считывателя к порту ПК, ноутбука или зарядного устройства, для подключения используются провода зелёного «Data » и белого «Data-» цвета.
Захват криптоключей Mifare и копирование ключей домофонов IronLogic своими руками / Хабр
Захват криптоключей Mifare и копирование ключей домофонов IronLogic своими руками / Хабр

Дубликатор со считывателем и ключами:

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

Светодиоды для индикации процесса прошивки на корпус не стал выводить, корпус белый и хорошо просвечивается, всё видно.

Схема подключения:
Захват криптоключей Mifare и копирование ключей домофонов IronLogic своими руками / Хабр
Резистор R2 поставил 1кОм, в интернетах пишут что надо 2,2 кОм.

Программное обеспечение. Для компиляции необходима библиотека

OneWire

взять её можно

тут

.

Скетч от 27.06.2021

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

#include <OneWire.h>

#define pin 11
OneWire ibutton (pin); // Пин D11 для подлючения iButton (Data)
byte addr[8];
byte ReadID[8] = { 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x2F }; // "Универсальный" ключ. Прошивается последовательность 01:FF:FF:FF:FF:FF:FF:2F

const int buttonPin = 6;
const int ledPin = 13;
int buttonState = 0;
int writeflag = 0;
int readflag = 0;

void setup() {
  pinMode(ledPin, OUTPUT);
  pinMode(buttonPin, INPUT);
  Serial.begin(115200);
}

void loop() {

  buttonState = digitalRead(buttonPin);
  if (buttonState == HIGH) {
    readflag = 1;
    writeflag = 1;
    digitalWrite(ledPin, HIGH);
  }
  if (!ibutton.search (addr)) {
    ibutton.reset_search();
    delay(50);
    return;
  }

  digitalWrite(ledPin, HIGH);
  delay(50);

  for (byte x = 0; x < 8; x  ) {
    Serial.print(addr[x], HEX);
    if (readflag == 0) {
      ReadID[x] = (addr[x]);
    }
    Serial.print(":");
  }

  byte crc; // Проверка контрольной суммы
  crc = ibutton.crc8(addr, 7);
  Serial.print("CRC: ");
  Serial.println(crc, HEX);
  digitalWrite(ledPin, LOW);

  if ((writeflag == 1) or (Serial.read() == 'w')) {
    ibutton.skip(); ibutton.reset(); ibutton.write(0x33);
    Serial.print("  ID before write:");
    for (byte x = 0; x < 8; x  ) {
      Serial.print(' ');
      Serial.print(ibutton.read(), HEX);
    }
    // send reset
    ibutton.skip();
    ibutton.reset();
    // send 0xD1
    ibutton.write(0xD1);
    // send logical 0
    digitalWrite(pin, LOW); pinMode(pin, OUTPUT); delayMicroseconds(60);
    pinMode(pin, INPUT); digitalWrite(pin, HIGH); delay(10);

    Serial.print('n');
    Serial.print("  Writing iButton ID:n    ");
    byte newID[8] = { (ReadID[0]), (ReadID[1]), (ReadID[2]), (ReadID[3]), (ReadID[4]), (ReadID[5]), (ReadID[6]), (ReadID[7]) };
    ibutton.skip();
    ibutton.reset();
    ibutton.write(0xD5);
    for (byte x = 0; x < 8; x  ) {
      writeByte(newID[x]);
      Serial.print('*');
    }
    Serial.print('n');
    ibutton.reset();
    // send 0xD1
    ibutton.write(0xD1);
    //send logical 1
    digitalWrite(pin, LOW); pinMode(pin, OUTPUT); delayMicroseconds(10);
    pinMode(pin, INPUT); digitalWrite(pin, HIGH); delay(10);
    writeflag = 0;
    readflag = 0;
    digitalWrite(ledPin, LOW);
  }
}

int writeByte(byte data) {
  int data_bit;
  for (data_bit = 0; data_bit < 8; data_bit  ) {
    if (data & 1) {
      digitalWrite(pin, LOW); pinMode(pin, OUTPUT);
      delayMicroseconds(60);
      pinMode(pin, INPUT); digitalWrite(pin, HIGH);
      delay(10);
    } else {
      digitalWrite(pin, LOW); pinMode(pin, OUTPUT);
      pinMode(pin, INPUT); digitalWrite(pin, HIGH);
      delay(10);
    }
    data = data >> 1;
  }
  return 0;
}

Скетч от 04.09.2021, добавлена функция восстановления ключей с неправильным family code

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

#include <OneWire.h>

#define pin 11
OneWire ibutton (pin); // Пин D11 для подлючения iButton (Data)
byte addr[8];
byte ReadID[8] = { 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x2F }; // "Универсальный" ключ. Прошивается последовательность 01:FF:FF:FF:FF:FF:FF:2F

const int buttonPin = 6;
const int ledPin = 13;
int buttonState = 0;
int writeflag = 0;
int readflag = 0;
int val = 0;

void setup() {
  pinMode(ledPin, OUTPUT);
  pinMode(buttonPin, INPUT);
  Serial.begin(115200);
}

void loop() {

  buttonState = digitalRead(buttonPin);
  if (buttonState == HIGH) {
    readflag = 1;
    writeflag = 1;
    digitalWrite(ledPin, HIGH);
    val  ;
    if (val > 6) val = 6;
    Serial.print(val);
    delay(500);
  }
  else {
    val = 0;
  }


  if (!ibutton.search (addr)) {
    ibutton.reset_search();
    delay(50);
    if (val <= 5) return;
    val = 0;
  }

  digitalWrite(ledPin, HIGH);
  delay(50);

  for (byte x = 0; x < 8; x  ) {
    Serial.print(addr[x], HEX);
    if (readflag == 0) {
      ReadID[x] = (addr[x]);
    }
    Serial.print(":");
  }

  byte crc; // Проверка контрольной суммы
  crc = ibutton.crc8(addr, 7);
  Serial.print("CRC: ");
  Serial.println(crc, HEX);
  digitalWrite(ledPin, LOW);

  if ((writeflag == 1) or (Serial.read() == 'w')) {
    ibutton.skip(); ibutton.reset(); ibutton.write(0x33);
    Serial.print("  ID before write:");
    for (byte x = 0; x < 8; x  ) {
      Serial.print(' ');
      Serial.print(ibutton.read(), HEX);
    }
    // send reset
    ibutton.skip();
    ibutton.reset();
    // send 0xD1
    ibutton.write(0xD1);
    // send logical 0
    digitalWrite(pin, LOW); pinMode(pin, OUTPUT); delayMicroseconds(60);
    pinMode(pin, INPUT); digitalWrite(pin, HIGH); delay(10);

    Serial.print('n');
    Serial.print("  Writing iButton ID:n    ");
    byte newID[8] = { (ReadID[0]), (ReadID[1]), (ReadID[2]), (ReadID[3]), (ReadID[4]), (ReadID[5]), (ReadID[6]), (ReadID[7]) };
    ibutton.skip();
    ibutton.reset();
    ibutton.write(0xD5);
    for (byte x = 0; x < 8; x  ) {
      writeByte(newID[x]);
      Serial.print('*');
    }
    Serial.print('n');
    ibutton.reset();
    // send 0xD1
    ibutton.write(0xD1);
    //send logical 1
    digitalWrite(pin, LOW); pinMode(pin, OUTPUT); delayMicroseconds(10);
    pinMode(pin, INPUT); digitalWrite(pin, HIGH); delay(10);
    writeflag = 0;
    readflag = 0;
    digitalWrite(ledPin, LOW);
  }
}

int writeByte(byte data) {
  int data_bit;
  for (data_bit = 0; data_bit < 8; data_bit  ) {
    if (data & 1) {
      digitalWrite(pin, LOW); pinMode(pin, OUTPUT);
      delayMicroseconds(60);
      pinMode(pin, INPUT); digitalWrite(pin, HIGH);
      delay(10);
    } else {
      digitalWrite(pin, LOW); pinMode(pin, OUTPUT);
      pinMode(pin, INPUT); digitalWrite(pin, HIGH);
      delay(10);
    }
    data = data >> 1;
  }
  return 0;
}

Как это работает:

Читайте также:  Сбис как создать эцп

Для вывода содержимого ключа подключаем дубликатор через порт Mini-USB к компьютеру. Устанавливаем драйвер устройства.
В диспетчере устройств появится COM-порт с каким-либо номером, в моём случае 4.

Запускаем программу

Putty

, выбираем тип соединения «Serial» прописываем номер COM порта, в моём случае 4, и скорость 115200.

Нажимаем кнопку «Open» и прикладываем ключ к считывателю.

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

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

Важно! При записи «универсального» ключа, например такого 01:FF:FF:FF:FF:FF:FF:2F, нужно правильно указать контрольную сумму ключа, в данном случае 2F это и есть контрольная сумма, рассчитывается по особому алгоритму, который описывать не вижу смысла. Ключ можно записать с кривой контрольной суммой, и скорее всего считываться устройствами (домофонами, панелями) он будет, но устройства будут его игнорировать.

Например нам нужно прошить ключ 01:12:34:56:AB:CD:EF:XX. Первый байт, передаваемый из памяти ключа, является кодом типа устройства — family code, всегда 01. После него идёт гарантированно уникальный серийный номер (6 байт) 12:34:56:AB:CD:EF. Последний байт XX несёт информацию Cyclic Redundancy Check (CRC), что означает проверочный циклический избыточный код. CRC специальным образом вычисляется от первых семи байт.
Для вычисления контрольной суммы вместо XX записываем любое шестнадцатеричное число, например AA. Получаем ключ следующего вида 01:12:34:56:AB:CD:EF:AA. Заменяем в скетче строку

byte ReadID[8] = { 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x2F };

на

byte ReadID[8] = { 0x01, 0x12, 0x34, 0x56, 0xAB, 0xCD, 0xEF, 0xAA };

прошиваем ключ и смотрим что там, а там видно что в поле CRC должно быть

E0

.

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

Меняем в скетче строку

byte ReadID[8] = { 0x01, 0x12, 0x34, 0x56, 0xAB, 0xCD, 0xEF, 0xAA };

на

byte ReadID[8] = { 0x01, 0x12, 0x34, 0x56, 0xAB, 0xCD, 0xEF, 0xE0 };

снова прошиваем ключ и смотрим что там, а там теперь ключ с правильной CRC.

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

Коды ключей

тут

.

UPD. Очень важно! Если первый байт, family code, будет 00, например 00:12:34:56:AB:CD:EF:AA, то после прошивки ключ «умрёт», читаться он уже этим программатором, а возможно и другими, не будет. Выявлено опытным путём, спасибо товарищу belik1982‘у. Подробнее тут.

UPD. В скетч от 04.09.2021 добавлена функция восстановления ключей с неправильным family code, для этого необходимо приложить ключ к считывателю и удерживать кнопку в течение 6 секунд. После этого в ключ будет записан «универсальный» ключ. Спасибо за помощь товарищу krassalex‘у. Подробнее тут.

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

тут

, хотя у нас в оффлайне можно найти по 30 рублей за штуку, у копировальщиков на рынке по 100 — 150 рублей :).

UPD.

О том какие типы ключей можно записать этим дубликатором читаем

тут

. Спасибо за помощь товарищу

biverov

‘у.

UPD.

Если ключ не пишется следуем

совету

товарища

andrey2596

.

Захват криптоключей 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-го блока, которые можно получить в разделе «Копирование сектора».

Этот способ не будет также работать для последних версий ПО считывателей 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

Как сделать своими руками копировальщик контактных и бесконтактных ключей домофона

Время от времени приходится изготавливать копию ключа домофона. То ключ потерялся или вышел из строя и тому подобное. Тогда можно сделать копию ключа в специальных мастерских за 150-200 рублей. Сделать копирование домофонных ключей можно и своими силами. Можно приобрести готовый дубликатор ключей, например на Алиэкспресс, но можно сделать его самостоятельно. Тем более это будет под силу и начинающим радиолюбителям. Сейчас в основном используются два вида ключей к домофону – контактного типа (iButton, Touch memory (ТМ) по простому «таблетки»), и бесконтактного типа RFID в виде брелков, пластиковых карточек.

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

С помощью модуля Ардуино по интерфейсу onewire можно провести считывание а также запись домофонных ключей.

Перечень инструментов и материалов.
– плата Arduino Nano-1шт ;
– подстроечный многооборотный резистор на 10Ком -1шт;
– соединительные провода;
– макетная плата -1шт ;
– RFID ключ болванка T5577(Т5557) ;
– Ibutton ключ болванка RW1990 ;
– RGB светодиод-1шт;
– кнопка-1шт;
– выключатель питания-1шт;
– активный зуммер 5В -1шт;
– считыватель контактный-1шт;
– провод ПЭВ 0,2-0,4мм;
– конденсаторы и резисторы согласно схемы;
– пластмассовый корпус (распредкоробка);
– паяльник;
– тестер.

Шаг первый. Распайка схемы.

Схема состоит из платы Arduino Nano с подключенными считывателем контактных ключей и платы считывателя бесконтактных ключей. RGB светодиод служит для индикации режимов работы-дежурный, считывание ключа,запись ключа. Подстроечный многооборотный резистор для регулировки компаратора. Кнопка предназначена для переключения режимов работы дубликатора. Зуммер- для звукового контроль работы копира.

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

Колебательный контур состоит из конденсатора 4700 пФ и катушки индуктивности.

Расчет катушки колебательного контура можно произвести на калькуляторе сайта

Катушку можно мотать на каркасе как круглой так и прямоугольной формы(на спичечном коробке) рассчитав соответственно. Я применил в качестве катушки индуктивности готовый дроссель 300мкГн(выпаял с какого то прибора), домотав его несколькими витками, что существенно уменьшило габариты катушки и естественно время на ее изготовление.

Варианты катушек и дросселя.

Шаг второй. Настройка и проверка работы.
Собираем всю схему для настройки на макетной плате. Загружаем скетч. Версия IDE Arduino должна не ниже 1.8.9

С платы Arduino Nano контакт D11 выдается сигнал 125 kHz, который идет на колебательный контур катушки и конденсатора. Но потому что конденсаторы имеют разброс по емкости от 5 до 30%, колебательный контур надо точно настроить на частоту 125 kHz. Для этого катушку наматываем с запасом 10-15 витков, затем сматываем пока на тестере не будет увеличиваться напряжение до максимума. Тестер подключаем к амплитудному детектору(в точке –диод,конденсатор). Напряжение должно находится в пределах 16-22 Вольта. После подстроечным резистором выставляем напряжение 0,1 Вольта(тестер на вывод D6 и GND).

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

Ключ представляет собой катушку с чипом.

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

На мониторе порта видим всю информацию по нашим действиям.

Аналогично можно произвести чтение и запись на Ibutton ключи. Если нужно записать какой то свой код вручную в RFID ключ то можно раскоментировать строку 532 и загрузить скетч. Для контактных ключей –скопировать ее и вставить после 216 строки.

Шаг второй. Окончательная сборка.

На последнем этапе собрал всю конструкцию в корпус из распредкоробки. Запитать схему можно от «Кроны» или например от пары пальчиковых батареек с повышающей платой до 5-9 вольт.

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

Процесс изготовления и настройки можно посмотреть в видео

Всем желаю здоровья и интересных самоделок!

Смотрим на 1-wire через осциллограф

Захват сигнала осциллографом в момент чтения ключа Dallas

Линия передачи устроена по принципу «монтажного И» и может иметь одно из двух состояний: логический “0” и логическая “1”.Устройства (ключи и домофон) имеют внутренние транзисторы, которые в нужное время подтягивают линию к нулю. Вся линия передачи переходит в состояние логического “0”, если любое из устройств перевело ее в нуль, т.е. если домофон перетянул линию в нуль — ключ об этом узнает, и наоборот.

С помощью перетяжек напряжения и удержания уровней 1-wire имеет 4 примитива для работы на шине:

Захват криптоключей Mifare и копирование ключей домофонов IronLogic своими руками / ХабрЧтение ключа Dallas на Flipper. Состоит из команд Search ROM и Read ROM. Каждая команда имеет Reset sequence.

Чтение ключа на Flipper Zero устроено так: командой поиска проверяется наличие ключа, а затем происходит чтение ID. Это сделано, чтобы избежать случайных совпадений с другими ключами Cyfral/Metakom, тайминги которых могут случайно совпасть с требуемыми.

На осциллограмме виден длинный сигнал из 2 команд, где каждая состоит из:

Разберем более детально каждый из пунктов.

Захват криптоключей Mifare и копирование ключей домофонов IronLogic своими руками / Хабр
Reset sequence — инициализация команды. Состоит из Импульса Сброса и Импульса Присутствия. Импульс Сброса — уровень опускает Master. Импульс Присутствия — уровень опускает Slave.

Инициализация (reset sequence) состоит из двух импульсов:

  1. Импульс Сброса (Reset pulse)
  2. Импульса Присутствия (Presence pulse)

Для Импульса Сброса — линию к земле подтягивает Master (домофон).

Для Импульса Присутствия — линию к земле подтягивает Slave (ключ).

Некоторые домофоны не подают импульс сброса, так как отсутствие контакта между ключом и домофоном и есть сигнал сброса.

Захват криптоключей Mifare и копирование ключей домофонов IronLogic своими руками / Хабр
Команда чтения ID с ответом. Тайм-слот бита информации состоит из 2 участков: синхронизации и значения бита. В КОМАНДАХ за уровни напряжения на обоих участках отвечает Master. В ОТВЕТЕ на команду чтения за синхронизацию отвечает Master, за значение бита отвечает Slave.

После инициализации команды происходит обмен информацией:

Обмен информацией ведется тайм-слотами: один тайм-слот для обмена одним битом информации. Данные передаются бит за битом, начиная с младшего бита младшего байта.

Синхронизация Master и Slave происходит в одно действие: Master (домофон) подтягивает линию к низкому уровню. Далее через конкретное время, Master или Slave измеряет напряжение на линии и записывает бит информации (Master — при чтении ключа, Slave — при записи ключа).

Важно, что все сигналы имеют конкретные временные ограничения, которые обязательно должны быть соблюдены! Бывает, что производители домофонов упарываются, и соблюдают какие-то свои временные задержки.Еще у iButton есть режим Overdrive, в котором временные задержки сокращены, из-за чего передача информации происходит быстрее. Есть вероятность, что в дикой природе существуют домофоны, работающие в этом режиме… Но на практике они не встречались.

Оцените статью
ЭЦП Эксперт
Добавить комментарий