mirage.libs.mosart_utils package¶
Submodules¶
mirage.libs.mosart_utils.rfstorm module¶
-
class
mirage.libs.mosart_utils.rfstorm.
MosartRFStormDevice
(interface)¶ Bases:
mirage.libs.wireless_utils.device.Device
This device allows to communicate with a NRF24 Device using the RFStorm firmware from Bastille in order to sniff and inject Mosart frames. The corresponding interfaces are :
rfstormX
(e.g. “rfstorm0”)The following capabilities are actually supported :
Capability
Available ?
SNIFFING_NORMAL
yes
SNIFFING_PROMISCUOUS
yes
INJECTING
yes
INJECTING_SYNC
yes
Warning
The RFStorm firmware can be used with a crazyRadio PA Dongle or with a Logitech Unifying receiver. The firmware can be found here <https://github.com/BastilleResearch/nrf-research-firmware>.
-
close
()¶ This method closes the device.
-
disableDonglePackets
()¶ This method enables the reception of dongle packets.
- Example
>>> device.disableDonglePackets()
Note
This method is a shared method and can be called from the corresponding Emitters / Receivers.
-
disableSync
()¶ This method disables the synchronization mode. The frames transmitted by a Mosart mouse or keyboard are synchronized with the synchronization packets transmitted by the dongle. If the synchronization mode is enabled, every transmitted frame will be synchronized using these packets. If the synchronization mode is disabled, every transmitted frame will be sent as soon as possible.
- Example
>>> device.enableSync()
Note
This method is a shared method and can be called from the corresponding Emitters / Receivers.
-
enableDonglePackets
()¶ This method enables the reception of dongle packets.
- Example
>>> device.enableDonglePackets()
Note
This method is a shared method and can be called from the corresponding Emitters / Receivers.
-
enableSync
()¶ This method enables the synchronization mode. The frames transmitted by a Mosart mouse or keyboard are synchronized with the synchronization packets transmitted by the dongle. If the synchronization mode is enabled, every transmitted frame will be synchronized using these packets. If the synchronization mode is disabled, every transmitted frame will be sent as soon as possible.
- Example
>>> device.enableSync()
Note
This method is a shared method and can be called from the corresponding Emitters / Receivers.
-
enterPromiscuousMode
()¶ This method allows to put your device into promiscuous mode.
Note
This method is a shared method and can be called from the corresponding Emitters / Receivers.
-
enterSnifferMode
(address)¶ This method allows to put your device into sniffer mode. You have to provide an address to follow.
- Parameters
address (str) – address to follow as string (e.g. ‘11:22:33:44’)
Note
This method is a shared method and can be called from the corresponding Emitters / Receivers.
-
getAddress
()¶ This method returns the address actually in use (sniffer mode only).
- Returns
address in use (e.g. ‘11:22:33:44’)
- Return type
str
- Example
>>> device.getAddress() '11:22:33:44'
Note
This method is a shared method and can be called from the corresponding Emitters / Receivers.
-
getChannel
()¶ This method returns the channel actually in use.
- Returns
channel in use
- Return type
int
- Example
>>> device.getChannel() 37 >>> device.setChannel(channel=38) >>> device.getChannel() 38
Note
This method is a shared method and can be called from the corresponding Emitters / Receivers.
-
getDeviceIndex
()¶ This method returns the index of the current RFStorm device.
- Returns
device’s index
- Return type
int
- Example
>>> device.getDeviceIndex() 0
Note
This method is a shared method and can be called from the corresponding Emitters / Receivers.
-
getMode
()¶ This method returns the current mode in use (RFStorm device can be set in three modes: PROMISCUOUS, SNIFFER)
- Returns
current mode in use
- Return type
str
- Example
>>> device.enterSnifferMode('AA:BB:CC:DD') >>> device.getMode() 'SNIFFER'
Note
This method is a shared method and can be called from the corresponding Emitters / Receivers.
-
init
()¶ This method initializes the device.
-
isUp
()¶ This method allows to check if the device is initialized and available for use.
- Returns
boolean indicating if the device is up
- Return type
bool
-
recv
()¶ This method receives some datas. If no data is available, this method returns None.
- Parameters
data – raw representation of the received data
-
classmethod
resetRFStorm
(index=0)¶
-
send
(pkt)¶ This method sends some datas.
- Parameters
data – raw representation of the data to send
-
setAddress
(address)¶ This method changes the address to use (sniffer mode only).
- Parameters
address (str) – address to use (e.g. ‘11:22:33:44’)
- Example
>>> device.setAddress('11:22:33:44')
Note
This method is a shared method and can be called from the corresponding Emitters / Receivers.
-
setChannel
(channel)¶ This method changes the channel actually in use by the provided channel.
- Parameters
channel (int) – new channel
- Example
>>> device.getChannel() 37 >>> device.setChannel(channel=38) >>> device.getChannel() 38
Note
This method is a shared method and can be called from the corresponding Emitters / Receivers.
-
mirage.libs.mosart_utils.dissectors module¶
-
class
mirage.libs.mosart_utils.dissectors.
MosartKeystroke
(data=b'', length=- 1, content={}, *args, **kwargs)¶ Bases:
mirage.libs.wireless_utils.dissectors.Dissector
This class is a dissector for the Mosart keystroke payload. It inherits from
Dissector
.- The following fields are available in the data structure :
hidCode : integer indicating the hid code of the key
modifiers : integer indicating the modifiers code of the key
- Example
>>> MosartKeystroke(hidCode=5,modifiers=0).data.hex() '812d' >>> MosartKeystroke(data=bytes.fromhex("812d")).hidCode 5 >>> MosartKeystroke(data=bytes.fromhex("812d")).modifiers 0
-
build
()¶ This method converts the raw bytes to the corresponding data structure.
- Example
>>> dissector.build()
-
dissect
()¶ This method converts the data structure to the corresponding raw bytes.
- Example
>>> dissector.dissect()
mirage.libs.mosart_utils.constants module¶
This module contains some constants that are used by the Mosart stack.
mirage.libs.mosart_utils.pcap module¶
-
class
mirage.libs.mosart_utils.pcap.
MosartPCAPDevice
(interface)¶ Bases:
mirage.libs.wireless_utils.pcapDevice.PCAPDevice
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
Warning
This PCAP Device uses the DLT 149.
-
DLT
= 149¶
-
SCAPY_LAYER
¶ alias of
mirage.libs.mosart_utils.scapy_mosart_layers.Mosart_Hdr
-
buildPacket
(packet, timestamp)¶ This method is used to encapsulate the packet into a scapy frame (if SCAPY_LAYER is not None).
-
disableDonglePackets
()¶ This method enables the reception of dongle packets.
- Example
>>> device.disableDonglePackets()
Note
This method is a shared method and can be called from the corresponding Emitters / Receivers.
-
enableDonglePackets
()¶ This method enables the reception of dongle packets.
- Example
>>> device.enableDonglePackets()
Note
This method is a shared method and can be called from the corresponding Emitters / Receivers.
-
enterPromiscuousMode
()¶ This method allows to put your device into promiscuous mode.
Note
This method is a shared method and can be called from the corresponding Emitters / Receivers.
-
enterSnifferMode
(address)¶ This method allows to put your device into sniffer mode. You have to provide an address to follow.
- Parameters
address (str) – address to follow as string (e.g. ‘11:22:33:44’)
Note
This method is a shared method and can be called from the corresponding Emitters / Receivers.
-
generateStream
()¶ This method generates a stream (i.e. a list of packets with the right inter frame spacing) from the PCAP file.
- Returns
stream of packets
- Return type
list
- Example
>>> stream = device.generateStream() >>> device2.sendp(*stream)
Note
This method is a shared method and can be called from the corresponding Emitters / Receivers.
-
getChannel
()¶ This method allows to simulate the getChannel behaviour of a normal sniffer.
- Returns
integer indicating an unknown channel (-1)
- Return type
int
- Example
>>> device.getChannel() -1
Note
This method is a shared method and can be called from the corresponding Emitters / Receivers.
-
init
()¶ This method initializes the PCAP file, by checking the header (if the Device is in reading mode) or by adding the header (if the Device is in writing mode).
-
setChannel
(channel)¶ This method allows to simulate the setChannel behaviour of a normal sniffer.
- Parameters
channel (int) – channel to set
- Example
>>> device.getChannel() -1
Note
This method is a shared method and can be called from the corresponding Emitters / Receivers.
mirage.libs.mosart_utils.helpers module¶
-
mirage.libs.mosart_utils.helpers.
addressToInteger
(address)¶ This function converts a string indicating the address of a Mosart device to its raw value (as integer).
- Parameters
address (str) – string to convert (format: ‘11:22:33:44’)
- Example
>>> hex(addressToInteger('11:22:33:44')) '0x11223344'
-
mirage.libs.mosart_utils.helpers.
crc
(data)¶ This function returns the CRC of a Mosart payload.
- Parameters
data (bytes) – bytes of the payload
-
mirage.libs.mosart_utils.helpers.
integerToAddress
(integer)¶ This function converts a Mosart address to a printable string.
- Parameters
integer – address to convert
- Example
>>> integerToAddress(0x11223344) '11:22:33:44'
mirage.libs.mosart_utils.keyboard_codes module¶
-
class
mirage.libs.mosart_utils.keyboard_codes.
MosartKeyboardCodes
¶ Bases:
object
This class allows to convert the Mosart keyboard codes to the corresponding HID code and modifiers.
Warning
These values have been collected empirically. As a result, the corresponding mapping may contains some mistakes or missing data.
-
classmethod
getHIDCodeFromMosartKeyboardCode
(code)¶
-
classmethod
getMosartKeyboardCodeFromHIDCode
(hidCode, modifiers)¶ This method returns the Mosart keybaord
-
mosartKeyboardCodes
= {8: [72, 0], 12: [0, 16], 14: [0, 1], 15: [62, 0], 16: [20, 0], 17: [43, 0], 18: [4, 0], 19: [41, 0], 20: [29, 0], 21: [139, 0], 22: [53, 0], 23: [30, 0], 24: [26, 0], 25: [57, 0], 26: [22, 0], 27: [100, 0], 28: [27, 0], 29: [138, 0], 30: [58, 0], 31: [31, 0], 32: [8, 0], 33: [60, 0], 34: [7, 0], 35: [61, 0], 36: [6, 0], 37: [136, 0], 38: [59, 0], 39: [32, 0], 40: [21, 0], 41: [23, 0], 42: [9, 0], 43: [10, 0], 44: [25, 0], 45: [5, 0], 46: [34, 0], 47: [33, 0], 48: [24, 0], 49: [28, 0], 50: [13, 0], 51: [11, 0], 52: [16, 0], 53: [17, 0], 54: [35, 0], 55: [36, 0], 56: [12, 0], 57: [48, 0], 58: [14, 0], 59: [63, 0], 60: [54, 0], 61: [135, 0], 62: [46, 0], 63: [37, 0], 64: [18, 0], 65: [64, 0], 66: [15, 0], 68: [55, 0], 69: [101, 0], 70: [65, 0], 71: [38, 0], 72: [19, 0], 73: [47, 0], 74: [51, 0], 75: [52, 0], 76: [50, 0], 77: [56, 0], 78: [45, 0], 79: [39, 0], 80: [71, 0], 83: [0, 4], 85: [0, 64], 87: [70, 0], 88: [137, 0], 89: [42, 0], 90: [49, 0], 91: [68, 0], 92: [40, 0], 93: [69, 0], 94: [66, 0], 95: [67, 0], 96: [95, 0], 97: [92, 0], 98: [89, 0], 99: [44, 0], 100: [83, 0], 101: [81, 0], 102: [76, 0], 104: [96, 0], 105: [93, 0], 106: [90, 0], 107: [98, 0], 108: [84, 0], 109: [79, 0], 110: [73, 0], 112: [97, 0], 113: [94, 0], 114: [91, 0], 115: [99, 0], 116: [85, 0], 117: [86, 0], 118: [75, 0], 119: [78, 0], 120: [87, 0], 121: [133, 0], 122: [88, 0], 123: [82, 0], 125: [80, 0], 126: [74, 0], 127: [77, 0], 129: [0, 2], 130: [0, 32], 137: [0, 8], 144: [145, 0], 146: [0, 128], 151: [144, 0], 152: [98, 0], 153: [98, 0], 154: [0, 9], 155: [0, 8], 156: [0, 9], 157: [0, 8], 158: [0, 4]}¶
-
classmethod
mirage.libs.mosart_utils.packets module¶
-
class
mirage.libs.mosart_utils.packets.
MosartDonglePacket
(address=None, payload=None)¶ Bases:
mirage.libs.mosart_utils.packets.MosartPacket
Mirage Mosart Packet - Dongle Sync / Acknowledgment
- Parameters
address (str) – string indicating the address of the transmitter (format: ‘11:22:33:44’)
payload (bytes) – payload of the packet
-
toString
()¶ This method allows to explicitely define how a packet is displayed if it is converted as a string.
- If this method is not overloaded, the packet is displayed as :
<< name >> if no additional informations are linked to this packet
[ additionalInformations ] << name >> if some additional informations are linked to this packet
-
class
mirage.libs.mosart_utils.packets.
MosartKeyboardKeystrokePacket
(sequenceNumber=0, address=None, payload=None, code=None, stateCode=None, state=None, hidCode=None, modifiers=None)¶ Bases:
mirage.libs.mosart_utils.packets.MosartPacket
Mirage Mosart Packet - Keyboard Keystroke
- Parameters
address (str) – string indicating the address of the transmitter (format: ‘11:22:33:44’)
sequenceNumber (int) – sequence number of the packet
payload (bytes) – payload of the packet
code (int) – Mosart code indicating the selected key
stateCode (int) – Mosart code indicating the state of the selected key
state (str) – string indicating the state of the selected button (“pressed”, “released”, “unknown”)
hidCode (int) – HID code of the selected key
modifiers (int) – HID modifiers of the selected key
-
toString
()¶ This method allows to explicitely define how a packet is displayed if it is converted as a string.
- If this method is not overloaded, the packet is displayed as :
<< name >> if no additional informations are linked to this packet
[ additionalInformations ] << name >> if some additional informations are linked to this packet
-
class
mirage.libs.mosart_utils.packets.
MosartMouseClickPacket
(sequenceNumber=0, address=None, payload=None, code=None, stateCode=None, state=None, button='')¶ Bases:
mirage.libs.mosart_utils.packets.MosartPacket
Mirage Mosart Packet - Mouse Click
- Parameters
address (str) – string indicating the address of the transmitter (format: ‘11:22:33:44’)
sequenceNumber (int) – sequence number of the packet
payload (bytes) – payload of the packet
code (int) – Mosart code indicating the selected button
stateCode (int) – Mosart code indicating the state of the selected button
state (str) – string indicating the state of the selected button (“pressed”, “released”, “unknown”)
button (str) – string indicating the selected button (“right”, “left”, “middle”)
-
toString
()¶ This method allows to explicitely define how a packet is displayed if it is converted as a string.
- If this method is not overloaded, the packet is displayed as :
<< name >> if no additional informations are linked to this packet
[ additionalInformations ] << name >> if some additional informations are linked to this packet
-
class
mirage.libs.mosart_utils.packets.
MosartMouseMovementPacket
(sequenceNumber=0, address=None, payload=None, x1=0, x2=0, y1=0, y2=0)¶ Bases:
mirage.libs.mosart_utils.packets.MosartPacket
Mirage Mosart Packet - Mouse Movement
- Parameters
address (str) – string indicating the address of the transmitter (format: ‘11:22:33:44’)
sequenceNumber (int) – sequence number of the packet
payload (bytes) – payload of the packet
x1 (int) – X coordinate of the velocity vector (first)
x2 (int) – X coordinate of the velocity vector (second)
y1 (int) – Y coordinate of the velocity vector (first)
y2 (int) – Y coordinate of the velocity vector (second)
-
toString
()¶ This method allows to explicitely define how a packet is displayed if it is converted as a string.
- If this method is not overloaded, the packet is displayed as :
<< name >> if no additional informations are linked to this packet
[ additionalInformations ] << name >> if some additional informations are linked to this packet
-
class
mirage.libs.mosart_utils.packets.
MosartPacket
(address='00:00:00:00', sequenceNumber=0, deviceType=None, payload=None)¶ Bases:
mirage.libs.wireless_utils.packets.Packet
Mirage Mosart Packet
- Parameters
address (str) – string indicating the address of the transmitter (format: ‘11:22:33:44’)
sequenceNumber (int) – sequence number of the packet
deviceType (str) – string indicating the device type of the packet (“keyboard”, “mouse” or “dongle”)
payload (bytes) – payload of the packet
-
toString
()¶ This method allows to explicitely define how a packet is displayed if it is converted as a string.
- If this method is not overloaded, the packet is displayed as :
<< name >> if no additional informations are linked to this packet
[ additionalInformations ] << name >> if some additional informations are linked to this packet
-
class
mirage.libs.mosart_utils.packets.
MosartSniffingParameters
(channel=None)¶ Bases:
mirage.libs.wireless_utils.packets.AdditionalInformations
This class allows to attach some sniffer’s data to a Mirage Mosart Packet, such as channel.
- Parameters
channel (int) – channel of the received packet
-
toString
()¶
mirage.libs.mosart_utils.scapy_mosart_layers module¶
This module contains some scapy definitions for Mosart packets.