Supported Devices

Mirage allows to use multiple devices in order to interact with the supported wireless communications protocols.

  • Each device is identified by a short string called interface

  • Some capabilities are associated to each device, indicating what actions are available

The following page describes the available devices and their capabilities.

Bluetooth Low Energy Devices

HCI Device

Class : mirage.libs.ble.BLEHCIDevice

_images/hci.jpg

This device allows to communicate with an HCI Device in order to use Bluetooth Low Energy protocol. The corresponding interfaces are : hciX (e.g. “hciX”)

The following capabilities are actually supported :

Capability

Available ?

SCANNING

yes

ADVERTISING

yes

SNIFFING_ADVERTISEMENTS

no

SNIFFING_NEW_CONNECTION

no

SNIFFING_EXISTING_CONNECTION

no

JAMMING_CONNECTIONS

no

JAMMING_ADVERTISEMENTS

no

HIJACKING_MASTER

no

HIJACKING_SLAVE

no

INJECTING

no

MITMING_EXISTING_CONNECTION

no

INITIATING_CONNECTION

yes

RECEIVING_CONNECTION

yes

COMMUNICATING_AS_MASTER

yes

COMMUNICATING_AS_SLAVE

yes

HCI_MONITORING

no

The following methods are shared and can be used directly from the corresponding Emitter and/or Receiver :

Shared Methods

Corresponding documentation

getConnections

mirage.libs.bt.BtHCIDevice.getConnections

switchConnection

mirage.libs.bt.BtHCIDevice.switchConnection

getCurrentConnection

mirage.libs.bt.BtHCIDevice.getCurrentConnection

getCurrentConnectionMode

mirage.libs.ble.BLEHCIDevice.getCurrentConnectionMode

getAddressByHandle

mirage.libs.bt.BtHCIDevice.getAddressByHandle

getCurrentHandle

mirage.libs.bt.BtHCIDevice.getCurrentHandle

isConnected

mirage.libs.bt.BtHCIDevice.isConnected

setScan

mirage.libs.ble.BLEHCIDevice.setScan

setAdvertising

mirage.libs.ble.BLEHCIDevice.setAdvertising

setAdvertisingParameters

mirage.libs.ble.BLEHCIDevice.setAdvertisingParameters

setScanningParameters

mirage.libs.ble.BLEHCIDevice.setScanningParameters

getAddress

mirage.libs.bt.BtHCIDevice.getAddress

setAddress

mirage.libs.ble.BLEHCIDevice.setAddress

getMode

mirage.libs.ble.BLEHCIDevice.getMode

getAddressMode

mirage.libs.ble.BLEHCIDevice.getAddressMode

getManufacturer

mirage.libs.bt.BtHCIDevice.getManufacturer

isAddressChangeable

mirage.libs.bt.BtHCIDevice.isAddressChangeable

encryptLink

mirage.libs.ble.BLEHCIDevice.encryptLink

The detailed API is available here .

Note

BLEHCIDevice inherits from BtHCIDevice, that’s why some shared methods are provided by the BtHCIDevice API.

BTLEJack Device

Class : mirage.libs.ble_utils.btlejack.BTLEJackDevice

_images/microbit.jpg

This device allows to communicate with a BTLEJack Device in order to sniff Bluetooth Low Energy protocol. The corresponding interfaces are : microbitX (e.g. “microbit0”) If you want to use a custom serial port in order to communicate with a Waveshare BLE400 or an NRF51 Development Kit embedding the BTLEJack firmware, you can use the following syntax while providing the interface to use: microbit:/dev/ttyXXXX (e.g. microbit:/dev/ttyACM0)

The following capabilities are actually supported :

Capability

Available ?

SCANNING

yes

ADVERTISING

no

SNIFFING_ADVERTISEMENTS

yes

SNIFFING_NEW_CONNECTION

yes

SNIFFING_EXISTING_CONNECTION

yes

JAMMING_CONNECTIONS

yes

JAMMING_ADVERTISEMENTS

yes

HIJACKING_MASTER

yes

HIJACKING_SLAVE

no

INJECTING

no

MITMING_EXISTING_CONNECTION

no

INITIATING_CONNECTION

no

RECEIVING_CONNECTION

no

COMMUNICATING_AS_MASTER

yes

COMMUNICATING_AS_SLAVE

no

HCI_MONITORING

no

The following methods are shared and can be used directly from the corresponding Emitter and/or Receiver :

Shared Methods

Corresponding documentation

getFirmwareVersion

mirage.libs.ble_utils.btlejack.BTLEJackDevice.getFirmwareVersion

getDeviceIndex

mirage.libs.ble_utils.btlejack.BTLEJackDevice.getDeviceIndex

setCRCChecking

mirage.libs.ble_utils.btlejack.BTLEJackDevice.setCRCChecking

setChannel

mirage.libs.ble_utils.btlejack.BTLEJackDevice.setChannel

getChannel

mirage.libs.ble_utils.btlejack.BTLEJackDevice.getChannel

sniffNewConnections

mirage.libs.ble_utils.btlejack.BTLEJackDevice.sniffNewConnections

sniffExistingConnections

mirage.libs.ble_utils.btlejack.BTLEJackDevice.sniffExistingConnections

sniffAdvertisements

mirage.libs.ble_utils.btlejack.BTLEJackDevice.sniffAdvertisements

jamAdvertisements

mirage.libs.ble_utils.btlejack.BTLEJackDevice.jamAdvertisements

setScan

mirage.libs.ble_utils.btlejack.BTLEJackDevice.setScan

setScanInterval

mirage.libs.ble_utils.btlejack.BTLEJackDevice.setScanInterval

getCurrentConnection

mirage.libs.ble_utils.btlejack.BTLEJackDevice.getCurrentConnection

isConnected

mirage.libs.ble_utils.btlejack.BTLEJackDevice.isConnected

