Loyiha apparati: qanday qilib biz xakerlik qidiruvi bilan xona qurdik

Loyiha apparati: qanday qilib biz xakerlik qidiruvi bilan xona qurdik
Bir necha hafta oldin biz o'tkazdik xakerlar uchun onlayn qidiruv: ular xona qurishdi, uni aqlli qurilmalar bilan to'ldirishdi va undan YouTube translyatsiyasini ishga tushirishdi. O'yinchilar IoT qurilmalarini o'yin veb-saytidan boshqarishlari mumkin edi; Maqsad xonada yashiringan qurolni (kuchli lazer ko'rsatgich) topish, uni buzish va xonada qisqa tutashuvni keltirib chiqarish edi.

Harakatga qo'shimcha qilish uchun biz xonaga maydalagichni joylashtirdik, unga 200 000 rubl yukladik: maydalagich soatiga bitta hisobni yedi. O'yinda g'alaba qozonganingizdan so'ng, siz maydalagichni to'xtatib, qolgan pulni olishingiz mumkin.

Biz allaqachon aytdik yurish, shuningdek backend qanday yaratilgan loyiha. Uskuna va u qanday yig'ilganligi haqida gapirish vaqti keldi.


Xonani tozalash vaqtini ko'rsatish uchun juda ko'p so'rovlar bo'ldi - biz uni qanday ajratishimizni ko'rsatamiz

Uskuna arxitekturasi: Xonani boshqarish

Biz stsenariy taxminiy tushunilgan, orqa qism tayyor bo'lgan va uskunani o'rnatish uchun bo'sh xonaga ega bo'lganimizda, biz apparat yechimini loyihalashni boshladik.

"IoTdagi S xavfsizlikni anglatadi" (IoT qisqartmasidagi S harfi xavfsizlikni bildiradi) eski hazilni eslab, biz bu safar o'yin stsenariysidagi o'yinchilar faqat front-end va back-end bilan o'zaro aloqada bo'lishga qaror qildik. saytning, lekin to'g'ridan-to'g'ri dazmolga olish imkoniyatini qo'lga kiritmang.

Bu xavfsizlik va ekranda sodir bo'layotgan voqealarni tomosha qilish uchun qilingan: o'yinchilarning apparatga to'g'ridan-to'g'ri kirishlari bilan xavfsiz va potentsial xavfli harakatlarni, masalan, maydalagichni tez aylantirish yoki boshqarishni ajratish ancha qiyin bo'ladi. pirotexnika.

Dizaynni boshlashdan oldin biz dizaynning asosi bo'lgan o'yin qurilmalarini boshqarishning bir nechta tamoyillarini ishlab chiqdik:

Simsiz echimlardan foydalanmang

Butun o'yin maydoni bitta ramkada joylashgan bo'lib, uning har bir burchagiga kirish mumkin. Simsiz ulanishga haqiqiy ehtiyoj yo'q edi va ular yana bir nosozlik nuqtasiga aylanadi.

Hech qanday maxsus aqlli uy qurilmalaridan foydalanmang

Asosan moslashtirish moslashuvchanligi uchun. Ma'lumki, biz aqlli uy tizimlarining ko'plab qutili versiyalarini o'z vazifamiz uchun tayyor administrator va boshqaruv elementlari bilan sozlashimiz mumkin, ammo mehnat xarajatlari o'zingizning oddiy echimingizni yaratish bilan solishtirish mumkin.

Bundan tashqari, uning holatini aynan o'yinchilar o'zgartirganligini aniq ko'rsatadigan qurilmalarni o'ylab topish kerak edi: ular uni yoqish/o'chirish yoki FALCON harflariga ma'lum bir yorug'lik qo'yishdi.

Biz oddiy radio qismlari do'konlarida xarid qilish mumkin bo'lgan ommaviy jihozlardan barcha elementlarni to'pladik: pizza va dietali kola yetkazib berish o'rtasida Chip va Dip va Leroy kurerlari doimiy ravishda saytga kelishdi.

Hamma narsani o'zimiz yig'ish tanlovi nosozliklarni tuzatishni soddalashtirdi, miqyoslash mumkin bo'lsa-da, o'rnatish vaqtida ko'proq ehtiyot bo'lishni talab qildi.

Barcha o'rni va arudin ramkada ko'rinmasligi kerak

Biz barcha boshqariladigan elementlarni bir joyga to'plashga va ularning ishlashini kuzatish va agar kerak bo'lsa, kameradan ehtiyotkorlik bilan emaklash va ishlamay qolgan blokni almashtirish uchun ularni sahna orqasida yashirishga qaror qildik.

Loyiha apparati: qanday qilib biz xakerlik qidiruvi bilan xona qurdik
Oxir-oqibat, hamma narsa stol ostida yashiringan va kamera stol ostida hech narsa ko'rinmasligi uchun o'rnatilgan. Bu bizning muhandis uchun "ko'r nuqta" edi

Natijada, biz aslida bitta aqlli qurilmaga ega bo'ldik: u o'zining har bir qismining holatini orqa qismdan oldi va tegishli buyruq bilan o'zgartirdi.

Uskunani amalga oshirish nuqtai nazaridan ushbu qurilma 6 ta elementni boshqargan:

  1. Bir nechta stol lampalari, ular yoqish/o'chirish holatiga ega va o'yinchilar tomonidan boshqariladi
  2. Devordagi harflar, ular o'yinchilarning buyrug'i bilan ranglarini o'zgartirishi mumkin
  3. Server yuklanganda flipchartni aylantiradigan va ochadigan muxlislar
  4. PWM orqali lazer bilan boshqariladi
  5. Jadvalda pul yegan maydalagich
  6. Har bir lazer otilishidan oldin o'chgan tutun mashinasi


Tutun mashinasini lazer bilan sinab ko'rish

Keyinchalik, ramka orqasida turgan va xuddi 1-nuqtadagi lampalar kabi boshqariladigan sahna nuri qo'shildi. Sahna chirog'i ikki holatda ishladi: unga quvvat berilganda lazerni yoritadi va u yorug'likdan oldingi vaznni yoritadi. lazer jangovar rejimda ishga tushirildi.

Bu aqlli qurilma nima edi?

Loyiha apparati: qanday qilib biz xakerlik qidiruvi bilan xona qurdik

Butun yo'l davomida Yura, bizning apparatchi yigit, narsalarni murakkablashtirmaslikka harakat qildi va mumkin bo'lgan eng oddiy, minimalist echimni topdi.

VPS shunchaki json-ni qurilmalar holati bilan qabul qiladigan va uni USB orqali ulangan Arduino-ga yuboradigan skriptni ishga tushiradi deb taxmin qilingan edi.

Portlarga ulangan:

  • 16 ta oddiy rele (ular videoda eshitilgan chertish shovqinini keltirib chiqarganlar. Biz ularni asosan shu tovush tufayli tanladik)
  • PWM kanallarini boshqarish uchun 4 ta qattiq holat o'rni, masalan, fanatlar,
  • lazer uchun alohida PWM chiqishi
  • LED chizig'iga signal ishlab chiqaradigan chiqish

Bu erda serverdan releyga kelgan json buyrug'ining namunasi

{"power":false,"speed":0,"period":null,"deviceIdentifier":"FAN"}

Va bu buyruq Arudinoga kelgan funksiyaga misol

def callback(ch, method, properties, body):    
request = json.loads(body.decode("utf-8"))    
print(request, end="n")     
send_to_serial(body)

Lazer nihoyat arqon orqali yonib ketgan va og'irlik akvariumga uchib ketgan vaqtni kuzatish uchun biz og'irlik tushganda ishga tushirilgan va tizimga signal bergan kichik tugmachani yaratdik.

Loyiha apparati: qanday qilib biz xakerlik qidiruvi bilan xona qurdik
Og'irlik harakatini kuzatish tugmasi

Ushbu signalda stol tennisi to'plaridan yasalgan tutunli bombalar yonishi kerak edi. Biz to'g'ridan-to'g'ri server korpusiga 4 ta tutun chirog'ini joylashtirdik va ularni nikromli ip bilan bog'ladik, u qizdirilishi va ateşleyici kabi ishlashi kerak edi.

Loyiha apparati: qanday qilib biz xakerlik qidiruvi bilan xona qurdik
Tutun bombalari va Xitoy gulchambarlari bo'lgan uy

Loyiha apparati: qanday qilib biz xakerlik qidiruvi bilan xona qurdik

Arduino

Dastlabki rejaga ko'ra, Arduinoda ikkita harakat bo'lib o'tdi.

Birinchidan, yangi so'rov olinganda, so'rov ArduinoJson kutubxonasi yordamida tahlil qilindi. Keyinchalik, har bir boshqariladigan qurilma uning ikkita xususiyati bilan solishtirildi:

  • quvvat holati "yoqilgan" yoki "o'chirilgan" (standart holat)
  • qurilma yoqilgan davr - plata boshlangandan boshlab, uni o'chirish vaqti, ya'ni holatni standart holatga keltirish vaqti mikrosekundlarda

Oxirgi marta u JSON-da mos keladigan parametrni qabul qilishda o'rnatildi, lekin uni uzatib bo'lmadi, keyin qiymat 0 ga o'rnatildi va hech qanday qayta o'rnatilmadi.

Arduino har bir tsiklni bajaradigan ikkinchi harakat holatni yangilash edi, ya'ni biror narsani yoqish kerakmi yoki biron bir qurilmani o'chirish vaqti keldimi yoki yo'qligini tekshirish.

Lazer ko'rsatkichi - xuddi shu Megatron 3000

Loyiha apparati: qanday qilib biz xakerlik qidiruvi bilan xona qurdik

Bu oddiy LSMVR450-3000MF 3000mW 450nm qo'lda markazlashtirilgan lazerli kesish va markalash moduli.

Falcon harflari

Ular juda sodda tarzda yaratilgan - biz shunchaki logotipdagi harflarni ko'chirdik, ularni kartondan kesib tashladik va keyin ularni LED lenta bilan yopdik. Bunday holda, men lenta qismlarini bir-biriga, har bir tikuvda 4 ta kontaktni lehimlashim kerak edi, ammo natija bunga arziydi. Bizning qo'llab-quvvatlovchimiz Posho bir necha soatdan kamroq vaqt ichida mahorat mo''jizalarini ko'rsatdi.

Iot qurilmasining birinchi sinovlari va tugatish

Biz birinchi sinovlarni o'tkazdik va shu bilan birga bizga yangi vazifalar keldi. Gap shundaki, jarayonning o'rtasida jamoaga VGIKning haqiqiy prodyuseri va operatori Ilya Serov qo'shildi - u ramka qurdi, qo'shimcha kino yoritgichini qo'shdi va syujetni yanada hissiyotli qilish uchun o'yin ssenariysini biroz o'zgartirdi va rasm yanada dramatik va teatrlashtirilgan.

Bu sifatni sezilarli darajada oshirdi, ammo o'rni va belgilangan operatsiya algoritmiga ulanishi kerak bo'lgan elementlar paydo bo'ldi.

Yana bir muammo lazer edi: biz turli xil turdagi arqonlar va turli quvvatdagi lazerlar bilan bir nechta tajribalar o'tkazdik. Sinov uchun biz shunchaki og'irlikni vertikal ravishda arqonga osib qo'ydik.

Sinov belgisi bilan ishlaganda, PWM orqali tartibga solinadigan quvvat 10% dan kam edi va hatto uzoq vaqt davomida ta'sir qilishda ham arqonga zarar bermadi.

Jang rejimida lazer taxminan 10 mm diametrli nuqtaga defokuslangan va u taxminan bir metr masofadan yuk bilan arqon orqali ishonchli tarzda yonib ketgan.

Loyiha apparati: qanday qilib biz xakerlik qidiruvi bilan xona qurdik
Shunday qilib, lazer sinovlarda mukammal ishladi

Biz hamma narsani xonada to'xtatilgan og'irlikda sinab ko'rishni boshlaganimizda, lazerni ishonchli himoya qilish unchalik oson emasligi ma'lum bo'ldi. Keyin, arqon yonib ketganda, u eriydi, cho'ziladi va asl diqqat markazidan tashqariga chiqadi.

Loyiha apparati: qanday qilib biz xakerlik qidiruvi bilan xona qurdik
Lekin u endi bunday ishlamadi: arqon siljidi

Ilya lazer nuri butun sahna bo'ylab o'tib, masofani ikki baravar oshirgan ramkada chiroyli ko'rinishi uchun lazerni arqon qarshisidagi xonaning oxiriga o'tkazdi.

Jangda arqonni yoqish bo'yicha yana bir nechta tajribalarni o'tkazganimizdan so'ng, biz taqdirni qiynoqqa solmaslikka va nichrom sim yordamida arqonni kesishga qaror qildik. U jangovar rejimda lazer yoqilgandan keyin 120 soniyadan keyin ipni yo'q qildi. Biz buni qattiq kodlashga qaror qildik, shuningdek, simni uzib qo'yish va ajratish kontakti ishga tushirilganda tutun bombalarini yoqish, to'g'ridan-to'g'ri mikrokontrollerning apparatiga.

Loyiha apparati: qanday qilib biz xakerlik qidiruvi bilan xona qurdik
Oxir-oqibat ekrandan tashqari arqon orqali yonib ketgan ip

Shunday qilib, Arduino hal qilgan uchinchi vazifa paydo bo'ldi - bu buyruqlarni bajarish bilan bog'liq ketma-ketlikni ishlab chiqish.

Shuningdek, biz Arduino-ga televizorda pul hisoblash va maydalagichni ishga tushirish zaruratini berishga qaror qildik. Dastlab, backend buni amalga oshiradi va joriy balans veb-saytda ko'rinadi va televizorda biz YouTube-dan sharhlarni qo'shimcha interaktiv element sifatida ko'rsatib, tomoshabinlarga xonadagi voqealar haqiqatda sodir bo'layotganini aytib beramiz. vaqt.

Ammo sinov paytida Ilya voqea joyiga qaradi va eng katta ekranda o'yin balansini ko'rsatishni taklif qildi: hali qancha pul qolgan, qancha ovqatlangan va maydalagichning keyingi ishga tushirilishi uchun ortga hisoblash.

Biz Arduino-ni joriy vaqtga bog'ladik: har to'liq soatda maydalagich ishga tushirildi. Tasvir televizorda malina yordamida namoyish etildi, u o'sha paytda serverdan so'rovlarni qabul qilib, ularni bajarish uchun arduinoga yubordi. Pul ko'rsatkichlari bo'lgan rasmlar konsol yordam dasturini shunday chaqirish orqali chizilgan

image = subprocess.Popen(["fim", "-q", "-r", "1920×1080", fim_str]), где fim_str

Va u kerakli miqdor yoki vaqtdan kelib chiqqan holda shakllantirildi.

Biz rasmlarni oldindan yaratdik: biz shunchaki taymer bilan tayyor videoni oldik va 200 ta rasmni eksport qildik.

Bu xochga dasturlashtirilgan mexanika. Yakuniy ortga hisoblash boshlanganda, biz hammamiz saytga bordik, o't o'chirgichlar bilan qurollanib, olovni kutish uchun o'tirdik (bu faqat kelishmovchilikda edi)

Bir hafta davomida ishlaydigan translyatsiyani qanday qilish kerak: kamerani tanlash

Topshiriq uchun bizga YouTube-da 7 kun davomida uzluksiz translyatsiya qilish kerak edi - biz o'yinning maksimal davomiyligini aniq belgilab oldik. Bizni to'xtata oladigan ikkita narsa bor edi:

  1. Uzluksiz ishlash tufayli kameraning haddan tashqari qizishi
  2. Internet uzilishi

Xonada o'ynash va tomosha qilish qulay bo'lishi uchun kamera kamida Full HD tasvirni taqdim etishi kerak edi.

Dastlab, biz oqimchilar uchun ishlab chiqarilgan veb-kameralarga qaradik. Biz byudjetni qisqartirdik, shuning uchun biz kamera sotib olishni xohlamadik, lekin ma'lum bo'lishicha, ular ularni ijaraga olishmaydi. Ayni paytda biz mo''jizaviy tarzda uyimda yotgan Xbox Kinect kamerasini topdik, uni xonamga o'rnatdik va bir hafta davomida sinov translyatsiyasini boshladik.

Kamera yaxshi ishladi va qizib ketmadi, lekin Ilya deyarli darhol uning sozlamalari yo'qligini payqadi, xususan, ekspozitsiyani o'rnatish mumkin emas.

Ilya eshittirish turini kino va video ishlab chiqarish standartlariga yaqinlashtirishga intildi: dinamik o'zgaruvchan yorug'lik sahnasini yorqin yorug'lik manbalari, qoraygan fon va ramkadagi narsalar bilan etkazish. Shu bilan birga, men minimal raqamli shovqin bilan yorqin va soyalarda tasvirning ishlanishini saqlab qolishni xohlardim.

Shuning uchun, Kinect sinovlarda ishonchli ekanligini isbotlagan va video ta'qib qilish kartasini talab qilmagan bo'lsa-da (yana nosozlik nuqtasi), biz undan voz kechishga qaror qildik. Uch kunlik turli xil kameralarni sinovdan o'tkazgandan so'ng, Ilya Sony FDR-AX53 ni tanladi - ijaraga olish arzon, ammo ayni paytda etarlicha ishonchlilik va vizual xususiyatlarga ega bo'lgan kichik, ishonchli videokamera.

Biz kamerani ijaraga oldik, uni bir hafta davomida videotasvirga olish kartasi bilan birga yoqdik va uning yordamida biz butun qidiruv davomida uzluksiz translyatsiyaga ishonishimiz mumkinligini angladik.

Kino suratga olish: sahnani sahnalashtirish va yoritish

Yoritish ustida ishlash ma'lum inoyatni talab qildi; biz minimal vositalar bilan yoritish ballini yaratishimiz kerak edi:

1. O'yinchilar ularni topganda ob'ektlarning yoritilishi (lazer, og'irlik), shuningdek, maydalagichda doimiy yorug'lik. Bu erda biz dedolight 150 - past kuchlanishli halogen lampalarga ega ishonchli va ixcham plyonkali yoritish moslamalaridan foydalandik, bu fon va boshqa ob'ektlarga ta'sir qilmasdan nurni ma'lum bir ob'ektga qaratish imkonini beradi.

2. Amaliy o'yin chirog'i - stol chiroqi, pol chiroqi, yulduzcha, gulchambar. Tasvir maydonini yoritish uchun barcha amaliy yorug'lik ramkada uyg'un ravishda taqsimlandi, ichida 3200K rang haroratiga ega LED lampalar mavjud edi, pol chiroqidagi chiroq noodatiy rang aksanini yaratish uchun qizil Rosco folga filtri bilan qoplangan.

Loyiha apparati: qanday qilib biz xakerlik qidiruvi bilan xona qurdik
Men onamning muhandisiman yoki ertaga ishga tushiriladi

Internet va elektr energiyasini qanday zahiraga oldik

Ular nosozliklarga chidamlilik masalasiga xuddi ma'lumotlar markazidagi kabi yondashdilar: ular asosiy tamoyillardan chetga chiqmaslikka qaror qilishdi va odatiy N+1 sxemasiga muvofiq zaxiraga olishdi.

Agar YouTube-da translyatsiya to'xtab qolsa, bu xuddi shu havola orqali qayta ulanish va oqimni davom ettirish imkonsiz bo'lishini anglatadi. Bu juda muhim daqiqa edi va xona oddiy ofisda joylashgan edi.

Buning uchun biz OpenWRT-ga asoslangan router va mwan3 to'plamidan foydalandik. U har 5 soniyada kanalning mavjudligini avtomatik ravishda sinab ko'rdi va tanaffus bo'lsa, Yota bilan zaxira modemga o'tdi. Natijada, zaxira kanaliga o'tish bir daqiqadan kamroq vaqt ichida sodir bo'ldi.
Loyiha apparati: qanday qilib biz xakerlik qidiruvi bilan xona qurdik
Elektr uzilishlarini bartaraf etish ham bir xil darajada muhim edi, chunki hatto qisqa muddatli quvvatning ko'tarilishi ham barcha kompyuterlarni qayta ishga tushirishga olib keladi.

Shuning uchun biz barcha o'yin qurilmalarini zaxira qiladigan ippon innova g2 3000 uzluksiz quvvat manbaini oldik: tizimimizning umumiy quvvat iste'moli 300 vatt atrofida edi. Bu 75 daqiqa davom etadi, bu bizning maqsadlarimiz uchun etarli.

Xonadagi elektr quvvati o'chib qolsa, biz qo'shimcha yoritishni qurbon qilishga qaror qildik - u uzluksiz quvvat manbaiga ulanmagan.

Rahmatlar

  • Butun jamoaga RUVDS, o'yinni ixtiro qilgan va amalga oshirgan.
  • Alohida-alohida, RUVDS ma'murlariga, serverlar ishini kuzatish uchun yuk maqbul edi va hamma narsa odatdagidek ishladi.
  • Eng yaxshi xo'jayinga ntsaplin qo'ng'iroqqa javoban, "Menda bir fikr bor: biz serverni olib, unga akvarium qo'yamiz va ustiga og'irlikni osib qo'yamiz, bum, portlash, hamma narsa suv bilan to'lgan, qisqa tutashuv, yong'in ” u har doim ishonch bilan aytadi: "Buni qiling!"
  • Rahmat Tilda nashriyoti va alohida Mixail Karpovga nafaqat yarim yo'lda uchrashganimiz va Foydalanish shartlarini buzishimizga ruxsat berganimiz, balki loyiha haqida gaplashganimizda bir yil davomida bizga biznes hisobini bergani uchun.
  • Ilya Serov S_ILya qo'shilish va loyihaning hammuallifi bo'lish uchun, yarim tunni aylanib o'tishga, LED tasmasini yopishtirishga, texnik echimlarni izlashga va biz haqiqiy filmga ega bo'lish uchun hamma narsani qilishga tayyormiz.
  • jovner ertalabgacha boshqalar qo'llarini, borschni, ma'naviy qo'llab-quvvatlash va suhbatlarni tashlaganida vaziyatni saqlab qolish uchun doimo tayyor bo'lish uchun.
  • samat bizni mamlakatdagi eng yaxshi pentester bilan bog'lagani uchun, u bizga maslahat bergan va vazifalarni bajarishda yordam bergan.
  • daniemilk barcha videolarni ajoyib video ishlab chiqarish uchun.
  • delfe mustahkam qo'l va oxirigacha ishlashga tayyorligi uchun.
  • Xo'sh Dodo pizza muhandisligi deyarli har doim issiq pizza uchun.

Ikki kun davomida uyqusiz va hatto ishni qoldirib, qidiruvga bostirib kirganingizda biz boshdan kechirgan barcha his-tuyg'ular uchun futbolchilarga eng katta minnatdorchilik bildiramiz.

Serverni yo'q qilish haqidagi boshqa maqolalar

Loyiha apparati: qanday qilib biz xakerlik qidiruvi bilan xona qurdik

Manba: www.habr.com

a Izoh qo'shish