İçindekiler:

Alexa, Anahtarlarım Nerede?: 4 Adım
Alexa, Anahtarlarım Nerede?: 4 Adım

Video: Alexa, Anahtarlarım Nerede?: 4 Adım

Video: Alexa, Anahtarlarım Nerede?: 4 Adım
Video: iğranç araba anahtarım 😓 2024, Temmuz
Anonim
Image
Image
Bluetooth İşaretlerini Hackleme
Bluetooth İşaretlerini Hackleme

Alexa, kablosuz ev ağlarını kullanarak bilgi alma görevleri ve varlıkları izlemek için özellikle çok uygundur. Hızlı erişim için değerli eşyalarınızı ızgaraya koymayı düşünmek doğaldır. Ağ aralığı ve pil ömrü için ucuz bluetooth düşük enerjili işaretçileri hackliyoruz ve Alexa'nın anahtarları nerede bıraktığımızı bilmesi için akıllı bir uygulama oluşturuyoruz.

Nasıl yapılır…

1. Adım: Bluetooth İşaretlerini Hackleme

3 işaretçi seti 15 dolardan daha düşük bir fiyata satın alınabilir ve Android/iOS uygulamalarıyla desteklenir, ancak gizliliği devre dışı bırakacağız. Ayrıca anahtarlarımızı bulmak telefonumuzu bulmaya dönüşmemeli.

Tersine mühendislik akıllı ışıklarıyla ilgili bu adafruit öğreticisi, işaretçileri kontrol etmemize yardımcı oldu. Aşağıdakileri çalıştırarak cihaz adresi için işaret taramasını açarak başlayın:

sudo hcitool lescan

'iTag' adıyla etiketlenmiş adresi bulun ve kopyalayın, ardından şunu çalıştırın:

sudo gatttool -I

Aşağıdakileri çalıştırarak cihaza etkileşimli olarak bağlanın:

AA:BB:CC:DD:EE:FF bağlayın

Seçenekleri görüntülemek için 'yardım' veya hizmetleri görüntülemek için 'birincil' çalıştırmayı deneyin:

'char-desc' ve ardından yukarıdaki gibi servis tanıtıcısını çalıştırarak, gatt karakteristik spesifikasyonlarına ve servis spesifikasyonlarına başvurarak aradığımız UUID'leri buluruz. Bu hizmetler hakkında daha fazla bilgi için şuna göz atın. Wireshark ile trafiği incelerken, 0100111000000001'in alarmı tetiklediğini ve mantıksal olarak 0000111000000001'in kapattığını görüyoruz. Şimdi basit python işlevine sahibiz:

import pexpectdef sound_alarm(BD_ADDR): child = pexpect.spawn('gatttool -I') child.sendline('connect {}'.format(BD_ADDR)) child.expect('Bağlantı başarılı', zaman aşımı=30) child.sendline ('char-write-cmd 0x000b 0100111000000001')

Ardından, anahtarları ararken işaretçiyi tetiklemek için Alexa becerisini oluşturmaya odaklanıyoruz.

Adım 2: Bir Alexa Becerisi ve Uygulaması Oluşturma

Alexa Becerisi ve Uygulaması Oluşturma
Alexa Becerisi ve Uygulaması Oluşturma
Alexa Becerisi ve Uygulaması Oluşturma
Alexa Becerisi ve Uygulaması Oluşturma

Yerel bir sunucuya bağlanacak bir beceri yaratıyoruz. Ardından, sunucumuzu istediğimiz eylemi yapacak şekilde yapılandırırız, bu durumda, anahtarların nerede olabileceğine dair bir tahmin sağlar ve Bluetooth işaretini bip sesi çıkarır. Flask, bir uygulamaya hizmet etmek için basit ve kullanımı kolay bir python kütüphanesi sağlar. Flask-ask kullanarak, sunucuyu daha sonra oluşturacağımız Alexa becerimizle iletişim kuracak şekilde yapılandırabiliriz. Uygulamaya, Alexa becerimiz için ihtiyaç duyacağımız bir https bağlantısı verecek olan Ngrok ile hizmet verin. İlk önce uygulamayı en basit işlevsellikle oluşturduk: tetiklendiğinde BLE beacon'umuzu bip sesi çıkarmak için.

