rfcat

Wireless & RF v2.0.1 · 29.08.2023 не обновлялся >2 лет

Инструмент для атак на субгигагерцовые RF-устройства через адаптер CC1111 (YardStick One). Позволяет перехватывать, воспроизводить и генерировать RF-сигналы в диапазонах 300-928 МГц. Используется для атак на гаражные ворота, брелоки, умные счётчики.

v2.0.1
29.08.2023 current
Добавлен 25.06.2026 · Обновлён 07.07.2026 · Wireless & RF
Установка
pip install rfcat
# Требуется YardStick One или CC1111

# Интерактивный режим:
rfcat -r

# В Python:
from rflib import *
d = RfCat()
d.setFreq(433920000)
d.setMdmModulation(MOD_ASK_OOK)
переведено ИИ

Добро пожаловать в проект rfcat

Содержание

ЦЕЛИ

Цели проекта — сократить время, необходимое исследователям безопасности для создания нужных инструментов для анализа неизвестных целей, помочь в реверс-инжиниринге оборудования и удовлетворить мою страсть к радио (rf lust).

ТРЕБОВАНИЯ

RfCat в настоящее время требует Python 2.7. Единственные предполагаемые несовместимости с Python 3.x минимальны, в основном это print("stuff") вместо print "stuff" и другие проблемы с типами str/bytes.

Другие требования

  • python usb
  • libusb — должна работать с версиями 1.x или 0.1. Пожалуйста, сообщите нам, если у вас возникнут проблемы.
  • pyreadline (особенно для Windows)
  • PySide2 (для GUI Анализатора спектра): (Ubuntu 18.10+: python-pyside2) PySide2 больше не устанавливается автоматически из-за проблем с поддержкой на платформах RPi. Вы можете установить его (если он доступен для вашей платформы) с помощью pip: $ sudo pip install PySide2

Требования для сборки

  • Make
  • SDCC

РАЗРАБОТКА

Новые разработки должны копировать файл application.c в appWhateverMyToolIs.c и по возможности стараться не вносить изменения в другие файлы в репозитории. Это лишь рекомендация, поскольку будущие исправления ошибок в других библиотеках/заголовках пройдут для вас гораздо более гладко.

Особенности и подводные камни

Несколько подводных камней, которые следует иметь в виду при разработке для CC1111

  • Модель памяти включает как концепции "RAM", так и "XDATA", и стандартные переменные RAM и переменные XDATA имеют различные ассемблерные инструкции для доступа к ним. Это означает, что вы можете столкнуться с странностями при использовании функции, написанной для XDATA, со стандартной переменной RAM, и наоборот.
  • Переменные должны быть определены в одном файле .c, а затем объявлены как "externs" в файле .h, который может быть включен в другие модули. Это довольно стандартная практика для программ на C, но и это, и предыдущий пункт вызвали у меня трудности в بعضые моменты, и я обнаруживал, что не уверен, что было причиной моих проблем.
  • Память RAM — не роскошь. Используйте её экономно.
  • Вам необходимо перевести радио в режим IDLE перед его перепрограммированием.
  • Вам необходимо перевести радио в режим TX перед записью в регистр RFD (прошивка), так как это 1-байтный FIFO.

УСТАНОВКА НА ОБОРУДОВАНИЕ

Установка и первоначальное ознакомление с rfcat...

Прежде всего. Использование rfcat требует, чтобы вы либо использовали клиент на Python в режиме root (sudo подходит отлично), либо настроили udev, чтобы разрешить обычным пользователям полный доступ к донглу. У вас также должен быть один из поддерживаемых донглов, прошитый необходимым прикладным прошивкой.

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

sudo cp etc/udev/rules.d/20-rfcat.rules /etc/udev/rules.d
sudo udevadm control --reload-rules

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

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

Поддерживаемые донглы

  • YARDStick One
  • cc1111emk (также известные как DONSDONGLES)
  • chronos watch dongle (также известные как CHRONOSDONGLE)
  • imme (ограниченная поддержка как для IMME, так и для IMMEDONGLE)
    • dongle imme на самом деле не используется с 31.01.2012

GoodFET


            --------------------------------

            |                         1  2 |
            |                         3  4 |
       ------                         5  6 |  

       | USB                          7  8 |
       ------                         9 10 |

            |                        11 12 |
            | GoodFET                13 14 |
            --------------------------------

