ضد هک کردن بازی در یونیتی ( مقاله اختصاصی رز سافت Rosedev.ir )


https://plink.ir/66aP6


برای ساخت یک بازی کامل وقت و حوصله و حتی گاهی هذینه بسیار زیادی صرف میشه و البته تیم سازنده بازی به ازای زحمتی که برای ساخت بازی میکشه طبیعتا انتظار این رو داره که از طریق ان بازی به درامد قابل توجهی برسه و برای اینکار نیاز داریم که از طریق پرداخت درون برنامه ای به کاربر چیزهایی را بفروشیم مانند سکه , الماس , امتیاز و … اما گاهی مشاهده میشه , بازی ای که برای ساخت ان این همه تلاش شده توسط چند تازه کار با نرم افزار هایی که در اینترنت به راحتی قابل یافت هست هک شده و حتی برخی از کاربران شروع به اموزش نحوه هک بازی هم میکنن ! حال اگر همچین اتفاقی برای بازی ای که برای ان یک سال تلاش کرده اید بیوفته چیکار میکنید ؟

ایا شروع میکنید که با تک تک سایت ها وبلاگ های متخلف برخورد قانونی کنید ؟ ( البته بزارید یادتون بیارم که اینجا ایرانه و باید حالا حالاها در گیر باشین تا بتوانید حقتون رو بگیرید , البته اگه بتونید ! ^_^ )

بنظر من بهتره از همون اول زیرساخت های بازی رو جوری بسازید که غیر قابل هک شدن باشه , چطور ؟ پس همراه ما باشید.

پرداخت درون برنامه ای

یکی از متداول ترین روش های هک کردن بازی استفاده از نرم افزار Lucky Patcher میباشد , این نرم افزار در صورت روت بودن گوشی میتواند درگاه پرداخت درون برنامه ای رو دور بزند و به نوعی بازی یا نرم افزار اندرویدی رو کرک کند , که خوشبختانه با تدابیر امنیتی جدید پرداخت درون برنامه بازار اینکار عملا غیر ممکن شده و باخیال راحت میتوانید پرداخت درون برنامه امنی برای بازی خود پیاده سازی کنید.

هک منابع بازی در حالت اجرا

شاید شما هم اطلاع داشته باشید که بغیر از نرم افزار بالا , نرم افزارهای مشابه زیادی در اینترنت وجود دارند که میتوانند منابع بازی در حال اجرا رو هک کنند , نرم افزار هایی مانند Hack App Data , HBoy , GameCheat , GameHack و …

کارکرد این نرم افزار ها در واقع به این صورت میباشد که دیتای بازی در حال اجرا رو میگردند و اونها رو تغییر میدن مثلا پول بازی 1000 هست در داخل نرم افزار عدد 1000 رو جستجو میکنند و بعد از پیدا کردن مثلا 100 عدد مشابه به داخل بازی برمیگردند و از پول خرج میکنند مثلا مقدار پول از 1000 به 500 کاهش پیدا میکنه حالا دوباره وارد محیط نرم افزار هک میشن و اینبار در بین 100 عدد یافته شده دنبال عدد 500 میگردند و این کار را انقدر تکرار میکنند که به یک عدد برسند و ان مقدار پول بازی است حالا مقدار اون رو عدد 99999999 قرار میدن و به راحتی از تمامی امکانات بازی استفاده میکنند , نرم افزار های ذکر شده قادر به جستجوی متغییر های زیر هستند

int gold_i = 1000;

string gold_s = "1000";

float gold_f = 1000f;

bool locked = false;


متغییرهای بالا جزو پایه ای ترین اجزای سازنده کدهای بازی هستند و به این راحتی قابل هک شدن میباشند .
هک فایل ذخیره شده یا save بازی

بله درسته (0_0) برخی از نسخه های نرم افزار های یادشده قابلیت پیدا کردن فایل save بازی و دستکاری کردن اون رو دارند , توابعی مانند توابع زیر به راحتی هک و دستکاری میشوند.

int num;

num = PlayerPrefs.GetInt ("num", 0); // load

PlayerPrefs.SetInt ("num", num); // save

حال چاره چیست ؟

حالا نوبتی هم باشه کم کم میرسیم به مبحث امنیت در بازی های یونیتی پس بریم برای ادامه مقاله …