isSynchronized

mirage.libs.ble_utils.btlejack.BTLEJackDevice.isSynchronized

getCurrentHandle

mirage.libs.ble_utils.btlejack.BTLEJackDevice.getCurrentHandle

getAccessAddress

mirage.libs.ble_utils.btlejack.BTLEJackDevice.getAccessAddress

getCrcInit

mirage.libs.ble_utils.btlejack.BTLEJackDevice.getCrcInit

getChannelMap

mirage.libs.ble_utils.btlejack.BTLEJackDevice.getChannelMap

getHopInterval

mirage.libs.ble_utils.btlejack.BTLEJackDevice.getHopInterval

getHopIncrement

mirage.libs.ble_utils.btlejack.BTLEJackDevice.getHopIncrement

setJamming

mirage.libs.ble_utils.btlejack.BTLEJackDevice.setJamming

setHijacking

mirage.libs.ble_utils.btlejack.BTLEJackDevice.setHijacking

setSweepingMode

mirage.libs.ble_utils.btlejack.BTLEJackDevice.setSweepingMode

The detailed API is available here .

Ubertooth Device

Class : mirage.libs.ble_utils.ubertooth.BLEUbertoothDevice

_images/ubertooth.jpg

This device allows to communicate with an Ubertooth Device in order to sniff Bluetooth Low Energy protocol. The corresponding interfaces are : ubertoothX (e.g. “ubertooth0”)

The following capabilities are actually supported :

Capability

Available ?

SCANNING

yes

ADVERTISING

no

SNIFFING_ADVERTISEMENTS

yes

SNIFFING_NEW_CONNECTION

yes

SNIFFING_EXISTING_CONNECTION

yes

JAMMING_CONNECTIONS

yes

JAMMING_ADVERTISEMENTS

no

HIJACKING_MASTER

no

HIJACKING_SLAVE

no

INJECTING

no

MITMING_EXISTING_CONNECTION

no

INITIATING_CONNECTION

no

RECEIVING_CONNECTION

no

COMMUNICATING_AS_MASTER

no

COMMUNICATING_AS_SLAVE

no

HCI_MONITORING

no

The following methods are shared and can be used directly from the corresponding Emitter and/or Receiver :

Shared Methods

Corresponding documentation

getFirmwareVersion

mirage.libs.ble_utils.ubertooth.BLEUbertoothDevice.getFirmwareVersion

getDeviceIndex

mirage.libs.ble_utils.ubertooth.BLEUbertoothDevice.getDeviceIndex

setCRCChecking

mirage.libs.ble_utils.ubertooth.BLEUbertoothDevice.setCRCChecking

setChannel

mirage.libs.ble_utils.ubertooth.BLEUbertoothDevice.setChannel

getChannel

mirage.libs.ble_utils.ubertooth.BLEUbertoothDevice.getChannel

sniffNewConnections

mirage.libs.ble_utils.ubertooth.BLEUbertoothDevice.sniffNewConnections

sniffExistingConnections

mirage.libs.ble_utils.ubertooth.BLEUbertoothDevice.sniffExistingConnections

sniffAdvertisements

mirage.libs.ble_utils.ubertooth.BLEUbertoothDevice.sniffAdvertisements

jamAdvertisements

mirage.libs.ble_utils.ubertooth.BLEUbertoothDevice.jamAdvertisements

setScan

mirage.libs.ble_utils.ubertooth.BLEUbertoothDevice.setScan

setScanInterval

mirage.libs.ble_utils.ubertooth.BLEUbertoothDevice.setScanInterval

isSynchronized

mirage.libs.ble_utils.ubertooth.BLEUbertoothDevice.isSynchronized

getAccessAddress

mirage.libs.ble_utils.ubertooth.BLEUbertoothDevice.getAccessAddress

getCrcInit

mirage.libs.ble_utils.ubertooth.BLEUbertoothDevice.getCrcInit

getChannelMap

mirage.libs.ble_utils.ubertooth.BLEUbertoothDevice.getChannelMap

getHopInterval

mirage.libs.ble_utils.ubertooth.BLEUbertoothDevice.getHopInterval

getHopIncrement

mirage.libs.ble_utils.ubertooth.BLEUbertoothDevice.getHopIncrement

setJamming

mirage.libs.ble_utils.ubertooth.BLEUbertoothDevice.setJamming

getMode

mirage.libs.ble_utils.ubertooth.BLEUbertoothDevice.getMode

getSerial

mirage.libs.ble_utils.ubertooth.BLEUbertoothDevice.getSerial

setSweepingMode

mirage.libs.ble_utils.ubertooth.BLEUbertoothDevice.setSweepingMode

The detailed API is available here .

NRFSniffer Device

Class : mirage.libs.ble_utils.nrfsniffer.NRFSnifferDevice

_images/nrfsniffer.jpg

This device allows to communicate with a NRFSniffer Device in order to sniff Bluetooth Low Energy protocol. The corresponding interfaces are : nrfsnifferX (e.g. “nrfsniffer0”) If you want to use a custom serial port in order to communicate with a Waveshare BLE400 or an NRF51 Development Kit embedding the NRFSniffer firmware, you can use the following syntax while providing the interface to use: nrfsniffer:/dev/ttyXXXX (e.g. nrfsniffer:/dev/ttyACM0)

The following capabilities are actually supported :

Capability

Available ?

SCANNING

yes

ADVERTISING

no

SNIFFING_ADVERTISEMENTS

yes

SNIFFING_NEW_CONNECTION

yes

SNIFFING_EXISTING_CONNECTION

no

JAMMING_CONNECTIONS

no

JAMMING_ADVERTISEMENTS

no

HIJACKING_MASTER

no

HIJACKING_SLAVE

no

INJECTING

no

MITMING_EXISTING_CONNECTION

no

INITIATING_CONNECTION

no

