کالبدشکافی فنی بازی Block Blast؛ چگونه بازی از پازلهای غیرممکن برای حداکثر کردن درآمد تبلیغاتی استفاده میکند — How Block Blast harvests its players for ad money
خلاصه
این مقاله فنی به بررسی مکانیزمهای پنهان بازی موبایلی Block Blast میپردازد که چگونه با استفاده از کدهای جاوااسکریپت رمزگذاریشده، مدلهای یادگیری ماشین XGBoost و پازلهای غیرممکن عمدی، بازیکنان را مجبور به تماشای تبلیغات با درآمد بالا میکند. این بررسی نشان میدهد که بخش عمدهای از منطق بازی روی سرور مدیریت میشود و ربطی به نسخه نصبی ندارد.
بر اساس یک بررسی فنی دقیق روی نسخه اندروید و iOS بازی محبوب Block Blast، مشخص شده است که این بازی موفقیت مالی عظیم خود را مدیون سیستمهای هوشمندی است که رفتار بازیکنان را مانیتور کرده و از پازلهای غیرممکن برای وادار کردن آنها به دیدن تبلیغات گرانقیمت استفاده میکنند. برای درک ابعاد این ماجرا، بد نیست بدانید درآمد این بازی از تبلیغات در بازه زمانی ژانویه تا مه ۲۰۲۶ بسیار چشمگیر بوده است.
معماری پنهان و ماژولهای پویا
هنگامی که پکیج بازی را از طریق ابزارهایی مثل jadx برای بخش جاوا و Ghidra برای کتابخانههای بومی Cocos دیکامپایل میکنید، متوجه میشوید که بخش عمدهای از بازی در فایل نصبی وجود ندارد. معماری بازی بر اساس ماژولهایی به نام trait و زیرشاخههایی به نام arm ساخته شده است:
- در زمان لانچ، سرور یک فایل کانفیگ حاوی صدها trait ارسال میکند.
- اپلیکیشن این بخشها را به صورت کدهای رمزگذاریشدهی JavaScript دانلود و اجرا میکند.
- دو بازیکن کنار هم ممکن است نسخههای کاملاً متفاوتی از بازی را اجرا کنند بدون اینکه آپدیتی از استور دریافت کرده باشند.
منطق فعالسازی تبلیغات گرانقیمت
یکی از این ماژولها به نام RewardHighValueAdHarvestTrait وظیفه دارد زمان مناسب برای تحمیل تبلیغات پربازده را تشخیص دهد. این ماژول دارای پارامترهایی است که سه شرط زیر را برای باختن ارزیابی میکند:
- بازیکن سه تبلیغ جایزهدار (Rewarded Ad) قبلی را تا انتها دیده باشد.
- تبلیغ فعلی ارزشی حداقل ۳.۵ برابر آخرین تبلیغ دیده شده داشته باشد (محاسبه شده از طریق eCPM در SDK تبلیغاتی مانند AppLovin MAX).
- امتیاز بازیکن از رکورد قبلیاش به میزان مشخصی (مثلاً ۱۰۰۰ امتیاز) عبور کرده باشد.
به محض اینکه این سه شرط همزمان برقرار شوند، بازی درخواست یک پازل مهندسیشده برای باخت میکند.
پازل مرگ (Lethal Puzzle)
الگوریتم شماره ۲۴۰۰۱ که در کدهای جاوااسکریپت و کتابخانه C++ بومی بازی وجود دارد، یک جستجوی اگزاستیو (Exhaustive Search) انجام میدهد. این الگوریتم قطعاتی را انتخاب میکند که:
- دو قطعه در صفحه جا شوند اما قطعه سوم جا نشود.
- با بررسی تمامی جایگشتها و خطوط قابل حذف، هیچ راه حل ممکنی برای پاک کردن صفحه وجود نداشته باشد.
بازی این قطعات را با برچسب چینی «致死题» به معنای «پازل مرگ» مشخص میکند تا کاربر ناچار به باخت و دیدن تبلیغ شود.
مدلهای یادگیری ماشین روی1 دستگاه
علاوه بر قوانین دستی، این بازی مدلهای XGBoost را روی گوشی کاربر اجرا میکند:
- یک مدل درخت تصمیم ۵۰۰تایی برای پیشبینی اینکه باخت در چه نقطهای از مرحله رخ دهد.
- یک مدل رگرسیون ۵۹ درختی که مشخصات سختافزاری، مدل گوشی، کشور کاربر (مانند تفاوت فاحش ارزش کاربر در آمریکا در مقایسه با برزیل یا هند) و سابقه تبلیغات را تحلیل میکند تا ارزش eCPM کاربر را تخمین بزند.
نگاه جامعه مهندسی در Hacker News
بسیاری از برنامهنویسان در هکرنیوز اشاره کردهاند که همیشه به چنین ترفندهایی در بازیهای موبایلی مشکوک بودهاند و آن را به پای ضعیف بودن مهارت خود (Skill Issue) میگذاشتند، اما این کالبدشکافی دقیق اثبات کرد که مهندسی معکوس و تحلیل بایتکدها چهره پشت پرده این اپلیکیشنهای درآمدزا را نمایان میکند.
این مطلب بهصورت کاملاً خودکار و با هوش مصنوعی از مقالهٔ اصلی و بحث هکرنیوز تهیه شده و ممکن است خطا داشته باشد. حقوق مطلب اصلی متعلق به نویسندهٔ آن است. قوانین و گزارش مشکل