اولین قدم استفاده از پکیج Anti-Cheat Toolkit با اضافه کردن این پکیج به یونیتی چند متد امنیتی جدید به یونیتی اضافه میشه که عملا کار هک شدن به روش های بالا رو غیر ممکن میکنه و مهمتر از اون باعث کار بااون بسیار ساده بوده و همچنین باعث افت فریم ریت یا کاهش سرعت بازی نمیشود , بعد از import کردن اون به پروژه وارد اسکریپتی که میخواهیم از انتی چیت در اون استفاده کنیم میشیم شکل اولیه کد به شکل زیر میباشد :

using UnityEngine;


public class Save_Load : MonoBehaviour

{

public int gold;

void Start()

{

LoadGold();

}


void LoadGold()

{

gold = PlayerPrefs.GetInt("gold", 100);

}

void SaveGold()

{

PlayerPrefs.SetInt("gold", gold);

}

}

در این حالت gold به راحتی هک میشود اما با استفاده از متد های انتی چیت ما اونو امن میکنیم , حالا به کد اصلاح شده پایین دقت کنید :

using UnityEngine;

using CodeStage.AntiCheat.ObscuredTypes;


public class Save_Load : MonoBehaviour

{

public ObscuredInt gold;

void Start()

{

LoadGold();

}


void LoadGold()

{

gold = ObscuredPrefs.GetInt("gold", 100);

}

void SaveGold()

{

ObscuredPrefs.SetInt("gold", gold);

}

}


به همین راحتی متغییر gold رو امن کردیم , البته فراموش نکنید که فقط داده هایی رو که واقعا نیازه رو با استفاده از ObscuredTypes کدگذاری کنید , با این روش فعلا تا حدود بسیار زیادی جلوی هک شدن به وسیله نرم افزار های روت و غیر روت رو میشه گرفت , اما هنوز تمام نشده و هنوز هم امکان هک شدن توسط کاربران حرفه ای تر ( هکرها ) وجود داره که در ادامه به بررسی اون میپردازیم.

Decompiler ها

مهندسی معکوس نرم افزارها و بازی ها دانشی که روز به روز پیشرفته تر میشه و یک خطر بزرگ برای استارتاپ های بزرگ و کوچک محسوب میشود , حال اگر هکر یک حرفه ای باشد چه ؟ جواب بسیار ساده است او میتواند بدون دردسر سورس کد بازی را استخراج کند و اصلاحاتی را که میخواهد در بازی اعمال کند مثلا مقدار پول را در شروع بازی 9999999 قرار دهد و دوباره از پروژه هک شده خروجی بگیرد و به اصطلاح نسخه مود بازی را بسازد .

راه حل مقابله با دیکامپایل شدن

برای مقابله با این نوع از هک مراحل زیر را انجام میدهیم و بعد از انجام صحیح انها درصد هک شدن بازی نزدیک به صفر خواهد بود

  1. استفاده از یونیتی جدید و تایید شده , منظور جدیدترین نسخه یونیتی که preview package ها را ساپورت کند , فعلا نسخه Unity 2020.2.f1 پیشنهاد میشه.

2.استفاده از Pro Guard : یک ابزار بسیار کاربردی برای سخت تر کردن فرایند دیکمپایل و با ترکیت اون با R8 تقریبا این فرایند رو غیر ممکن میکنه.

3. استفاده از R8 : شاید بهترین گذینه برای خروجی امن همین باشه , حالا R8 چیه ؟ در واقع R8 تمام اسکریپت ها رو از اول دوباره مینویسه و نام تمام متدها و متغییر ها رو عوض میکنه و همچنین باعث ناخوانا شدن کدها و افزایش سرعت بازی و کاهش حجم بازی میشه , به عنوان مثال متغییر int gold=1000 بعد از استفاده از R8 به int H4p%5=95425 تبدیل میشه (البته این فقط یه مثال بود )

تنظیمات راجع به خروجی با R8 و Pro Guard


مطابق تصویر بالا تیک سه گزینه رو میزنیم و بعد از اون ما یک خروجی بسیار امن برای اندروید خواهیم داشت , هرگونه سوال – پیشنهاد و یا انتقاد رو از طریق قسمت نظرات اعلام نمایید , ممنون بابت مطالعه این مقاله و امیدوارم که مطلب مفیدی برای شما عزیزان بوده باشه.

لینک سایت منبع : Rosedev.ir