پرش به محتوای اصلی

ربودن جریان RTMP PS5

هکرنیوز۱۴۰۵ مهر ۶, دوشنبه، ساعت ۱۹:۰۵حدود 4 دقیقه مطالعه

آدرس مقاله: https://yashgarg.dev/posts/hijacking-ps5-rtmp-stream/ آدرس نظرات: https://news.ycombinator.com/item?id=49879702 امتیاز: 215 # نظرات: 67

سونی به تدریج کارهایی را که می توانید با سخت افزار PS5 انجام دهید قفل کرده است. پخش جریانی مثال خوبی است: کنسول یک دکمه "پخش" خوب و راحت را به شما می دهد، اما لحظه ای که می خواهید کاری خارج از تعداد معدودی از خدماتی که سونی پشتیبانی می کند انجام دهید، خیلی سریع آزاردهنده می شود.

دستگاه های بلوتوث شخص ثالث همان داستان هستند! سونی پشته بی‌سیم را روی لوازم جانبی خود قفل می‌کند، بنابراین هدفون یا کنترلرهای برندهای دیگر شما به سادگی جفت نمی‌شوند:/

Remote Play تا حدودی برای من کار کرد. می‌توانم PS5 را به مک‌بوک خود متصل کنم، صفحه مک را با Discord به اشتراک بگذارم و از آنجا بازی کنم.

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

نمی‌خواستم هر بار که می‌خواستم استریم کنم، تنظیمات فیزیکی‌ام را تغییر دهم.

PS5 به طور پیش‌فرض از پخش جریانی به YouTube و Twitch پشتیبانی می‌کند، اگر به آن حساب‌ها وارد شده باشید. پروتکل مورد استفاده برای این کار RTMP یا پروتکل پیام رسانی بلادرنگ است که معمولا برای پخش زنده صوتی/تصویری استفاده می شود.

بنابراین وقتی پخش را شروع می کنید، PS5 تقریبا این کار را انجام می دهد:

اگر بتوانیم دستگاه خودمان را به عنوان Twitch عمل کنیم و در عوض آن جریان RTMP را دریافت کنیم، چه؟

این ایده است. PS5 IP Twitch را هاردکد نمی کند، هر بار آن را از طریق DNS جستجو می کند. اگر ما کنترل کنیم که DNS چه چیزی را برمی گرداند، ما کنترل می کنیم که جریان کجا می رود.

اولین تلاش آشکار، جعل مستقیم ingest.twitch.tv بود. این همان نام میزبانی است که PS5 با زدن پخش آن حل می کند، بنابراین نشان دادن آن به سمت Mac باید کار کند، درست است؟

نه کاملا. ingest.twitch.tv:443 در واقع یک نقطه پایانی کشف است، نه خود سرور RTMP. PS5 یک تماس HTTPS با آن می‌پرسد: «از کدام سرور محلی استفاده کنم؟» و Twitch با چیزی مانند ap-southeast-1.prod.fi.contribute.live-video.net پاسخ می دهد. سپس PS5 جریان واقعی را به آنجا هل می دهد.

جعل نام میزبان با مشکل دیگری روبرو شد: دریافت واقعی Twitch از RTMPS (RTMP بر روی TLS در درگاه 443) استفاده می کند، و PS5 گواهی را در برابر CA های قابل اعتماد تأیید می کند. گواهی امضا شده کار نمی کند، و هیچ راهی برای نصب CA سفارشی روی PS5 وجود ندارد.

سپس یوتیوب را به عنوان یک راه حل امتحان کردم. دریافت RTMP آن از RTMP ساده در پورت 1935 استفاده می کند، بنابراین هیچ گواهی TLS برای مقابله با آن وجود نداشت. PS5 با خوشحالی استریم را به مک من فرستاد، بنابراین می‌دانستم که رویکرد اصلی کارآمد است.

مشکل این بود که PS5 به طور دوره‌ای API YouTube را بررسی می‌کند تا مطمئن شود که جریان واقعا زنده است. از آنجایی که YouTube هرگز پخش جریانی را دریافت نکرد، این بررسی انجام نشد و پس از حدود 60 ثانیه پخش متوقف شد.

این بدان معنی بود که من باید یک نقطه پایانی Twitch پیدا کنم که از RTMP ساده استفاده می کند. پاسخ از تماشای گزارش‌های DNS در حین پخش بود:

PS5 در حال حل‌وفصل ingest.global-contribute.live-video.net بود که به aps30.contribute.live-video.net تبدیل می‌شود. این سرور RTMP واقعی است. جعل مشارکت.live-video.net همه زیردامنه ها را پوشش می دهد و جریان واقعی را بدون هیچ گونه مشکل گواهی به مک هدایت می کند.

راه اندازی دو بخش اصلی دارد: dnsmasq و nginx-rtmp. من یک برنامه نوار منوی macOS کوچک ساختم که هر دو را دسته بندی می کند و آنها را مدیریت می کند.

من dnsmasq را روی مک خود اجرا می‌کنم و آن را به گونه‌ای پیکربندی می‌کنم که دامنه‌های ورودی Twitch را به آدرس LAN مک من حل کند:

192.168.8.175 آی پی مک من است. وقتی PS5 یکی از این نقاط پایانی Twitch را از DNS می‌خواهد، dnsmasq به جای آن IP مک من را برمی‌گرداند. PS5 با فکر Twitch به مک من متصل می شود.

آخرین قطعه PS5 را به سمت این سرور DNS نشان می دهد. من یک روتر GL.iNet دارم که OpenWRT را اجرا می کند، بنابراین آن را طوری پیکربندی کردم که IP مک خود را به عنوان سرور DNS به طور خاص برای اجاره DHCP PS5 تحویل دهد.

بخش تگ: PS5 کار می کند زیرا اجاره استاتیک PS5 قبلا دارای آن برچسب در /etc/config/dhcp است. گزینه 6 گزینه DHCP برای سرور DNS است. PS5 این را در تمدید بعدی DHCP خود انتخاب می کند، هیچ پیکربندی دستی DNS روی کنسول مورد نیاز نیست!

پاسخ به تماس on_publish این است که چگونه برنامه نوار منو تشخیص می دهد که PS5 شروع به پخش می کند. nginx یک POST به localhost:9988 با نام استریم ارسال می کند و برنامه URL کامل RTMP را آماده کپی می کند.

در این مرحله، PS5 جریان خود را (1080p60، H.264، استریو AAC) مستقیما به جای Twitch به مک من منتقل می کند.

از اینجا می توانم استریم را به هر چیزی بکشم: OBS برای پخش مجدد آن، ضبط محلی یا فقط پخش مستقیم آن.

به جای رفتن از طریق OBS، از mpv برای کشیدن جریان استفاده کردم و پنجره را با Discord به اشتراک گذاشتم. نمایه کم تاخیر تاخیر را کمتر از یک ثانیه نگه می دارد:

این کاملا قابل اعتماد بوده است. من الان چند هفته است که از آن استفاده می کنم و هیچ مشکلی نداشتم. شما می توانید کد منبع کامل را در اینجا پیدا کنید.

خواندن متن کامل در هکرنیوزبه زبان اصلی، در سایت ناشر باز می‌شود
متن اصلی (انگلیسی)

Hijacking the PS5's RTMP stream

Article URL: https://yashgarg.dev/posts/hijacking-ps5-rtmp-stream/ Comments URL: https://news.ycombinator.com/item?id=49879702 Points: 215 # Comments: 67

همه‌ی اخبار فناوری