seemoo-lab / opendrop

An open Apple AirDrop implementation written in Python
https://owlink.org
GNU General Public License v3.0
8.49k stars 265 forks source link

opendrop won't find an iphone #50

Closed warpdesign closed 3 years ago

warpdesign commented 4 years ago

I was able to receive files (although I don't know where the file was put), but opendrop won't find the same iphone when attempting to send a file.

I only get this message:

Looking for receivers. Press enter to stop ...

schmittner commented 4 years ago

The iPhone needs to be discoverable by everyone.

warpdesign commented 4 years ago

It is set to be discoverable by everyone but it still won't be detected.

Nicolas RAMZ - http://www.warpdesign.fr/

AthenaJS - https://athenajs.github.io

On Tue, May 19, 2020 at 12:32 PM Milan Stute notifications@github.com wrote:

The iPhone needs to be discoverable by everyone.

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/seemoo-lab/opendrop/issues/50#issuecomment-630734079, or unsubscribe https://github.com/notifications/unsubscribe-auth/AABQXYACFAGX4YYQLMBUDQTRSJN3RANCNFSM4ND6SU4Q .

jamjamg commented 4 years ago

You need to send an specific BLE advertisement to make the receiver listen. You can achieve this by using a second apple device initiating an airdrop communication.

Or you might also simulate your own "airdrop beacon" using bluez.

1.: download bluez wget www.kernel.org/pub/linux/bluetooth/bluez-5.43.tar.xz

2.: unpack and modify the example test/example-advertisement, change init of TestAdvertisement class, like:

def __init__(self, bus, index):
    # https://www.usenix.org/system/files/sec19-stute.pdf
    company_id =   0x004C # Apple Inc.
    beacon_type = [0x05, 0x12]
    # Zero bytes followed by 0x01
    zero_bytes =  [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01]
    # bad coded robo adds
    contact_id =  [0xBA, 0xDC, 0x0D, 0xED, 0x30, 0xB0, 0xAD, 0xD5]
    end_zero =    [0x00]
    Advertisement.__init__(self, bus, index, 'peripheral')
    self.add_manufacturer_data(company_id, beacon_type + zero_bytes + contact_id + end_zero)

3.: run python ./bluez-5.43/test/example-advertisement.ibeacon

Leo-Lionni commented 4 years ago

You need to send an specific BLE advertisement to make the receiver listen. You can achieve this by using a second apple device initiating an airdrop communication.

Or you might also simulate your own "airdrop beacon" using bluez.

1.: download bluez wget www.kernel.org/pub/linux/bluetooth/bluez-5.43.tar.xz

2.: unpack and modify the example test/example-advertisement, change init of TestAdvertisement class, like:

def __init__(self, bus, index):
    # https://www.usenix.org/system/files/sec19-stute.pdf
    company_id =   0x004C # Apple Inc.
    beacon_type = [0x05, 0x12]
    # Zero bytes followed by 0x01
    zero_bytes =  [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01]
    # bad coded robo adds
    contact_id =  [0xBA, 0xDC, 0x0D, 0xED, 0x30, 0xB0, 0xAD, 0xD5]
    end_zero =    [0x00]
    Advertisement.__init__(self, bus, index, 'peripheral')
    self.add_manufacturer_data(company_id, beacon_type + zero_bytes + contact_id + end_zero)

3.: run python ./bluez-5.43/test/example-advertisement.ibeacon

sorry , i can't understand a lot . " simulate your own "airdrop beacon" using bluez.", do you mean that " i make iphone jailbroken ,and run "python ./bluze-z5.43/text/xxxxx.ibeacon".????

Or something else? please help me . see here : https://github.com/seemoo-lab/opendrop/issues/51

Sn0wfreezeDev commented 3 years ago

The simple answer to this issue is that the current implementation cannot discover Apple devices if they do not receive a specific Bluetooth message. As @jamjamg describes it already you would need a second Apple device that basically "wakes" the devices up so they connect to OpenDrop. This feature relies on Bluetooth and could be added manually with something like bluez, but it might be some work to get there and is not simple for a non-programming user.

You can still use the receive feature, because then device will connect automatically. Refer to this issue: https://github.com/seemoo-lab/opendrop/issues/51

DeSchmiddi commented 2 years ago

Hello, I am sorry to bump this issue, but @jamjamg , for me your script returns

bret@luis2:~/bluez-5.43/test$ python ./example-advertisement.ibeacon
LEAdvertisingManager1 interface not found

What even is LEAdvertisingManager1, what does it do and how do I get it?