RECEIVING_CONNECTION

no

COMMUNICATING_AS_MASTER

no

COMMUNICATING_AS_SLAVE

no

HCI_MONITORING

no

The following methods are shared and can be used directly from the corresponding Emitter and/or Receiver :

Shared Methods

Corresponding documentation

getFirmwareVersion

mirage.libs.ble_utils.ubertooth.BLEUbertoothDevice.getFirmwareVersion

getDeviceIndex

mirage.libs.ble_utils.nrfsniffer.NRFSnifferDevice.getDeviceIndex

setCRCChecking

mirage.libs.ble_utils.nrfsniffer.NRFSnifferDevice.setCRCChecking

setChannel

mirage.libs.ble_utils.nrfsniffer.NRFSnifferDevice.setChannel

getChannel

mirage.libs.ble_utils.nrfsniffer.NRFSnifferDevice.getChannel

sniffNewConnections

mirage.libs.ble_utils.nrfsniffer.NRFSnifferDevice.sniffNewConnections

sniffAdvertisements

mirage.libs.ble_utils.nrfsniffer.NRFSnifferDevice.sniffAdvertisements

setScan

mirage.libs.ble_utils.nrfsniffer.NRFSnifferDevice.setScan

setScanInterval

mirage.libs.ble_utils.nrfsniffer.NRFSnifferDevice.setScanInterval

isSynchronized

mirage.libs.ble_utils.nrfsniffer.NRFSnifferDevice.isSynchronized

getAccessAddress

mirage.libs.ble_utils.nrfsniffer.NRFSnifferDevice.getAccessAddress

getCrcInit

mirage.libs.ble_utils.nrfsniffer.NRFSnifferDevice.getCrcInit

getChannelMap

mirage.libs.ble_utils.nrfsniffer.NRFSnifferDevice.getChannelMap

getHopInterval

mirage.libs.ble_utils.nrfsniffer.NRFSnifferDevice.getHopInterval

getHopIncrement

mirage.libs.ble_utils.nrfsniffer.NRFSnifferDevice.getHopIncrement

setSweepingMode

mirage.libs.ble_utils.nrfsniffer.NRFSnifferDevice.setSweepingMode

The detailed API is available here .

Sniffle Device

Class : mirage.libs.ble_utils.sniffle.SniffleDevice

_images/sniffle.jpg

This device allows to communicate with a Sniffle Device in order to interact with Bluetooth Low Energy protocol. The corresponding interfaces are : sniffleX (e.g. “sniffle0”) If you want to use a custom serial port, you can use the following syntax while providing the interface to use: sniffle:/dev/ttyXXXX (e.g. sniffle:/dev/ttyACM0)

The following capabilities are actually supported :

Capability

Available ?

SCANNING

yes

ADVERTISING

yes

SNIFFING_ADVERTISEMENTS

yes

SNIFFING_NEW_CONNECTION

yes

SNIFFING_EXISTING_CONNECTION

no

JAMMING_CONNECTIONS

no

JAMMING_ADVERTISEMENTS

no

INJECTING

no

MITMING_EXISTING_CONNECTION

no

HIJACKING_MASTER

no

HIJACKING_SLAVE

no

INITIATING_CONNECTION

yes

RECEIVING_CONNECTION

no

COMMUNICATING_AS_MASTER

yes

COMMUNICATING_AS_SLAVE

no

HCI_MONITORING

no

The following methods are shared and can be used directly from the corresponding Emitter and/or Receiver :

Shared Methods

Corresponding documentation

getFirmwareVersion

mirage.libs.ble_utils.sniffle.SniffleDevice.getFirmwareVersion

getDeviceIndex

mirage.libs.ble_utils.sniffle.SniffleDevice.getDeviceIndex

setCRCChecking

mirage.libs.ble_utils.sniffle.SniffleDevice.setCRCChecking

setChannel

mirage.libs.ble_utils.sniffle.SniffleDevice.setChannel

getChannel

mirage.libs.ble_utils.sniffle.SniffleDevice.getChannel

getConnections

mirage.libs.ble_utils.sniffle.SniffleDevice.getConnections

switchConnection

mirage.libs.ble_utils.sniffle.SniffleDevice.switchConnection

getCurrentConnection

mirage.libs.ble_utils.sniffle.SniffleDevice.getCurrentConnection

getCurrentHandle

mirage.libs.ble_utils.sniffle.SniffleDevice.getCurrentHandle

isConnected

mirage.libs.ble_utils.sniffle.SniffleDevice.isConnected

updateConnectionParameters

mirage.libs.ble_utils.sniffle.SniffleDevice.updateConnectionParameters

setAddress

mirage.libs.ble_utils.sniffle.SniffleDevice.setAddress

getAddress

mirage.libs.ble_utils.sniffle.SniffleDevice.getAddress

setAdvertising

mirage.libs.ble_utils.sniffle.SniffleDevice.setAdvertising

setAdvertisingParameters

mirage.libs.ble_utils.sniffle.SniffleDevice.setAdvertisingParameters

setScanningParameters

mirage.libs.ble_utils.sniffle.SniffleDevice.setScanningParameters

sniffNewConnections

mirage.libs.ble_utils.sniffle.SniffleDevice.sniffNewConnections

sniffAdvertisements

mirage.libs.ble_utils.sniffle.SniffleDevice.sniffAdvertisements

setSweepingMode

mirage.libs.ble_utils.sniffle.SniffleDevice.setSweepingMode

setScan

mirage.libs.ble_utils.sniffle.SniffleDevice.setScan

setScanInterval

mirage.libs.ble_utils.sniffle.SniffleDevice.setScanInterval

isSynchronized

mirage.libs.ble_utils.sniffle.SniffleDevice.isSynchronized

getAccessAddress

mirage.libs.ble_utils.sniffle.SniffleDevice.getAccessAddress

getCrcInit