Dongle Chronos

            --------------------------------

            |                              |
            |             RST 1  2 TP      ------
            |             GND 3  4 VCC      USB |
            |         DC/P2_2 5  6 DD/P2_1 ------
            | Chronos                      |
            --------------------------------

               GoodFET            Chronos           GreatFET            Chronos
                 PIN                PIN              PIN                  PIN

                  1 <----- DD -----> 6              J1.37 <----- DD -----> 6
                  2 <----- VCC ----> 4               J1.2 <----- VCC ----> 4
                  5 <----- RST ----> 1              J1.40 <----- RST ----> 1
                  7 <----- DC -----> 5              J1.39 <----- DC -----> 5
                  9 <----- GND ----> 3               J1.1 <----- GND ----> 3

Dongle EMK

            --------------------------------

            | 2 4 6 8 10   2 4 6 8 10      |
            | 1 3 5 7 9    1 3 5 7 9       |
            |-TEST-PINS----DEBUG-PINS------|
            |                              |
       ------                              |

       | USB                               |
       ------                              |

            | Don's Dongle (EMK)           |
            --------------------------------

               GoodFET              EMK               GreatFET             EMK  
                 PIN             DEBUG PIN              PIN            DEBUG PIN

                  1 <----- DD -----> 4              J1.37 <----- DD -----> 4
                  2 <----- VCC ----> 2               J1.2 <----- VCC ----> 2
                  5 <----- RST ----> 7              J1.40 <----- RST ----> 7
                  7 <----- DC -----> 3              J1.39 <----- DC -----> 3
                  9 <----- GND ----> 1               J1.1 <----- GND ----> 1

YARD Stick One

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

            -----------------------------------------

            | YARD Stick One      2 4 6 8 10 12 14  |
            |                     1 3 5 7 9  11 13  ------
            |                                        USB |
            |                                       ------
            |                                       |
            -----------------------------------------


               GoodFET           YARD Stick One       GreatFET           YARD Stick One
                 PIN                 PIN               PIN                 PIN

                  1 <----- DD -----> 1               J1.37 <----- DD -----> 1
                  2 <----- VCC ----> 2                J1.2 <----- VCC ----> 2
                  5 <----- RST ----> 5               J1.40 <----- RST ----> 5
                  7 <----- DC -----> 7               J1.39 <----- DC -----> 7
                  9 <----- GND ----> 9                J1.1 <----- GND ----> 9

УСТАНОВКА С ЗАГРУЗЧИКОМ

Шаги, необходимые для всех установок и обновлений прошивки

Вам также потребуется установить требования для сборки: python-usb, libusb-1.0.0, make и sdcc.

  • python-usb
  • libusb-1.0.0
  • make
  • sdcc
sudo apt install python-usb libusb-1.0.0 make sdcc

Для sdcc и его зависимости sdcc-libraries вам может потребоваться загрузить их из репозитория более раннего выпуска, если у вас более новая версия Debian или Ubuntu, например:

  • https://packages.debian.org/stretch/sdcc

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

usermod -a -G sudo $USER
su - $USER

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

sudo cp etc/udev/rules.d/20-rfcat.rules /etc/udev/rules.d
sudo udevadm control --reload-rules

Шаги для установки загрузчика и прошивки с помощью аппаратного отладчика

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

Предполагаемая модель разработки использует GoodFET, хотя один из наших разработчиков использует отладчик Chipcon от Texas Instruments.

cd rfcat/firmware/
make testgoodfet

Эта команда считает информацию с вашего донгла с помощью GoodFET. Вы должны увидеть что-то подобное:

SmartRF not found for this chip.
Ident   CC1111/r1103/ps0x0400
Freq         0.000 MHz
RSSI    00
  • make backupdongle считает текущую прошивку с вашего донгла в файл .../bins/original-dongle-hex.backup. (make restoredongle) для возврата к оригинальной прошивке.
  • make clean installRfCatChronosDongle очистит, соберёт и установит прошивку RfCat (appFHSSNIC.c) для донгла Chronos.
  • make clean installRfCatDonsDongle очистит, соберёт и установит прошивку RfCat (appFHSSNIC.c) для cc1111emk.
  • make clean installimmesnifffw очистит, соберёт и установит прошивку RfSniff для игрушки IMME от girltech.

Зависимости: CC-Bootloader от Fergus Noble (с небольшими модификациями). Для вашего удобства hex-файлы предоставляются в подкаталоге CCBootloader в папке firmware.

Исходный код можно найти здесь: * https://github.com/AdamLaurie/CC-Bootloader

который является ответвлением от: * https://github.com/fnoble/CC-Bootloader

и сделайте:

(установите rfcat_bootloader из подкаталога CC-Bootloader в какое-нибудь место в вашем пути выполнения)

cd firmware

для EMK/DONSDONGLE:

make installdonsbootloader

для CHRONOS:

make installchronosbootloader

для YARDSTICKONE:

make installys1bootloader

теперь отсоедините отладчик и подключите ваш USB-донгл.

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

Шаги для обновления прошивки через USB-порт

Если вы повторно прошиваете донгл, на котором уже запущена прошивка rfcat, такой как YarstickOne, цели Makefile автоматически переключат его в режим загрузчика для вас. Однако вы можете вручную перевести его в режим загрузчика, либо удерживая кнопку EMK/DONS при подключении к USB (для CHRONOS или YARDSTICKONE перемычку P2_2/DC на GROUND), либо выполнив команду d.bootloader() в интерактивном режиме rfcat (rfcat -r), либо выполнив команду rfcat --bootloader --force из командной строки.

Когда у вас загорится постоянным светодиод, или если вы работаете с донглом rfcat, вы можете выполнить следующее:

cd firmware

для EMK/DONSDONGLE:

make installRfCatDonsDongleCCBootloader

для CHRONOS:

make installRfCatChronosDongleCCBootloader

для YARDSTICKONE:

make installRfCatYS1CCBootloader

Новая версия будет установлена, и загрузчик завершит работу.

Установка клиента

Зависимости

  • python-usb
  • libusb

Установите rfcat в вашей системе. В большинстве систем Linux это поместит rfcat и rfcat_server в /usr/local/bin/, а rflib в /usr/*/lib/python2.x/dist-packages.

Установка

  • перейдите в директорию rfcat (созданную при распаковке tarball или с помощью git clone)
  • sudo python setup.py install
  • Я настоятельно рекомендую установить ipython
  • Для пользователей deb/ubuntu: apt-get install ipython

Установка с помощью pip

  • перейдите в директорию rfcat (созданную при распаковке tarball или с помощью git clone)
  • pip install -e . (устанавливает в редактируемом режиме и запускается из распакованного или полученного из репозитория расположения)

Использование rfcat

Если вы настроили свою систему для разрешения использования без root:

  • введите rfcat -r (если ваша система не настроена для разрешения использования без root, добавьте sudo перед командой или вы должны запускать как root) вы должны были войти в интерактивную оболочку Python, где дополнение по табуляции и другие средства должны обеспечить очень мощный опыт. мне нравится работа с сырыми байтами и интроспекция всего этого.

  • попробуйте такие команды:

    • d.ping()
    • d.discover()
    • d.debug()
    • d.RFxmit('blahblahblah')
    • d.RFrecv()
    • print(d.reprRadioConfig())
    • d.setMdmDRate(19200) # это устанавливает скорость модема (или DataRate)
    • d.setPktPQT(0) # это устанавливает порог качества преамбулы в 0
    • d.setEnableMdmFEC(True) # включает сверточное исправление ошибок (Forward Error Correction), встроенное в радио

хотя набор инструментов был создан, чтобы сделать взаимодействие с суб-ГГц диапазоном намного проще, вы обнаружите, что руководство по CC1111 от TI очень ценно. Чем лучше вы понимаете радио, тем лучше будет ваш опыт. поиграйте с настройками радио, но я рекомендую играть небольшими порциями и следить за эффектами. Несколько вещей в настройках конфигурации радио являются обязательными для правильной настройки, чтобы принимать или передавать что-либо (одно из таких странных требований - регистры TEST2/1/0!).

Если вы смотрели какие-либо мои выступления по rfcat, вы, вероятно, помните, что вам нужно перевести радио в состояние ОСТОЯНИЯ ПОКОЯ перед настройкой. (Я сказал это три раза подряд, с разными интонациями).

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

  • Если вы вносите изменения в прошивку
  • Если вы используете функциональность d.poke()
    • если вы используете d.setRFRegister(), это обрабатывается за вас
    • используйте d.setRFRegister()

Внешние проекты

ZWave Attack: https://github.com/initbrain/Z-Attack

Эпилог

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

@ и остальная команда разработчиков.

Комментарии
Войдите, чтобы оставить комментарий