فهرست مطالب:

الکسا ، کلیدهای من کجا هستند؟: 4 مرحله
الکسا ، کلیدهای من کجا هستند؟: 4 مرحله

تصویری: الکسا ، کلیدهای من کجا هستند؟: 4 مرحله

تصویری: الکسا ، کلیدهای من کجا هستند؟: 4 مرحله
تصویری: هیچ وقت این کارهارو با کنسول پلی استیشن 4 نکن 2024, جولای
Anonim
Image
Image
هک کردن چراغ های بلوتوث
هک کردن چراغ های بلوتوث

الکسا به ویژه برای کارهای بازیابی اطلاعات و نظارت بر دارایی ها با استفاده از شبکه های بی سیم خانگی مناسب است. طبیعی است که برای بازیابی سریع قرار دادن اشیاء با ارزش روی شبکه را در نظر بگیرید. ما چراغ های کم مصرف بلوتوث کم مصرف برای محدوده شبکه و طول عمر باتری را هک می کنیم و یک برنامه هوشمند ایجاد می کنیم تا الکسا بداند کلیدها را کجا گذاشته ایم.

چگونه انجامش بدهیم…

مرحله 1: هک بلوتوث Beacons

مجموعه ای از 3 چراغ راهنما را می توان با کمتر از 15 دلار خریداری کرد و با برنامه های Android/iOS پشتیبانی می شود ، اما ما از حفظ حریم خصوصی خودداری می کنیم. علاوه بر این ، پیدا کردن کلیدهای ما نباید به یافتن تلفن ما تبدیل شود.

این آموزش adafruit در مورد چراغ های هوشمند مهندسی معکوس به ما کمک کرد تا چراغ ها را کنترل کنیم. با روشن کردن اسکن چراغ برای آدرس دستگاه شروع کنید:

sudo hcitool lescan

آدرس برچسب گذاری شده با نام "iTag" را پیدا و کپی کنید ، سپس اجرا کنید:

sudo gatttool -I

با اجرای متداول به دستگاه متصل شوید:

AA را متصل کنید: BB: CC: DD: EE: FF

سعی کنید "help" را برای مشاهده گزینه ها یا "اصلی" را برای مشاهده خدمات اجرا کنید:

با اجرای char-desc و به دنبال دسته سرویس در بالا ، UUID هایی را پیدا می کنیم که با مراجعه به مشخصات و مشخصات سرویس gatt به دنبال آنها می گردیم. برای اطلاعات بیشتر در مورد این خدمات ، این را بررسی کنید. با بررسی ترافیک با Wireshark ، متوجه می شویم که 0100111000000001 زنگ هشدار را فعال می کند و به طور منطقی ، 0000111000000001 آن را خاموش می کند. اکنون ما تابع پایتون ساده را داریم:

import pexpectdef sound_alarm (BD_ADDR): child = pexpect.spawn ('gatttool -I') child.sendline ('connect {}'. format (BD_ADDR)) child.expect ('Connection موفق' ، timeout = 30) child.sendline ('char-write-cmd 0x000b 0100111000000001')

در مرحله بعد ، ما بر ایجاد مهارت Alexa تمرکز می کنیم تا چراغ راهنما را هنگامی که به دنبال کلیدها هستیم فعال کند.

مرحله 2: ایجاد مهارت و برنامه Alexa

ایجاد مهارت و برنامه Alexa
ایجاد مهارت و برنامه Alexa
ایجاد مهارت و برنامه Alexa
ایجاد مهارت و برنامه Alexa

ما یک مهارت ایجاد می کنیم که به یک سرور محلی متصل می شود. سپس سرور خود را پیکربندی می کنیم تا هر اقدامی را که می خواهیم انجام دهد ، در این مورد ، تقریبی را در مورد محل قرارگیری کلیدها ارائه دهد و چراغ بلوتوث را بوق بزند. Flask یک کتابخانه پایتون ساده و آسان برای استفاده برای ارائه یک برنامه ارائه می دهد. با استفاده از flask-ask ، می توانیم سرور را طوری پیکربندی کنیم که با مهارت Alexa ما بعداً ارتباط برقرار کند. خوب برنامه را با Ngrok ارائه دهید ، که پیوند https مورد نیاز برای مهارت Alexa را به ما می دهد. ابتدا ما برنامه را با ساده ترین عملکرد ساختیم: برای فعال کردن صدای BLE beacon beacon.