#!/usr/bin/env pythonfrom flask import flask_ask'tan flask import Ask, deyim import pexpect app=Flask(_name_) ask = Ask(app, '/') BD_ADDR = 'AA:BB:CC:DD:EE:FF ' #Bluetooth işaretçi kimliğiniz burada @ask.intent('findkeys') def retrievr(): sound_alarm() konuşma_text = "Anahtarlarınız buralarda bir yerde." dönüş ifadesi(speech_text) def sound_alarm(): çocuk = pexpect.spawn('gatttool -I') child.sendline('connect {}'.format(BD_ADDR)) child.expect('Bağlantı başarılı', zaman aşımı=60) child.sendline('char-write-cmd 0x000b 0100111000000001') if _name_ == "_main_": app.run(host='127.0.0.1', port='5000')

BLE bip sesi çıkarmak için daha önce yazdığımız sound_alarm() işlevini kullandık. Niyet için kullanılacak fonksiyon için, niyetimiz olan "findkeys" ile ask dekoratörünü ekliyoruz. Amazon geliştirici panosunda Alexa becerisini yaptığımızda, amacımız için bu adı kullanacağız. Bu betiği app.py adlı bir dosyaya yazın ve çalıştırın

piton uygulaması.py

Bu, başvurunuzu https://localhost:5000 üzerinde sunacaktır. Bir ngrok sunucusu çalıştırın ve oluşturulan https bağlantısını kopyalayın. Alexa becerisini yapılandırırken buna ihtiyacınız olacak. Daha fazla ayrıntı için bu gönderiye göz atın. Basit bir uygulamayı başarıyla kurduk, şimdi Alexa becerisini yazacağız. Amazon geliştirici panosuna gidin ve oturum açın. Alexa'ya tıklayın ve Alexa Skill kiti ile başlayın

GUI tarafından verilen talimatları izleyin.

Etkileşim Modeli sekmesi altında, Amaç Şeması kutusunu aşağıdakilerle doldurmak isteyeceksiniz:

{ "niyetler": [{ "niyet": "findkeys" }, { "niyet": "AMAZON. HelpIntent" }, { "niyet": "AMAZON. StopIntent" }, { "niyet": "AMAZON. CancelIntent" }] }

Örnek Sözler kutusunda, bir kişinin beceriyi çağırmak için kullanabileceği bazı örnek komutlar yazmak istiyorsunuz. Bunları yazdık:

bulkeys anahtarlarımı bul anahtarlarımı bulkeys anahtarlarımı kaybettim

  • Yapılandırma sekmesinde, HTTPS için hizmet bitiş noktasını seçtiğinizden emin olun. https bağlantınızı kopyalayın ve altındaki Varsayılan kutuya yapıştırın. Hesap bağlama Hayır olarak bırakılabilir.
  • SSL Sertifikasında ortadaki seçeneği seçin, "Geliştirme uç noktam, bir sertifika yetkilisinden joker karakter sertifikasına sahip bir etki alanının alt etki alanıdır".
  • Test sekmesi, örnek komutlarınızdan birini yazarak yeni beceriyi test etmenize olanak tanır.

Tüm onay işaretleri yeşil olana kadar son iki sekmeyi doldurmayı bitirin. Ardından Beta Testi özelliği ile becerinizi başlatın. Bu, yeteneğinizi yayınlamadan önce herhangi bir yankı cihazında barındırmanıza olanak tanır. Beceriyi yankı cihazınıza yüklemek için e-posta bağlantısındaki talimatları izleyin.

3. Adım: Becerimizi Daha Akıllı Hale Getirmek

