- #! /usr/bin/python
- import binascii
- import struct
- import sys, os, time
- import bluepy.btle as btle
-
- chall_uuid = 0x30
- board_uuid = 0x2e
- score_uuid = 0x00ff
-
- if len(sys.argv) != 2:
- print "Requires level no.:", sys.argv[0], "<0-9 or \"s\" for scoreboard>"
- quit()
-
- deviceMAC = open('ctf_mac.txt').read()
- p = btle.Peripheral(deviceMAC)
- #p.connect(deviceMAC, "public")
- if( sys.argv[1] == "s"):
- # load scroebaord... hopefully
- print("Loading scoreboard")
- #deviceMAC = open('ctf_mac.txt').read()
- #p = btle.Peripheral(deviceMAC)
- response = p.writeCharacteristic(board_uuid, "fuck you")
- else:
- level = int(sys.argv[1])
- level_hex = str('%0*x' % (4,level))
- print level_hex
-
-
-
- #print ("Attached to peripheral")
- #services = p.getServiceByUUID(score_uuid)
- #char = services.getCharacteristics(chall_uuid)[0]
-
- print("Loading level")
- #char.write(level_hex)
- hex1 = binascii.unhexlify(level_hex)
- response = p.writeCharacteristic(chall_uuid, hex1)
-
- print("If error try again...it takes a few attempts, BLE is a bit crap")
- p.disconnect()
- time.sleep(1)
- p = btle.Peripheral(deviceMAC)
-
- scoreboard = p.getServiceByUUID(score_uuid)
- q = scoreboard.getCharacteristics()
- scoreboard = p.getServiceByUUID(score_uuid)
- q = scoreboard.getCharacteristics()
- for characteristic in q:
- hex1 = int(format(characteristic.getHandle(),'02X'), 16)
- if (characteristic.supportsRead()):
- #hex2 = binascii.b2a_hex(p.readCharacteristic(hex1))
- #hexlif2 = binascii.unhexlify(hex2)
- hexlif2 = characteristic.read()
-
- print (str(hex1)+" 0x"+ format(characteristic.getHandle(),'02X') +" "+ characteristic.propertiesToString() + " " + hexlif2)
-
- else:
- print (str(hex1)+" 0x"+ format(characteristic.getHandle(),'02X') +" "+ characteristic.propertiesToString() )
- p.disconnect()