#!/usr/bin/env python از واردات فلاسک فلاسک از flask_ask import Ask، statement import pexpect app = Flask (_ name_) ask = Ask (app، '/') BD_ADDR = 'AA: BB: CC: DD: EE: FF ' #شناسه چراغ بلوتوث شما در اینجا @ask.intent (' findkeys ') def retrievr (): sound_alarm () speech_text = "کلیدهای شما در جایی اینجا هستند." return statement (speech_text) def sound_alarm (): child = pexpect.spawn ('gatttool -I') child.sendline ('اتصال {}'. فرمت (BD_ADDR)) child.expect ('اتصال موفقیت آمیز' ، زمان پایان = 60) child.sendline ('char-write-cmd 0x000b 0100111000000001') if _name_ == "_main_": app.run (host = '127.0.0.1'، port = '5000')

ما از تابع sound_alarm () که قبلاً نوشتیم برای ایجاد بوق BLE استفاده کردیم. برای عملکردی که برای هدف استفاده می شود ، تزئین کننده درخواست را با هدف "findkeys" اضافه می کنیم. هنگامی که مهارت Alexa را در داشبورد توسعه دهندگان آمازون ایجاد می کنیم ، از این نام برای هدف خود استفاده می کنیم. این اسکریپت را در فایلی با نام app.py بنویسید و اجرا کنید

برنامه python.py

این به برنامه شما در https:// localhost: 5000 خدمت می کند. یک سرور گرمk را اجرا کرده و پیوند https ایجاد شده را کپی کنید. هنگامی که مهارت Alexa را پیکربندی می کنید ، به آن نیاز خواهید داشت. برای جزئیات بیشتر ، این پست را بررسی کنید. ما یک برنامه ساده را با موفقیت راه اندازی کرده ایم ، اکنون مهارت Alexa را می نویسیم. به داشبورد توسعه دهندگان آمازون بروید و وارد شوید. روی Alexa کلیک کنید و با کیت Alexa Skill شروع کنید

دستورالعمل های داده شده توسط gui را دنبال کنید.

در برگه مدل ادغام ، می خواهید کادر طرح قصد را با موارد زیر پر کنید:

در کادر Sample Utterances ، می خواهید دستورات نمونه ای را بنویسید که یک فرد ممکن است از آن برای فراخوانی مهارت استفاده کند. اینها را نوشتیم:

کلیدهای پیدا کردن کلیدهای من کلیدهای من کلیدهای من را گم کرده ام

  • در برگه پیکربندی ، مطمئن شوید که نقطه پایان سرویس HTTPS را انتخاب کرده اید. پیوند https خود را کپی کرده و در کادر پیش فرض زیر قرار دهید. پیوند حساب را می توان به شماره واگذار کرد.
  • در گواهینامه SSL گزینه میانی را انتخاب کنید ، "نقطه پایانی توسعه من یک زیر دامنه از یک دامنه است که دارای گواهی علامت اصلی از یک مرجع صدور گواهینامه است".
  • تب Test به شما امکان می دهد مهارت جدید را با تایپ کردن یکی از دستورات نمونه خود آزمایش کنید.

تکمیل دو زبانه آخر را تا زمانی که همه علامت های چک سبز شوند ، به پایان برسانید. سپس مهارت خود را با ویژگی Beta Testing راه اندازی کنید. این به شما امکان می دهد مهارت خود را قبل از انتشار در هر دستگاه اکو میزبانی کنید. برای نصب مهارت روی دستگاه اکو ، دستورالعمل های موجود در پیوند ایمیل را دنبال کنید.

مرحله 3: مهارت خود را هوشمندتر کنید

مهارت خود را هوشمندتر کنیم
مهارت خود را هوشمندتر کنیم
مهارت خود را هوشمندتر کنیم
مهارت خود را هوشمندتر کنیم
مهارت خود را هوشمندتر کنیم
مهارت خود را هوشمندتر کنیم