mirage.libs.ble_utils.sniffle.SniffleDevice.getCrcInit

getChannelMap

mirage.libs.ble_utils.sniffle.SniffleDevice.getChannelMap

getHopInterval

mirage.libs.ble_utils.sniffle.SniffleDevice.getHopInterval

getHopIncrement

mirage.libs.ble_utils.sniffle.SniffleDevice.getHopIncrement

ButteRFly Device

Class : mirage.libs.ble_utils.butterfly.BLEButterflyDevice

_images/butterfly.jpg

This device allows to communicate with a ButteRFly Device in order to interact with Bluetooth Low Energy protocol. A ButteRFly Device is a nRF52840 dongle embedding ButteRFly firmware, you can find instructions to flash the corresponding firmware here . This device is needed to perform InjectaBLE attacks, such as packet injection into an established connection, slave or master hijacking, Man-in-the-Middle. The corresponding interfaces are : butterflyX (e.g. “butterfly0”)

The following capabilities are actually supported :

Capability

Available ?

SCANNING

yes

ADVERTISING

no

SNIFFING_ADVERTISEMENTS

yes

SNIFFING_NEW_CONNECTION

yes

SNIFFING_EXISTING_CONNECTION

no

JAMMING_CONNECTIONS

no

JAMMING_ADVERTISEMENTS

no

INJECTING

yes

MITMING_EXISTING_CONNECTION

yes

HIJACKING_MASTER

yes

HIJACKING_SLAVE

yes

INITIATING_CONNECTION

no

RECEIVING_CONNECTION

no

COMMUNICATING_AS_MASTER

no

COMMUNICATING_AS_SLAVE

no

HCI_MONITORING

no

The following methods are shared and can be used directly from the corresponding Emitter and/or Receiver :

Shared Methods

Corresponding documentation

getFirmwareVersion

mirage.libs.ble_utils.butterfly.BLEButterflyDevice.getFirmwareVersion

getDeviceIndex

mirage.libs.ble_utils.butterfly.BLEButterflyDevice.getDeviceIndex

getController

mirage.libs.ble_utils.butterfly.BLEButterflyDevice.getController

sniffNewConnections

mirage.libs.ble_utils.butterfly.BLEButterflyDevice.sniffNewConnections

isSynchronized

mirage.libs.ble_utils.butterfly.BLEButterflyDevice.isSynchronized

sniffAdvertisements

mirage.libs.ble_utils.butterfly.BLEButterflyDevice.sniffAdvertisements

getAccessAddress

mirage.libs.ble_utils.butterfly.BLEButterflyDevice.getAccessAddress

getCrcInit

mirage.libs.ble_utils.butterfly.BLEButterflyDevice.getCrcInit

getChannelMap

mirage.libs.ble_utils.butterfly.BLEButterflyDevice.getChannelMap

getHopInterval

mirage.libs.ble_utils.butterfly.BLEButterflyDevice.getHopInterval

getHopIncrement

mirage.libs.ble_utils.butterfly.BLEButterflyDevice.getHopIncrement

setChannel

mirage.libs.ble_utils.butterfly.BLEButterflyDevice.setChannel

getChannel

mirage.libs.ble_utils.butterfly.BLEButterflyDevice.getChannel

setScan

mirage.libs.ble_utils.butterfly.BLEButterflyDevice.setScan

setScanInterval

mirage.libs.ble_utils.butterfly.BLEButterflyDevice.setScanInterval

attachSubDevice

mirage.libs.ble_utils.butterfly.BLEButterflyDevice.attachSubDevice

detachSubDevice

mirage.libs.ble_utils.butterfly.BLEButterflyDevice.detachSubDevice

setMitm

mirage.libs.ble_utils.butterfly.BLEButterflyDevice.setMitm

setHijacking

mirage.libs.ble_utils.butterfly.BLEButterflyDevice.setHijacking

getSubInterfaces

mirage.libs.ble_utils.butterfly.BLEButterflyDevice.getSubInterfaces

getConnections

mirage.libs.ble_utils.butterfly.BLEButterflyDevice.getConnections

switchConnection

mirage.libs.ble_utils.butterfly.BLEButterflyDevice.switchConnection

getCurrentConnection

mirage.libs.ble_utils.butterfly.BLEButterflyDevice.getCurrentConnection

isConnected

mirage.libs.ble_utils.butterfly.BLEButterflyDevice.isConnected

HackRF Device

Class : mirage.libs.ble_utils.hackrf.BLEHackRFDevice

_images/hackrf.jpg

This device allows to communicate with a HackRF Device in order to interact with Bluetooth Low Energy protocol. HackRF support is experimental, the demodulator is slow and it can only deal with advertisements.

The corresponding interfaces are : hackrfX (e.g. “hackrf0”)

The following capabilities are actually supported :

Capability

Available ?

SCANNING

yes

ADVERTISING

yes

SNIFFING_ADVERTISEMENTS

yes

SNIFFING_NEW_CONNECTION

no

SNIFFING_EXISTING_CONNECTION

no

JAMMING_CONNECTIONS

no

JAMMING_ADVERTISEMENTS

no

INJECTING

no

MITMING_EXISTING_CONNECTION

no

HIJACKING_MASTER

no

HIJACKING_SLAVE

no

INITIATING_CONNECTION

no

RECEIVING_CONNECTION

no

COMMUNICATING_AS_MASTER

no

COMMUNICATING_AS_SLAVE

no

HCI_MONITORING

no

The following methods are shared and can be used directly from the corresponding Emitter and/or Receiver :

Shared Methods

Corresponding documentation

setChannel

mirage.libs.ble_utils.hackrf.BLEHackRFDevice.setChannel

getChannel

mirage.libs.ble_utils.hackrf.BLEHackRFDevice.getChannel

isConnected

mirage.libs.ble_utils.hackrf.BLEHackRFDevice.isConnected

setAddress

mirage.libs.ble_utils.hackrf.BLEHackRFDevice.setAddress

getAddress

mirage.libs.ble_utils.hackrf.BLEHackRFDevice.getAddress

sniffAdvertisements

mirage.libs.ble_utils.hackrf.BLEHackRFDevice.sniffAdvertisements

setAdvertising

mirage.libs.ble_utils.hackrf.BLEHackRFDevice.setAdvertising

setScanningParameters

mirage.libs.ble_utils.hackrf.BLEHackRFDevice.setScanningParameters

setAdvertisingParameters

mirage.libs.ble_utils.hackrf.BLEHackRFDevice.setAdvertisingParameters

setScan

mirage.libs.ble_utils.hackrf.BLEHackRFDevice.setScan

setScanInterval

mirage.libs.ble_utils.hackrf.BLEHackRFDevice.setScanInterval

getMode

mirage.libs.ble_utils.hackrf.BLEHackRFDevice.getMode

getFirmwareVersion

mirage.libs.ble_utils.hackrf.BLEHackRFDevice.getFirmwareVersion

getDeviceIndex

mirage.libs.ble_utils.hackrf.BLEHackRFDevice.getDeviceIndex

getSerial

mirage.libs.ble_utils.hackrf.BLEHackRFDevice.getSerial

getAPIVersion

mirage.libs.ble_utils.hackrf.BLEHackRFDevice.getAPIVersion

getBoardName

mirage.libs.ble_utils.hackrf.BLEHackRFDevice.getBoardName

getBoardID

mirage.libs.ble_utils.hackrf.BLEHackRFDevice.getBoardID

ADB Device

Class : mirage.libs.ble_utils.adb.ADBDevice

This device allows to communicate with an Android Device using adb in order to monitor Bluetooth Low Energy HCI packets.

The corresponding interfaces are : adbX (e.g. “adb0”)

The following capabilities are actually supported :

Capability

Available ?

SCANNING

no

ADVERTISING

no

SNIFFING_ADVERTISEMENTS

no

SNIFFING_NEW_CONNECTION

no

SNIFFING_EXISTING_CONNECTION

no

JAMMING_CONNECTIONS

no

JAMMING_ADVERTISEMENTS

no

HIJACKING_MASTER

no

HIJACKING_SLAVE

no

INJECTING

no

MITMING_EXISTING_CONNECTION

no

INITIATING_CONNECTION

no

RECEIVING_CONNECTION

no

COMMUNICATING_AS_MASTER

no

COMMUNICATING_AS_SLAVE

no

HCI_MONITORING

yes

The following methods are shared and can be used directly from the corresponding Emitter and/or Receiver :

Warning

  • You must install a recent version of adb in order to monitor a smartphone.

  • The full path to the binary adb should be present in the PATH environment variable.

  • You should enable the Developper mode, USB Debugging and Bluetooth logging on your smartphone.

If you don’t know how to configure your smartphone, please follow the instructions presented here.

The detailed API is available here .

HCIDump

Class : mirage.libs.ble_utils.hcidump.BLEHcidumpDevice

This device allows to monitor an HCI interface using hcidump.

The corresponding interfaces are : hcidumpX (e.g. “hcidump0” for monitoring the interface “hci0”).

The following capabilities are actually supported :

Capability

Available ?

SCANNING

no

ADVERTISING

no

SNIFFING_ADVERTISEMENTS

no

SNIFFING_NEW_CONNECTION

no

SNIFFING_EXISTING_CONNECTION

no

JAMMING_CONNECTIONS

no

JAMMING_ADVERTISEMENTS

no

HIJACKING_MASTER

no

HIJACKING_SLAVE

no

INJECTING

no

MITMING_EXISTING_CONNECTION

no

INITIATING_CONNECTION

no

RECEIVING_CONNECTION

no

COMMUNICATING_AS_MASTER

no

COMMUNICATING_AS_SLAVE

no

HCI_MONITORING

yes

The following methods are shared and can be used directly from the corresponding Emitter and/or Receiver :

Shared Methods

Corresponding documentation

getConnections

mirage.libs.ble_utils.hcidump.BLEHcidumpDevice.getConnections

switchConnection

mirage.libs.ble_utils.hcidump.BLEHcidumpDevice.switchConnection

getCurrentConnection

mirage.libs.ble_utils.hcidump.BLEHcidumpDevice.getCurrentConnection

getAddressByHandle

mirage.libs.ble_utils.hcidump.BLEHcidumpDevice.getAddressByHandle

getCurrentHandle

mirage.libs.ble_utils.hcidump.BLEHcidumpDevice.getCurrentHandle

getCurrentConnectionMode

mirage.libs.ble_utils.hcidump.BLEHcidumpDevice.getCurrentConnectionMode

isConnected

mirage.libs.ble_utils.hcidump.BLEHcidumpDevice.isConnected

getHCIInterface

mirage.libs.ble_utils.hcidump.BLEHcidumpDevice.getHCIInterface

getDeviceIndex

mirage.libs.ble_utils.hcidump.BLEHcidumpDevice.getDeviceIndex

Warning

  • You must install a recent version of hcidump in order to monitor an HCI device.

  • The full path to the binary hcidump should be present in the PATH environment variable.

The detailed API is available here .

BLE PCAP Files

Class : mirage.libs.ble_utils.pcap.BLEPCAPDevice

This device allows to communicate with a PCAP file in order to write and read Bluetooth Low Energy packets.

The corresponding interfaces are : <filename>.pcap (e.g. “out.pcap”)

  • If the file exists, the BLEPCAPDevice is in read mode, and the corresponding receiver is able to use it as a classic Bluetooth Low Energy sniffer.

  • If the file doesn’t exist, the BLEPCAPDevice is in write mode, and the corresponding emitter is able to write packets in the file.