Becerimizi Daha Akıllı Hale Getirmek
Becerimizi Daha Akıllı Hale Getirmek
Becerimizi Daha Akıllı Hale Getirmek
Becerimizi Daha Akıllı Hale Getirmek
Becerimizi Daha Akıllı Hale Getirmek
Becerimizi Daha Akıllı Hale Getirmek

RSSI sinyal gücünü bildirmek için bluetooth işaretini sorgulamak için boşta olan bilgisayarları evin her tarafına dağıttık.

Birden fazla makineden okuma alarak, mesafe için bir proxy olarak sinyal gücünü kullanabiliriz. İşareti bulmak için evin en olası bölümünü hesaplamak için bunu nasıl kullanacağımızı bulmamız gerekiyor.

Makine öğrenimine dönüyoruz. Her 2 dakikada bir crontab işi, RSSI demetlerinin bir veri kümesini oluşturur. İşareti 'Yatak Odası', 'Banyo', 'Mutfak', 'Yaşam Alanı' gibi farklı noktalara yerleştirerek RSSI günlüklerini etiketliyoruz. Evin haritasını çıkardıktan sonra, xgboost'un XGBClassifier'ı gibi ağaç tabanlı modelleri kullanabiliriz.

Gradyan artırmanın xgboost uygulaması, zaman aşımına uğrayan okumalardaki eksik verileri birkaç saniye içinde eğitimle işleyecektir. Eğitilmiş modeli sürdürmek ve alexa geri alma uygulamamıza yüklemek için python turşu kullanın. Beceri çağrıldığında, uygulama bluetooth RSSI okumasını arar ve tahmini bir konum oluşturur, alexa 'banyoya bakmayı deneyin' önerisinde bulunarak yanıt verebilir.

Adım 4: Hepsini Bir Araya Getirmek

Anahtarların son konumunu tahmin edecek bir modele sahip olarak, Alexa tarafından döndürülen ifadeyi geliştirmek için uygulamaya ekleyebiliriz. Komut dosyasını okumak için değiştirdik:

os from flask import flask flask_ask import Ask, deyim import pexpect import pickle pandaları pd olarak import numpy koleksiyonlardan import defaultdict, Counter'dan reverse_read import reverse_readline app=Flask(_name_) ask = Ask(app, '/') @ ask.intent('findkeys') tanımlı retrievr(): os.system("/path/to/repo/sound_alarm.py &") konuşma_metni = tahmin_locate() dönüş ifadesi(speech_text) tanım tahmin_locate(): read_dict = {} line_gen = reverse_readline('YOUR_DATA_FILE.txt') res_lst = while len(res_lst) != 20: ln = next(line_gen) if ln.startswith('Host'): _, ip, _, okuma = ln.split () read_dict[ip] = okuma res_lst.append(read_dict) if ip == 'ip.of.one.computer': read_dict = {} else: pass val = pd. DataFrame(res_lst).replace({'N/ A': np.nan}).values mdl_ = pickle.load(open('location_model_file.dat', 'rb')) preds = mdl_.predict(val) tahmin = Counter(preds) tahmin = tahmin.most_common(1)[0][0] answer_str = 'if tahminine bakmayı deneyin == 1: answer_str += 'yatak odası' elif tahmin == 2: answer_str += 'banyo' elif tahmin == 3: answer_str += 'mutfak' elif tahmin == 4: answer_str += 'oturma odası' return answer_str if _name_ == "_main_": app.run(host) ='127.0.0.1', bağlantı noktası='5000')

En son kaydedilen rssi sinyal gücüne sahip bir dosya alan tahmin_locate() adlı yeni bir işlev oluşturduk. Ardından örnekleri turşu xgboost modelimize karşı çalıştıracak ve en olası konum dizesini döndürecektir. Alexa istendiğinde bu konum döndürülecektir. Bir işaretçiyle bağlantı kurmak birkaç saniye sürebileceğinden, sound_alarm.py'de bu işlevi çağıran ayrı bir işlem yürütüyoruz.

Önerilen: