ProHoster > وبلاگ > اداره > سخت افزار پروژه: چگونه اتاقی را با تلاش هکرها ساختیم
سخت افزار پروژه: چگونه اتاقی را با تلاش هکرها ساختیم
یکی دو هفته پیش گذراندیم جستجوی آنلاین برای هکرها: اتاقی ساختند که آن را با وسایل هوشمند پر کردند و از آن پخش یوتیوب راه اندازی کردند. بازیکنان میتوانند دستگاههای IoT را از وبسایت بازی کنترل کنند. هدف این بود که یک اسلحه پنهان شده در اتاق (یک نشانگر لیزری قدرتمند) پیدا کنید، آن را هک کنید و باعث اتصال کوتاه در اتاق شوید.
برای افزودن به عمل، یک خردکن را در اتاق قرار دادیم که در آن 200 روبل بارگذاری کردیم: خردکن در هر ساعت یک اسکناس می خورد. پس از برنده شدن در بازی، می توانید خردکن را متوقف کرده و تمام پول باقی مانده را بردارید.
درخواست های زیادی برای نشان دادن لحظه تمیز کردن اتاق وجود داشت - ما نشان می دهیم که چگونه آن را جدا می کنیم
معماری سخت افزار: کنترل اتاق
ما طراحی یک راه حل سخت افزاری را زمانی شروع کردیم که سناریو تقریباً درک شده بود، باطن آماده بود، و ما یک اتاق خالی آماده برای نصب تجهیزات داشتیم.
با یادآوری جوک قدیمی «S در اینترنت اشیا مخفف امنیت است» («حرف S در مخفف اینترنت اشیا مخفف امنیت است»)، تصمیم گرفتیم که این بار بازیکنان در سناریوی بازی فقط با قسمت جلویی و بکاند تعامل داشته باشند. از سایت، اما این فرصت را به طور مستقیم به آهن دریافت نمی کنید.
این کار به دلایل ایمنی و نمایشی از آنچه روی صفحه اتفاق میافتد انجام شد: با دسترسی مستقیم بازیکنان به سختافزار، جدا کردن اقدامات ایمن و بالقوه خطرناک، به عنوان مثال، اسکرول سریع یک خردکن یا کنترل، بسیار دشوارتر خواهد بود. مواد آتش نشانی
قبل از شروع طراحی، ما چندین اصل را برای کنترل دستگاه های بازی تدوین کردیم که اساس طراحی شد:
از راه حل های بی سیم استفاده نکنید
کل فضای بازی در یک فریم است که به هر گوشه آن قابل دسترسی است. نیازی واقعی به اتصالات بی سیم وجود نداشت و آنها به سادگی تبدیل به نقطه شکست دیگری می شدند.
از وسایل خانه هوشمند خاصی استفاده نکنید
عمدتاً به خاطر انعطاف پذیری سفارشی سازی. واضح است که ما میتوانیم بسیاری از نسخههای جعبهدار سیستمهای خانه هوشمند را با ادمین و کنترلهای آماده برای کار خود سفارشی کنیم، اما هزینه نیروی کار با ایجاد راهحل ساده خود قابل مقایسه است.
علاوه بر این، لازم بود دستگاه هایی ارائه شود که به وضوح نشان دهد که این بازیکنان هستند که وضعیت آن را تغییر داده اند: آنها آن را روشن/خاموش می کردند یا یک چراغ خاص روی حروف FALCON قرار می دادند.
ما همه عناصر را از سختافزارهای در دسترس عموم که میتوان در فروشگاههای معمولی قطعات رادیویی خریداری کرد جمعآوری کردیم: بین تحویل پیتزا و کولای رژیمی، پیکهای چیپ و دیپ و لروی دائماً به سایت میآمدند.
انتخاب مونتاژ همه چیز خودمان، اشکال زدایی را ساده کرد، اما مقیاس پذیری به دقت بیشتری در حین نصب نیاز داشت.
تمام رله ها و آرودین نباید در قاب قابل مشاهده باشند
ما تصمیم گرفتیم تمام عناصر قابل کنترل را در یک مکان بیاوریم و آنها را در پشت صحنه پنهان کنیم تا بتوانیم عملکرد آنها را زیر نظر بگیریم و در صورت لزوم با دقت از دید دوربین خارج شویم و واحد خراب را جایگزین کنیم.
در نهایت همه چیز زیر میز پنهان شد و دوربین طوری نصب شد که چیزی زیر میز دیده نمی شد. این "نقطه کور" ما برای خزیدن مهندس بود
در نتیجه، ما در واقع یک دستگاه هوشمند دریافت کردیم: وضعیت هر یک از قطعات خود را از باطن دریافت کرد و با دستور مناسب آن را تغییر داد.
از نقطه نظر پیاده سازی سخت افزاری، این دستگاه 6 عنصر را کنترل می کرد:
چندین لامپ رومیزی، حالت روشن/خاموش دارند و توسط بازیکنان کنترل می شوند
حروف روی دیوار، آنها می توانند رنگ خود را به دستور بازیکنان تغییر دهند
فن هایی که وقتی سرور تحت بار است فلیپچارت را می چرخانند و باز می کنند
کنترل لیزری از طریق PWM
خردکن که طبق برنامه پول خورد
ماشین دودی که قبل از هر شلیک لیزر خاموش می شد
تست دستگاه دود با لیزر
بعداً یک چراغ صحنه اضافه شد که پشت قاب ایستاده بود و دقیقاً مانند لامپ ها از نقطه 1 کنترل می شد. نور صحنه در دو حالت کار می کرد: وقتی لیزر را به آن برق می رسید روشن می کرد و وزن را قبل از نور روشن می کرد. لیزر در حالت جنگی راه اندازی شد.
این دستگاه هوشمند چه بود؟
در تمام طول راه، یورا، مرد سخت افزار ما، سعی کرد مسائل را پیچیده نکند و ساده ترین راه حل ممکن را ارائه دهد.
فرض بر این بود که VPS به سادگی اسکریپتی را اجرا می کند که json را با وضعیت دستگاه ها دریافت می کند و آن را به آردوینو متصل از طریق USB می فرستد.
متصل به پورت ها:
16 رله معمولی (آنها بودند که صدای کلیکی را که در ویدیو شنیده می شد ایجاد می کردند. ما عمدتاً آنها را به دلیل این صدا انتخاب کردیم)
4 رله حالت جامد برای کنترل کانال های PWM مانند فن ها،
خروجی PWM جداگانه برای لیزر
خروجی که سیگنالی را به نوار LED تولید می کند
در اینجا نمونه ای از دستور json است که از سرور به رله آمده است
برای ردیابی لحظهای که لیزر در نهایت از طریق طناب میسوزد و وزنه روی آکواریوم میرود، یک دکمه کوچک ساختیم که با کاهش وزن فعال شد و به سیستم سیگنال داد.
دکمه ای برای نظارت بر حرکت وزنه
در این سیگنال، بمب های دودی ساخته شده از توپ های پینگ پنگ قرار بود روشن شوند. 4 فلر دود را مستقیم داخل کیس سرور گذاشتیم و با نخ نیکروم وصل کردیم که قرار بود گرم شود و مثل جرقه زن عمل کند.
خانه با بمب های دودزا و گلدسته چینی
آردوینو
طبق برنامه اولیه، دو عمل روی آردوینو انجام شد.
ابتدا، زمانی که یک درخواست جدید دریافت شد، درخواست با استفاده از کتابخانه ArduinoJson تجزیه شد. سپس، هر دستگاه مدیریت شده با دو ویژگی خود مقایسه شد:
حالت برق "روشن" یا "خاموش" (وضعیت استاندارد)
مدت زمان روشن شدن دستگاه - زمان بر حسب میکروثانیه از شروع برد، زمانی که زمان خاموش کردن آن است، یعنی وضعیت را به حالت استاندارد برسانید.
آخرین باری که هنگام دریافت پارامتر مربوطه در JSON تنظیم شد، اما قابل انتقال نبود، سپس مقدار روی 0 تنظیم شد و هیچ تنظیم مجددی انجام نشد.
دومین اقدامی که آردوینو در هر چرخه انجام میداد، بهروزرسانی حالتها بود، یعنی بررسی اینکه آیا نیاز به روشن کردن چیزی وجود دارد یا زمان خاموش کردن هر دستگاهی فرا رسیده است.
نشانگر لیزری - همان Megatron 3000
این یک ماژول معمولی LSMVR450-3000MF 3000mW 450nm فوکوس لیزری برش و علامت گذاری است.
حروف شاهین
آنها بسیار ساده ساخته شدند - ما به سادگی حروف لوگو را کپی کردیم، آنها را از مقوا برش دادیم و سپس آنها را با نوار LED پوشاندیم. در این مورد، من مجبور شدم قطعات نوار را به هم لحیم کنم، 4 تماس در هر درز، اما نتیجه ارزش آن را داشت. پاشا پشتیبان ما معجزات مهارتی نشان داد و این کار را در کمتر از چند ساعت انجام داد.
اولین تست های دستگاه iot و تکمیل
اولین تست ها را انجام دادیم و در همان زمان وظایف جدید به ما رسید. واقعیت این است که در اواسط روند، یک تهیه کننده و فیلمبردار واقعی فیلم از VGIK، ایلیا سروف، به تیم ملحق شد - او قاب را ساخت، نورپردازی سینما را اضافه کرد و فیلمنامه بازی را کمی تغییر داد تا داستان احساسی تر شود، و تصویر بیشتر دراماتیک و تئاتری است.
این به طور قابل توجهی کیفیت را افزایش داد، اما عناصری ظاهر شدند که همچنین باید به رله متصل شوند و الگوریتم عملیاتی تجویز شود.
مشکل دیگر لیزر بود: ما چندین آزمایش با انواع مختلف طناب و لیزرهای با قدرت های مختلف انجام دادیم. برای آزمایش، ما به سادگی یک وزنه را به صورت عمودی روی یک طناب آویزان کردیم.
هنگام اجرا با توکن تست، توان تنظیم شده از طریق PWM کمتر از 10٪ بود و حتی با قرار گرفتن در معرض طولانی مدت به طناب آسیب نمی رساند.
برای حالت مبارزه، لیزر تقریباً به نقطهای با قطر 10 میلیمتر از فوکوس خارج شد و با اطمینان از طریق یک طناب با بار از فاصله حدود یک متر سوخت.
بنابراین لیزر در آزمایشات کاملاً کار کرد
وقتی شروع به آزمایش همه چیز در اتاق روی یک وزنه معلق کردیم، معلوم شد که ایمن نگه داشتن لیزر چندان آسان نیست. سپس، هنگامی که طناب می سوزد، ذوب می شود، کشیده می شود و از کانون اصلی خود خارج می شود.
اما دیگر آنطور کار نمی کرد: طناب جابجا شد
ایلیا لیزر را به انتهای اتاق روبروی طناب منتقل کرد تا پرتو لیزر تمام صحنه را بگذراند و در کادر زیبا به نظر برسد که فاصله را دو برابر کرد.
پس از انجام چندین آزمایش دیگر با سوزاندن طناب در حال حاضر در نبرد، تصمیم گرفتیم که سرنوشت را شکنجه نکنیم و قطع کردن طناب را با استفاده از سیم نیکروم تضمین کنیم. 120 ثانیه پس از روشن کردن لیزر در حالت مبارزه، نخ را از بین برد. ما تصمیم گرفتیم این و همچنین قطع شدن سیم و احتراق بمب های دود را هنگام فعال شدن تماس جداسازی، مستقیماً در سخت افزار میکروکنترلر کدگذاری کنیم.
نخی که در نهایت از طریق طناب خارج از صفحه سوخت
بنابراین، یک کار سوم ظاهر شد که آردوینو حل کرد - کار کردن دنباله های مرتبط با اجرای این دستورات.
ما همچنین تصمیم گرفتیم به آردوینو این نیاز را بدهیم که روی تلویزیون پول حساب کند و خردکن را اجرا کند. در ابتدا فرض بر این بود که backend این کار را انجام می دهد و موجودی فعلی در وب سایت قابل مشاهده خواهد بود و در تلویزیون نظرات YouTube را به عنوان یک عنصر تعاملی اضافی نشان می دادیم و به بینندگان می گفتیم که رویدادهای اتاق به صورت واقعی اتفاق می افتد. زمان.
اما در طول اجرای آزمایشی، ایلیا به صحنه نگاه کرد و پیشنهاد کرد که تعادل بازی را در بزرگترین صفحه نمایش دهد: هنوز چقدر پول باقی مانده است، چقدر خورده شده است و شمارش معکوس برای شروع بعدی خردکن.
ما آردوینو را به زمان فعلی گره زدیم: هر یک ساعت کامل خردکن شروع می شد. تصویر با استفاده از rasberry بر روی تلویزیون نمایش داده می شد که در آن لحظه در حال دریافت درخواست از سرور و ارسال آنها به آردوینو برای اجرا بود. تصاویر با نشانگرهای پولی با فراخوانی کنسول utility fim چیزی شبیه به این ترسیم شده است
image = subprocess.Popen(["fim", "-q", "-r", "1920×1080", fim_str]), где fim_str
و بر اساس مقدار یا زمان مورد نیاز شکل گرفت.
ما تصاویر را از قبل تولید کردیم: به سادگی یک ویدیوی آماده با تایمر گرفتیم و 200 عکس صادر کردیم.
این مکانیک است که در صلیب برنامه ریزی شده است. زمانی که شمارش معکوس نهایی شروع شد، همه به محل رفتیم، خود را به کپسول های آتش نشانی مسلح کردیم و منتظر آتش سوزی (که فقط در اختلافات در اوج بود) نشستیم.
نحوه ساخت یک پخش که برای یک هفته کار می کند: انتخاب دوربین
برای تلاش، ما به یک پخش مداوم در YouTube به مدت 7 روز نیاز داشتیم - این دقیقاً همان چیزی است که ما به عنوان حداکثر مدت زمان بازی تعیین کردیم. دو چیز بود که می توانست ما را متوقف کند:
گرم شدن بیش از حد دوربین به دلیل کار مداوم
قطعی اینترنت
دوربین باید حداقل یک تصویر فول اچ دی ارائه می کرد تا بازی و تماشای اتاق راحت باشد.
در ابتدا، ما به دنبال وب کم هایی بودیم که برای پخش کننده ها تولید می شوند. ما بودجه را کاهش می دادیم، بنابراین نمی خواستیم دوربین بخریم، اما، همانطور که معلوم شد، آنها آنها را اجاره نمی کنند. در همان لحظه به طور معجزه آسایی یک دوربین Xbox Kinect را پیدا کردیم که در خانه من افتاده بود، آن را در اتاقم نصب کردیم و یک هفته پخش آزمایشی را شروع کردیم.
دوربین خوب کار می کرد و بیش از حد گرم نمی شد، اما ایلیا تقریباً بلافاصله متوجه شد که فاقد تنظیمات است، به ویژه تنظیم نوردهی غیرممکن است.
ایلیا به دنبال این بود که نوع پخش را به استانداردهای تولید فیلم و ویدیو نزدیک کند: انتقال یک صحنه نوری در حال تغییر پویا با منابع نور روشن، پس زمینه تاریک و اشیاء در کادر. در عین حال، من میخواستم جزئیات تصویر را هم در نقاط برجسته و هم در سایهها با حداقل نویز دیجیتال حفظ کنم.
بنابراین، اگرچه کینکت در آزمایشها قابل اعتماد بود و نیازی به کارت ضبط ویدیو نداشت (یکی دیگر از نقاط ضعف)، تصمیم گرفتیم آن را کنار بگذاریم. پس از سه روز آزمایش دوربین های مختلف، ایلیا Sony FDR-AX53 را انتخاب کرد - یک دوربین فیلمبرداری کوچک و قابل اعتماد که اجاره آن ارزان است، اما در عین حال قابلیت اطمینان و ویژگی های بصری کافی دارد.
ما یک دوربین کرایه کردیم، آن را به مدت یک هفته همراه با یک کارت فیلمبرداری روشن کردیم و متوجه شدیم که با آن میتوانیم روی پخش مداوم در کل تلاش حساب کنیم.
ساخت فیلم: صحنه سازی و نورپردازی
کار بر روی نورپردازی نیاز به لطف خاصی داشت؛ ما باید با حداقل امکانات یک امتیاز نورپردازی بسازیم:
1. روشنایی اشیا در هنگام یافتن بازیکنان (لیزر، وزن)، و همچنین نور ثابت روی دستگاه خردکن. در اینجا ما از dedolight 150 استفاده کردیم - دستگاه های روشنایی فیلم قابل اعتماد و فشرده با لامپ های هالوژن کم ولتاژ، که به شما امکان می دهد پرتو را روی یک جسم خاص بدون تأثیر بر پس زمینه و سایر اشیاء متمرکز کنید.
2. نور بازی عملی - چراغ رومیزی، چراغ کف، ستاره، گلدسته. تمام نور عملی به طور هماهنگ در قاب توزیع شد تا ناحیه تصویر را روشن کند، لامپ های LED با دمای رنگ 3200K در داخل وجود داشت، لامپ در لامپ کف با یک فیلتر فویل Rosco قرمز پوشانده شد تا یک لهجه رنگی غیر معمول ایجاد کند.
من یک مهندس در خانه مادرم هستم یا فردا راه اندازی است
چگونه اینترنت و برق رزرو کردیم
آنها به موضوع تحمل خطا تقریباً مانند یک مرکز داده نزدیک شدند: آنها تصمیم گرفتند از اصول اولیه منحرف نشوند و طبق طرح معمول N+1 رزرو کردند.
اگر پخش در YouTube متوقف شود، به این معنی است که اتصال مجدد با استفاده از همان پیوند و ادامه جریان غیرممکن خواهد بود. لحظه حساسی بود و اتاق در یک دفتر معمولی قرار داشت.
برای این کار از یک روتر مبتنی بر OpenWRT و بسته mwan3 استفاده کردیم. هر 5 ثانیه به طور خودکار در دسترس بودن کانال را آزمایش می کرد و در صورت وقفه، با Yota به مودم پشتیبان تغییر می کرد. در نتیجه تغییر به کانال پشتیبان در کمتر از یک دقیقه اتفاق افتاد.
حذف قطعی برق نیز به همان اندازه مهم بود، زیرا حتی یک موج کوتاه مدت برق باعث راه اندازی مجدد همه رایانه ها می شود.
بنابراین، ما یک منبع تغذیه بدون وقفه ippon innova g2 3000 گرفتیم که از تمام دستگاه های بازی پشتیبان تهیه می کرد: کل مصرف برق سیستم ما حدود 300 وات بود. 75 دقیقه طول می کشد که برای اهداف ما کافی است.
ما تصمیم گرفتیم در صورت قطع برق اتاق، نور اضافی را قربانی کنیم - به منبع برق اضطراری متصل نیست.
به طور جداگانه، برای مدیران RUVDS، برای نظارت بر کار سرورها، بار قابل قبول بود و همه چیز طبق معمول کار می کرد.
به بهترین رئیس ntsaplin برای این واقعیت که در پاسخ به تماس، "من یک ایده دارم: ما یک سرور می گیریم، یک آکواریوم روی آن قرار می دهیم و یک وزنه را بالای آن آویزان می کنیم، بوم، بنگ، همه چیز پر از آب است، اتصال کوتاه، آتش سوزی !» او همیشه با اطمینان می گوید "این کار را انجام بده!"
سپاس ها انتشارات تیلدا و به طور جداگانه به میخائیل کارپوف برای اینکه نه تنها در نیمه راه ملاقات کردیم و به ما اجازه داد تا شرایط استفاده را زیر پا بگذاریم، بلکه حتی زمانی که در مورد پروژه صحبت کردیم یک حساب تجاری به ما داد.
ایلیا سرو S_ILya برای پیوستن و تبدیل شدن به یکی از تهیه کنندگان پروژه، آماده خزیدن نیمی از شب، چسباندن نوار LED، جستجوی راه حل های فنی و انجام همه کارها برای دریافت یک فیلم واقعی.
ژوونر برای همیشه آماده برای نجات شرایط زمانی که دیگران دست خود را، گل گاوزبان، حمایت اخلاقی و گفتگو تا صبح می کنند.
سمات برای ارتباط ما با بهترین پنتستر کشور، که ما را نصیحت کرد و در انجام وظایف به ما کمک کرد.