The following capabilities are actually supported :

Capability

Available ?

SCANNING

no

ADVERTISING

no

SNIFFING_ADVERTISEMENTS

yes

SNIFFING_NEW_CONNECTION

yes

SNIFFING_EXISTING_CONNECTION

no

JAMMING_CONNECTIONS

no

JAMMING_ADVERTISEMENTS

no

HIJACKING_MASTER

no

HIJACKING_SLAVE

no

INJECTING

no

MITMING_EXISTING_CONNECTION

no

INITIATING_CONNECTION

no

RECEIVING_CONNECTION

no

COMMUNICATING_AS_MASTER

no

COMMUNICATING_AS_SLAVE

no

HCI_MONITORING

no

The following methods are shared and can be used directly from the corresponding Emitter and/or Receiver :

Shared Methods

Corresponding documentation

sniffNewConnections

mirage.libs.ble_utils.pcap.BLEPCAPDevice.sniffNewConnections

sniffAdvertisements

mirage.libs.ble_utils.pcap.BLEPCAPDevice.sniffAdvertisements

getAccessAddress

mirage.libs.ble_utils.pcap.BLEPCAPDevice.getAccessAddress

getCrcInit

mirage.libs.ble_utils.pcap.BLEPCAPDevice.getCrcInit

getChannelMap

mirage.libs.ble_utils.pcap.BLEPCAPDevice.getChannelMap

getHopInterval

mirage.libs.ble_utils.pcap.BLEPCAPDevice.getHopInterval

getHopIncrement

mirage.libs.ble_utils.pcap.BLEPCAPDevice.getHopIncrement

isSynchronized

mirage.libs.ble_utils.pcap.BLEPCAPDevice.isSynchronized

getMode

mirage.libs.ble_utils.pcap.BLEPCAPDevice.getMode

Warning

This PCAP Device uses the DLT 256, and can be used to read or write some Link Layer packets. It is not compatible with a PCAP file containing HCI frames.

The detailed API is available here .

Enhanced ShockBurst Devices

ESB RFStorm Device

Class : mirage.libs.esb_utils.rfstorm.ESBRFStormDevice

_images/rfstorm.jpg

This device allows to interact with a NRF24-based device embedding the RFStorm firmware (also called nrf-research-firmware). This firmware can be installed on a Crazy Radio PA or some Logitech Unifying dongle, please refer to the documentation provided by Bastille Research for more details.

The corresponding interfaces are : rfstormX (e.g. “rfstorm0”).

The following capabilities are currently supported :

Capability

Available ?

INJECTING

yes

SNIFFING_NORMAL

yes

SNIFFING_PROMISCUOUS

yes

SNIFFING_GENERIC_PROMISCUOUS

yes

ACTIVE_SCANNING

yes

The following methods are shared and can be used directly from the corresponding Emitter and/or Receiver :

Shared Methods

Corresponding documentation

setChannel

mirage.libs.esb_utils.rfstorm.ESBRFStormDevice.setChannel

getChannel

mirage.libs.esb_utils.rfstorm.ESBRFStormDevice.getChannel

getDeviceIndex

mirage.libs.esb_utils.rfstorm.ESBRFStormDevice.getDeviceIndex

enterPromiscuousMode

mirage.libs.esb_utils.rfstorm.ESBRFStormDevice.enterPromiscuousMode

enterGenericPromiscuousMode

mirage.libs.esb_utils.rfstorm.ESBRFStormDevice.enterGenericPromiscuousMode

enterSnifferMode

mirage.libs.esb_utils.rfstorm.ESBRFStormDevice.enterSnifferMode

getMode

mirage.libs.esb_utils.rfstorm.ESBRFStormDevice.getMode

getAddress

mirage.libs.esb_utils.rfstorm.ESBRFStormDevice.getAddress

setAddress

mirage.libs.esb_utils.rfstorm.ESBRFStormDevice.setAddress

isAutoAckEnabled

mirage.libs.esb_utils.rfstorm.ESBRFStormDevice.isAutoAckEnabled

enableAutoAck

mirage.libs.esb_utils.rfstorm.ESBRFStormDevice.enableAutoAck

disableAutoAck

mirage.libs.esb_utils.rfstorm.ESBRFStormDevice.disableAutoAck

scan

mirage.libs.esb_utils.rfstorm.ESBRFStormDevice.scan

The detailed API is available here .

ESB PCAP Files

Class : mirage.libs.ble_utils.pcap.ESBPCAPDevice

This device allows to communicate with a PCAP file in order to write and read Enhanced ShockBurst packets.

The corresponding interfaces are : <filename>.pcap (e.g. “out.pcap”)

  • If the file exists, the ESBPCAPDevice is in read mode, and the corresponding receiver is able to use it as a classic Enhanced ShockBurst sniffer.

  • If the file doesn’t exist, the ESBPCAPDevice is in write mode, and the corresponding emitter is able to write packets in the file.

The following capabilities are actually supported :

Capability

Available ?

INJECTING

yes

SNIFFING_NORMAL

yes

SNIFFING_PROMISCUOUS

yes

SNIFFING_GENERIC_PROMISCUOUS

no

ACTIVE_SCANNING

yes

The following methods are shared and can be used directly from the corresponding Emitter and/or Receiver :

Shared Methods

Corresponding documentation

setChannel

mirage.libs.esb_utils.pcap.ESBPCAPDevice.setChannel

getChannel

mirage.libs.esb_utils.pcap.ESBPCAPDevice.getChannel

enterPromiscuousMode

mirage.libs.esb_utils.pcap.ESBPCAPDevice.enterPromiscuousMode

enterSnifferMode

mirage.libs.esb_utils.pcap.ESBPCAPDevice.enterSnifferMode

getMode

mirage.libs.esb_utils.pcap.ESBPCAPDevice.getMode

generateStream

mirage.libs.esb_utils.pcap.ESBPCAPDevice.generateStream

scan

mirage.libs.esb_utils.pcap.ESBPCAPDevice.scan

Warning

This PCAP Device uses the DLT 148.

The detailed API is available here .

Mosart Devices

Mosart RFStorm Device

Class : mirage.libs.mosart_utils.rfstorm.MosartRFStormDevice

_images/rfstorm.jpg

This device allows to interact with a NRF24-based device embedding the RFStorm firmware (also called nrf-research-firmware). This firmware can be installed on a Crazy Radio PA or some Logitech Unifying dongle, please refer to the documentation provided by Bastille Research for more details.

The corresponding interfaces are : rfstormX (e.g. “rfstorm0”).

The following capabilities are currently supported :

Capability

Available ?

SNIFFING_NORMAL

yes

SNIFFING_PROMISCUOUS

yes

INJECTING

yes

INJECTING_SYNC

yes

The following methods are shared and can be used directly from the corresponding Emitter and/or Receiver :

Shared Methods

Corresponding documentation

setChannel

mirage.libs.mosart_utils.rfstorm.MosartRFStormDevice.setChannel

getChannel

mirage.libs.mosart_utils.rfstorm.MosartRFStormDevice.getChannel

getDeviceIndex

mirage.libs.mosart_utils.rfstorm.MosartRFStormDevice.getDeviceIndex

enterPromiscuousMode

mirage.libs.mosart_utils.rfstorm.MosartRFStormDevice.enterPromiscuousMode

enterSnifferMode

mirage.libs.mosart_utils.rfstorm.MosartRFStormDevice.enterSnifferMode

getMode

mirage.libs.mosart_utils.rfstorm.MosartRFStormDevice.getMode

getAddress

mirage.libs.mosart_utils.rfstorm.MosartRFStormDevice.getAddress

setAddress

mirage.libs.mosart_utils.rfstorm.MosartRFStormDevice.setAddress

enableDonglePackets

mirage.libs.mosart_utils.rfstorm.MosartRFStormDevice.enableDonglePackets

disableDonglePackets

mirage.libs.mosart_utils.rfstorm.MosartRFStormDevice.disableDonglePackets

enableSync

mirage.libs.mosart_utils.rfstorm.MosartRFStormDevice.enableSync

disableSync

mirage.libs.mosart_utils.rfstorm.MosartRFStormDevice.disableSync

The detailed API is available here .

Mosart PCAP Files

Class : mirage.libs.mosart_utils.pcap.MosartPCAPDevice

This device allows to communicate with a PCAP file in order to write and read Mosart packets.

The corresponding interfaces are : <filename>.pcap (e.g. “out.pcap”)

  • If the file exists, the MosartPCAPDevice is in read mode, and the corresponding receiver is able to use it as a classic Mosart sniffer.

  • If the file doesn’t exist, the MosartPCAPDevice is in write mode, and the corresponding emitter is able to write packets in the file.

The following capabilities are actually supported :

Capability

Available ?

SNIFFING_NORMAL

yes

SNIFFING_PROMISCUOUS

yes

INJECTING

yes

INJECTING_SYNC

no

The following methods are shared and can be used directly from the corresponding Emitter and/or Receiver :

Shared Methods

Corresponding documentation

setChannel

mirage.libs.mosart_utils.pcap.MosartPCAPDevice.setChannel

getChannel

mirage.libs.mosart_utils.pcap.MosartPCAPDevice.getChannel

enterPromiscuousMode

mirage.libs.mosart_utils.pcap.MosartPCAPDevice.enterPromiscuousMode

enterSnifferMode

mirage.libs.mosart_utils.pcap.MosartPCAPDevice.enterSnifferMode

getMode

mirage.libs.mosart_utils.pcap.MosartPCAPDevice.getMode

generateStream

mirage.libs.mosart_utils.pcap.MosartPCAPDevice.generateStream

enableDonglePackets

mirage.libs.mosart_utils.pcap.MosartPCAPDevice.enableDonglePackets

disableDonglePackets

mirage.libs.mosart_utils.pcap.MosartPCAPDevice.disableDonglePackets

Warning

This PCAP Device uses the DLT 149.

The detailed API is available here .

WiFi Devices

WiFi Device

Class : mirage.libs.wifi.WifiDevice

_images/wifi.jpg

This device allows to communicate with a WiFi Device. The corresponding interfaces are : wlanX (e.g. “wlanX”)

The following capabilities are currently supported :

Capability

Available ?

SCANNING

yes

MONITORING

yes

COMMUNICATING_AS_ACCESS_POINT

yes

COMMUNICATING_AS_STATION

yes

JAMMING

no

The following methods are shared and can be used directly from the corresponding Emitter and/or Receiver :

Shared Methods

Corresponding documentation

setChannel

mirage.libs.wifi.WifiDevice.setChannel

getChannel

mirage.libs.wifi.WifiDevice.getChannel

setFrequency

mirage.libs.wifi.WifiDevice.setFrequency

getFrequency

mirage.libs.wifi.WifiDevice.getFrequency

setMonitorMode

mirage.libs.wifi.WifiDevice.setMonitorMode

getAddress

mirage.libs.wifi.WifiDevice.getAddress

setMode

mirage.libs.wifi.WifiDevice.setMode

getMode

mirage.libs.wifi.WifiDevice.getMode

The detailed API is available here .

Zigbee Devices

RZUSBStick Device

Class : mirage.libs.zigbee_utils.rzusbstick.RZUSBStickDevice

_images/rzusbstick.jpg

This device allows to communicate with a Raven RZUSBStick Device. The corresponding interfaces are : rzusbstickX (e.g. “rzusbstickX”)

The following capabilities are currently supported :

Capability

Available ?

SNIFFING

yes

INJECTING

yes

COMMUNICATING_AS_COORDINATOR

yes

COMMUNICATING_AS_ROUTER

yes

COMMUNICATING_AS_END_DEVICE

yes

JAMMING

yes

Warning

Some features provided by this hardware seems unstable :

  • A small amount of time is required to switch from TX to RX, so some frames may be missing

  • The jamming feature seems to send a very short signal which is not strong and long enough to jam a Zigbee channel

I’m not sure if the problem is linked to my hardware or if the Killerbee firmare is buggy.

The following methods are shared and can be used directly from the corresponding Emitter and/or Receiver :

Shared Methods

Corresponding documentation

setChannel

mirage.libs.zigbee_utils.rzusbstick.RZUSBStickDevice.setChannel

getChannel

mirage.libs.zigbee_utils.rzusbstick.RZUSBStickDevice.getChannel

enableJamming

mirage.libs.zigbee_utils.rzusbstick.RZUSBStickDevice.enableJamming

disableJamming

mirage.libs.zigbee_utils.rzusbstick.RZUSBStickDevice.disableJamming

getMode

mirage.libs.zigbee_utils.rzusbstick.RZUSBStickDevice.getMode

getFirmwareVersion

mirage.libs.zigbee_utils.rzusbstick.RZUSBStickDevice.getFirmwareVersion

getSerial

mirage.libs.zigbee_utils.rzusbstick.RZUSBStickDevice.getSerial

getDeviceIndex

mirage.libs.zigbee_utils.rzusbstick.RZUSBStickDevice.getDeviceIndex

The detailed API is available here .

HackRF Device

Class : mirage.libs.zigbee_utils.hackrf.ZigbeeHackRFDevice

_images/hackrf.jpg

This device allows to communicate with a HackRF in order to interact with the Zigbee protocol. HackRF support is experimental, the demodulator is slow !

The following capabilities are actually supported :

Capability

Available ?

SNIFFING

yes

INJECTING

yes

COMMUNICATING_AS_COORDINATOR

no

COMMUNICATING_AS_ROUTER

no

COMMUNICATING_AS_END_DEVICE

no

JAMMING

no

The following methods are shared and can be used directly from the corresponding Emitter and/or Receiver :

Shared Methods

Corresponding documentation

setChannel

mirage.libs.zigbee_utils.hackrf.ZigbeeHackRFDevice.setChannel

getChannel

mirage.libs.zigbee_utils.hackrf.ZigbeeHackRFDevice.getChannel

getFirmwareVersion

mirage.libs.zigbee_utils.hackrf.ZigbeeHackRFDevice.getFirmwareVersion

getDeviceIndex

mirage.libs.zigbee_utils.hackrf.ZigbeeHackRFDevice.getDeviceIndex

getSerial

mirage.libs.zigbee_utils.hackrf.ZigbeeHackRFDevice.getSerial

getAPIVersion

mirage.libs.zigbee_utils.hackrf.ZigbeeHackRFDevice.getAPIVersion

getBoardName

mirage.libs.zigbee_utils.hackrf.ZigbeeHackRFDevice.getBoardName

getBoardID

mirage.libs.zigbee_utils.hackrf.ZigbeeHackRFDevice.getBoardID

Zigbee PCAP Files

Class : mirage.libs.zigbee_utils.pcap.ZigbeePCAPDevice

This device allows to communicate with a PCAP file in order to write and read Zigbee packets.

The corresponding interfaces are : <filename>.pcap (e.g. “out.pcap”)

  • If the file exists, the ZigbeePCAPDevice is in read mode, and the corresponding receiver is able to use it as a classic Zigbee sniffer.

  • If the file doesn’t exist, the ZigbeePCAPDevice is in write mode, and the corresponding emitter is able to write packets in the file.

The following capabilities are actually supported :

Capability

Available ?

SNIFFING

yes

INJECTING

yes

COMMUNICATING_AS_COORDINATOR

no

COMMUNICATING_AS_ROUTER

no

COMMUNICATING_AS_END_DEVICE

no

JAMMING

no

Warning

This PCAP Device uses the DLT 195.

The following methods are shared and can be used directly from the corresponding Emitter and/or Receiver :

Shared Methods

Corresponding documentation

setChannel

mirage.libs.zigbee_utils.pcap.ZigbeePCAPDevice.setChannel

getChannel

mirage.libs.zigbee_utils.pcap.ZigbeePCAPDevice.getChannel

generateStream

mirage.libs.zigbee_utils.pcap.ZigbeePCAPDevice.generateStream

getMode

mirage.libs.zigbee_utils.pcap.ZigbeePCAPDevice.getMode

The detailed API is available here .

Infrared Radiations Devices

IRMA Device

Class : mirage.libs.ir_utils.irma.IRMADevice

_images/irma_device.png

This device allows to communicate with an IRMA device in order to sniff and inject IR signals. The corresponding interfaces are : irmaX (e.g. “irma0”).

The following capabilities are actually supported :

Capability

Available ?

SNIFFING

yes

INJECTING

yes

CHANGING_FREQUENCY

yes

Warning

This device has been created in order to interact with IR signals using Mirage. It requires an Arduino Uno or Mini, and the electronic schematic and firmware source code are released as open source documents. You can download the resources needed to build this device here.

The following methods are shared and can be used directly from the corresponding Emitter and/or Receiver :

Shared Methods

Corresponding documentation

setFrequency

mirage.libs.ir_utils.irma.IRMADevice.setFrequency

getFrequency

mirage.libs.ir_utils.irma.IRMADevice.getFrequency

waitData

mirage.libs.ir_utils.irma.IRMADevice.waitData

reset

mirage.libs.ir_utils.irma.IRMADevice.reset

getSerialPort

mirage.libs.ir_utils.irma.IRMADevice.getSerialPort

getDeviceIndex

mirage.libs.ir_utils.irma.IRMADevice.getDeviceIndex

The detailed API is available here .