Проблема
Пришла в наш двор беда. Инициативная группа установила шлагбаумы, а ключи раздали только избранным.
Печально, конечно, но надо что-то с этим делать. Пока альтернативная инициативная группа пытается юридически воздействовать на беспредельщиков, я пытаюсь как-то воздествовать на шлагбаумы технически. Просто физически сломать их было бы, конечно, проще, но ведь их починят.
Поэтому родалсь мысль либо сграбить коды радиобрелков из эфира и клонировать брелок, либо, если клонировать не получится - просто сделать глушилку, чтобы все были в равных условиях и шлаги не открывались ни у кого.
Матчасть
Что может понадобится для клонирования радиобрелка?
Самый простой вариант - оригинальный радиобрелок есть в наличии и код его статический. В этом случае на http://aliexpress.com/ покупается китайская “болванка” брелка и он клонируется буквально за пару минут.
Например такая -
Второй вариант - код статический, но брелка в наличии нет. В этом случае нужно сграбить код из эфира и воспроизвести его для записи на болванку. Это реалистичный для исполнения сценарий.
Для граббинга радиосигнала понадобится девайс - SDR (Software Defined Radio). Я купил за 7 долларов на aliexpress тюнер на базе RTL2832U+R820T2:
Для того чтобы воспроизвести сграбленный сигнал и записать его на “болванку” понадобится трансмиттер. У меня в закромах оказался трансмиттер TexasInstruments на базе чипа CC1111-F32. Он входил в состав комплекта для разработчиков MSP430 MCU ez Chronos, который в свое время был приобретен примерно за $140:
Вот сам трансмиттер:
У именно этого варианта есть один минус - у него нет разъема и провода для прошивки к нему нужно припаивать.
Но оказалось, что нормальный девайс с разъемами стоит неприлично дорого (примерно $70).
Для того чтобы воспроизвести сграбленный сигнал в этот трансмиттер надо залить прошивку, которая может работать совместно с утилитой rfcat.
Для прошивания CC1111-F32 нужен программатор - SmartRF04, который стоит около 5 баксов:
Софт
- Для прослушивания эфира есть несколько разных тулзов. Под разные ОС. Для windows есть SDRSharp (SDR#), который без регистрации можно скачать, например, тут: http://airspy.com/download/
- Но я работаю под Ubuntu Linux и поэтому пользуюсь связкой rtl-sdr + GQRX.
- Для декодирования непосредственно из эфира можно пользоваться rtl_433. Эта утилитка слушает эфир и в реальном времени может декодировать битовые последовательности, а также знает некоторые протоколы и способна выдавать уже расшифрованные читабельные данные.
- Для прошивки CC1111 понадобится rfcat и
Подготовка CC1111 для работы с rfcat
* Chronos Dongle Details -------------------------------- | | | RST 1 2 TP ------ | GND 3 4 VCC USB | | DC P2.2 5 6 P2.1 DD ------ | Chronos | -------------------------------- Chronos CC1111 PIN Name PIN Name RST 1 2 GND 3 4 Vcc DC(P2.2) 5 6 DD(P2.1)
Прошивать можно утилитами от TexasInstruments - SmartRF Flash Programmer и SmartRF Studio или GoodFet.
Подготовка CC1111 для работы с rfcat сводится к прошивке последовательно двух файликов - bootloader и собственно прошивки.
Для этого:
1. Скачиваем архив rfcat и распаковываем его. Ставим SmartRF Flash Programmer в Windows 7. Драйверы для программатора должны установиться автоматически.
2. Подключаем/подпаиваем кабель от программатора к CC1111.
3. Подключаем CC1111 к разъему USB на компе с SmartRF Flash Programmer.
4. Подключаем кабель от CC1111 к программатору SmartRF.
5. Подключаем программатор SmartRF к разъему USB на компе с SmartRF Flash Programmer.
6. Запускаем SmartRF Flash Programmer. Софтина может попросить обновить фирмварь в программаторе SmartRF. Можно согласиться и выбрать в выпадающем списке “Update EB Firmware”.
7. Дальше в выпадающем списке выбираем “Program CCxxxx SoC or MSP430“
8. Убеждаемся, что программа корректно определила Chip Type и EB type
9. Дальше выбираем файл с прошивкой - rfcat_130515\firmware\bins\RfCatDonsCCBootloader-130515.hex и выбираем опцию Erase, program and verify и наконец жмем Perform actions
10. После прошивки Windows на пару секунд потеряет CC1111, но потом найдет снова.
11. Теперь нужно прошить второй файл - rfcat_130515\firmware\bins\RfCatDons-130515.hex. \\Повторяем прошивку, но теперь еще ставим галочку “Write protect boot block” и жмем Perform actions
12. Отключаем кабель от CC1111 и извлекаем его из USB.
Теперь CC1111 готов для работы с rfcat
Прошивка с помощью cctool
Из-под linux и MacOS прошивать СС1111 можно с помощью cctool. На всякий случай утащил к себе: cc-tool-0.26-src.tgz
Эта утилитка поддерживает китайский SmartRF04 (ID 11a0:eb20 Chipcon AS).
Ставим зависимости:
sudo apt-get install libusb-1.0 libboost-all-dev
Распаковываем и переходим в папку с cctool
cd cc-tool/
Копируем правила udev и рестартуем сервис:
sudo cp ./udev/90-cc-debugger.rules /etc/udev/rules.d/ sudo /etc/init.d/udev restart
Собираем и ставим:
./configure make sudo make install
После этого подключаем CC1111 к SmartRF04EB и пробуем запустить. При запуске без параметров CC1111 моргнет лампочкой и прога определит программатор и сам девайс:
$ sudo cc-tool Programmer: SmartRF04DD Target: CC1111 No actions specified
Делаем бекап прошивки:
sudo cc-tool -r ./CC1111_USB_Chronos_backup.hex Programmer: SmartRF04DD Target: CC1111 Reading flash (32 KB)... Completed (8.02 s.)
И дальше по очереди прошиваем RfCatChronos-150225.hex и RfCatChronosCCBootloader-150225.hex из папки распакованного rfcat - rfcat_150225/firmware/bins/.
$ sudo cc-tool -v -e -w RfCatChronosCCBootloader-150225.hex Programmer: SmartRF04DD Target: CC1111 Erasing flash... Completed Writing flash (14 KB)... Completed (4.41 s.) Verifying flash... Completed (0.66 s.) $ sudo cc-tool -v -e -w RfCatChronos-150225.hex Programmer: SmartRF04DD Target: CC1111 Erasing flash... Completed Writing flash (14 KB)... Completed (4.41 s.) Verifying flash... Completed (0.66 s.)
Если система говорит:
Error occured: libusb_control_transfer (out) failed, Pipe error
то в моем случае было достаточно нажать кнопку RESET на SmartRF04 и снова запустить cc-tool.
В результате прошивки CC1111 стал определяться так:
$ lsusb Bus 004 Device 009: ID 1d50:6047 OpenMoko, Inc.
Собираем и используем rfcat
На всякий случай ставим зависимости:
sudo apt-get install libusb-dev python-usb
Распаковываем, переходим в папку с rfcat и устанавливаем:
cd ~/rfcat_150225/ sudo python setup.py install
Копируем файлик с правилами udev из папки rfcat:
sudo cp etc/udev/rules.d/20-rfcat.rules /etc/udev/rules.d sudo udevadm control --reload-rules
Теперь можем запустить:
rfcat -r
Первые попытки декодировать сигнал
Для того чтобы что-то передавать с помощью rfcat необходимо перехватить и декодировать сигнал.
Под декодированием я понимаю определение скорости передачи (baud rate) и информационного наполнения посылки.
Имеем - брелок CAME TOP 434NA на 433,92 MHz. 4 кнопки. Код - статический.
Подключаем тюнер, запускаем rtl_433 и смотрим:
rtl_433 -a
Тут параметр -a заставляет rtl_433 выводить то что перехвачено, без декодирования формата сообщений (просто программа знает форматы сообщений нескольких десятков устройств и способна в реальном времени декодировать посылаемую информацию).
Также можно поиграть с папаметром -l. Он задает уровень сигнала и по умолчанию равен 8000 и принимает значения до 32767.
Первая кнопка:
[00] {12} 75 60 : 01110101 0110
Вторая кнопка:
[00] {12} 75 50 : 01110101 0101
Третья кнопка:
[00] {12} 78 80 : 01111000 1000
Четвертая кнопка:
[00] {12} ef a0 : 11101111 1010
Судя по всему тут настроены две первые кнопки. И первые биты - это серийный номер брелка, а последние - команда.
Теперь попробуем записать эти же сигналы с помощью Gqrx и посмотрим на них в Audacity.
USB SDR с функцией передатчика
https://xakep.ru/2018/08/06/diy-sdr/
Оказалось, использовать в качестве передатчика можно и совсем не для этого придуманные устройства. А именно - адаптер USB-VGA на базе чипа Fresco Logic FL2000.
Links
http://andrewmohawk.com/2012/09/06/hacking-fixed-key-remotes/
http://v3gard.com/2014/12/hacking-garage-door-remote-controllers/
https://xakep.ru/2014/10/31/rtl-sdr-first-steps/
https://code.google.com/p/rfcat/downloads/list
http://www.wes.id.au/2013/07/decoding-and-sending-433mhz-rf-codes-with-arduino-and-rc-switch/ http://travisgoodspeed.blogspot.ru/2011/01/generic-cc1110-sniffing-shellcode-and.html http://adamsblog.aperturelabs.com/2013/03/you-can-ring-my-bell-adventures-in-sub.html
https://github.com/dominicgs/USBProxy-CC1111
http://blog.thelifeofkenneth.com/2011/04/reprogramming-ez430-chronos-rf-dongle.html
http://mightydevices.com/?p=300
Ликбез по схемам кодирования - ASK, OOK, PSK и прочее
Крутые хакерские девайсы https://greatscottgadgets.com/hackrf/
Декодирование Keeloq ASK с помощью GNU Radio
http://zr6aic.blogspot.ru/2013/05/how-to-do-afsk-and-psk-demodulation.html
Discussion