2015-06-24 15 views
9

Android ile PC'ye başarılı bir şekilde bağlanmak için Stollmann SDK kullanan bir Windows 7 uygulamasına sahibim. Bluetooth MAC adresi, karma ve rasgele dağıtıcının çift yönlü değişimi NFC ile bant üzerinden gerçekleştirilir:Bluetooth Güvenli Basit Eşleştirme (SSP) QR kodu Bant dışı (OOB) kanalı olarak kullanıyor

application with qr code

maalesef burada paylaşılamaz Windows uygulamasının kaynak kodu. Android tarafında hiçbir uygulamaya gerek duyulmuyor ve Güvenli Basit Eşleştirme, application/vnd.bluetooth.ep.oob numaralı NDEF mesajı alındığında işletim sistemi tarafından (HandoverManager?) Gerçekleştiriliyor.

Şimdi (yerine NFC) taranan QR koduyla OOB eşleştirmeyi gerçekleştirmek için tek yönlü kimlik doğrulaması kullanmak istiyorsunuz, hangi an Android app oluşturmak çalışıyorum. PC ekranında (ZXing.Net tarafından oluşturulan) özel bir QR kodu görüntülenecek ve Bluetooth MAC adresi, karma ve rastgele hale getirici içerecektir.

Ancak OOB bağ Android'de henüz uygulanmadı gibi görünüyor -

BluetoothAdapter.java:

/** 
* Read the local Out of Band Pairing Data 
* <p>Requires {@link android.Manifest.permission#BLUETOOTH} 
* 
* @return Pair<byte[], byte[]> of Hash and Randomizer 
* 
* @hide 
*/ 
public Pair<byte[], byte[]> readOutOfBandData() { 
    if (getState() != STATE_ON) return null; 
    //TODO(BT 
    /* 
    try { 
     byte[] hash; 
     byte[] randomizer; 

     byte[] ret = mService.readOutOfBandData(); 

     if (ret == null || ret.length != 32) return null; 

     hash = Arrays.copyOfRange(ret, 0, 16); 
     randomizer = Arrays.copyOfRange(ret, 16, 32); 

     if (DBG) { 
      Log.d(TAG, "readOutOfBandData:" + Arrays.toString(hash) + 
       ":" + Arrays.toString(randomizer)); 
     } 
     return new Pair<byte[], byte[]>(hash, randomizer); 

    } catch (RemoteException e) {Log.e(TAG, "", e);}*/ 
    return null; 
} 

BluetoothDevice.java:

/** 
* Start the bonding (pairing) process with the remote device using the 
* Out Of Band mechanism. 
* 
* <p>This is an asynchronous call, it will return immediately. Register 
* for {@link #ACTION_BOND_STATE_CHANGED} intents to be notified when 
* the bonding process completes, and its result. 
* 
* <p>Android system services will handle the necessary user interactions 
* to confirm and complete the bonding process. 
* 
* <p>Requires {@link android.Manifest.permission#BLUETOOTH_ADMIN}. 
* 
* @param hash - Simple Secure pairing hash 
* @param randomizer - The random key obtained using OOB 
* @return false on immediate error, true if bonding will begin 
* 
* @hide 
*/ 
public boolean createBondOutOfBand(byte[] hash, byte[] randomizer) { 
    //TODO(BT) 
    /* 
    try { 
     return sService.createBondOutOfBand(this, hash, randomizer); 
    } catch (RemoteException e) {Log.e(TAG, "", e);}*/ 
    return false; 
} 

/** 
* Set the Out Of Band data for a remote device to be used later 
* in the pairing mechanism. Users can obtain this data through other 
* trusted channels 
* 
* <p>Requires {@link android.Manifest.permission#BLUETOOTH_ADMIN}. 
* 
* @param hash Simple Secure pairing hash 
* @param randomizer The random key obtained using OOB 
* @return false on error; true otherwise 
* 
* @hide 
*/ 
public boolean setDeviceOutOfBandData(byte[] hash, byte[] randomizer) { 
    //TODO(BT) 
    /* 
    try { 
    return sService.setDeviceOutOfBandData(this, hash, randomizer); 
    } catch (RemoteException e) {Log.e(TAG, "", e);} */ 
    return false; 
} 

Sorum:

OOB Blue yana diş eşleme Android NFC üzerinde iyi çalışır - QR kodu ile aynı şeyi yapmak için bir (hackish) yolu olduğunu düşünüyor musunuz?

Belki de (çılgın bir fikir) HandoverManager nolu sahte NDEF mesajı ile besleniyor?

+0

Mümkün mü, bilmiyorum, ama çılgın fikrini seviyorum. İşte şu anda test etmek için zamanım olmadığı karanlıkta bir atış, ama NFC tetiklendiğinde bir Yayın gönderir mi? https://play.google.com/store/apps/details?id=lt.andro.broadcastlogger&hl=tr –

+0

Hello @Alexandee Farbar. Sorunuza cevap verdin mi? – ymerdrengene

cevap

1

NFC etiketini algıladığında NFC hizmeti uygulaması tarafından yayınlanan NFC yayını taklit edemezsiniz. Bu korumalı bir yayın olduğu için sistem dışı uygulamalar niyeti yayınlayamaz.

+0

Uygulamamın bazı sistem "olayları" veya amaçlarını enjekte edemediğini anlamıyorum ... ama belki HandoverManager'ı arayabilir ve NDEF mesajımı iletebilirim? Ayrıca benim sorumun amacı QR kodu (OOB kanalı olarak) üzerinde "Güvenli Basit Eşleştirme" gerçekleştirmek için bir yol bulmaktır. Bu bazı sahte NFC mesajı olmak zorunda değil - belki daha iyi bir yol var. –

+1

Tamamlanmamış cevabım için özür dilerim. IMHO HandOverManager sınıfı, nfc hizmet paketinin altında olduğu gibi doğrudan erişemeyebilir, Yansıma'yı kullanarak deneyebilirsiniz. – 7383

+1

Bunu size yardımcı olabileceğini kontrol edin. https://github.com/Mobisocial/EasyNFC/blob/master/src/main/java/mobisocial/nfc/addon/BluetoothConnector.java – 7383

İlgili konular