ما کامپیوترهای بیکار را که در سراسر خانه پخش شده اند قرار می دهیم تا در جستجوی چراغ بلوتوث برای گزارش قدرت سیگنال RSSI کار کنند.

با قرائت از چندین دستگاه ، می توانیم از قدرت سیگنال به عنوان پروکسی فاصله استفاده کنیم. ما باید بفهمیم چگونه از این برای محاسبه محتمل ترین قسمت خانه برای یافتن چراغ استفاده کنیم.

به آموزش ماشین می پردازیم. یک کار crontab هر 2 دقیقه یک مجموعه داده از چندگانه RSSI ایجاد می کند. با قرار دادن چراغ راهنما در نقاط مختلف مانند: "اتاق خواب" ، "حمام" ، "آشپزخانه" ، "منطقه زندگی" ، گزارش های RSSI را برچسب گذاری می کنیم. هنگامی که خانه را ترسیم کردیم ، می توانیم از مدل های درختی مانند XGBClassifier xgboost استفاده کنیم.

پیاده سازی xgboost افزایش گرادیان ، داده های مفقود شده از قرائت های زمان بندی شده ، آموزش را در چند ثانیه مدیریت می کند. برای پایداری مدل آموزش دیده و بارگیری در برنامه alexa retrievr از ترشی پیتون استفاده کنید. هنگامی که مهارت فراخوانی می شود ، برنامه به دنبال خواندن بلوتوث RSSI است و یک مکان پیش بینی شده را ایجاد می کند ، الکسا می تواند به شما پیشنهاد دهد "در حمام جستجو کنید."

مرحله 4: همه چیز را با هم ترکیب کنید

با داشتن مدلی برای تقریب آخرین مکان کلیدها ، می توانیم آن را به برنامه اضافه کنیم تا بیانیه بازگشتی توسط Alexa بهبود یابد. ما اسکریپت را برای خواندن تغییر داده ایم:

import osfrom flask import Flask from flask_ask import Ask، statement import pexpect import pickles pandas as pd import numpy as np from the collection import defaultdict، Counter from reverse_read import reverse_readline app = Flask (_ name_) ask = Ask (app، '/') @ ask.intent ('findkeys') def retrievr (): os.system ("/path/to/repo/sound_alarm.py &") speech_text = guess_locate () دستور بازگشت (speech_text) def guess_locate (): read_dict = {} line_gen = reverse_readline ('YOUR_DATA_FILE.txt') res_lst = در حالی که len (res_lst)! = 20: ln = next (line_gen) if ln.startswith ('Host'): _، ip، _، reading = ln.split () read_dict [ip] = خواندن res_lst.append (read_dict) اگر ip == 'ip.of.one.computer': read_dict = {} else: pass val = pd. DataFrame (res_lst).replace ({'N/ A ': np.nan}). مقادیر mdl_ = pickle.load (open (' location_model_file.dat '،' rb ')) preds = mdl_.predict (val) guess = Counter (preds) guess = guess.most_common (1) [0] [0] reply_str = 'حدس بزنید' if guess == 1: answer_str += 'اتاق خواب' elif حدس == 2: reply_str += 'حمام' elif حدس == 3: reply_str += 'آشپزخانه' elif حدس == 4: reply_str += 'اتاق نشیمن' بازگشت answer_str اگر _name_ == "_main_": app.run (میزبان = '127.0.0.1' ، پورت = '5000')

ما یک تابع جدید به نام guess_locate () ایجاد کردیم که یک فایل با آخرین قدرت سیگنال rssi ثبت شده می گیرد. سپس نمونه ها را در برابر مدل ترشی xgboost ما اجرا می کند و احتمالاً رشته محل را برمی گرداند. وقتی از Alexa خواسته شود ، این مکان بازگردانده می شود. از آنجا که برقراری ارتباط با چراغ می تواند چند ثانیه طول بکشد ، ما فرایند جداگانه ای را فراخوانی می کنیم که این عملکرد را در sound_alarm.py فراخوانی می کند.

توصیه شده: