امنیت در ذخیره سازی اطلاعات در گیم میکر

امنیت در ذخیره سازی اطلاعات در گیم میکر

gameclass_security

(سطح پیشرفته)

همانطور که در اینجا و اینجا مفصلا گفته شد، استفاده از فایل های ini یکی از بهترین و آسان ترین راه های ذخیره و بارگذاری اطلاعات در بازی ساخته شده با گیم میکر است. اما همان طور که حتما حدس زده اید، مشکل بسیار مهمی که در روش ini وجود دارد این است که فایل تولید شده به راحتی در دسترس است و اگر بازیکن درک متوسطی از علوم رایانه داشته باشد، می تواند با دستکاری در این فایل، در سیستم ذخیره سازی بازی تغییرات مورد نظر خود را اعمال کند. البته این موضوع در صورتی که شما از فایل ini برای ذخیره سازی تنظیمات بازی مثل انتخاب زبان متون بازی، اندازه صفحه بازی، انتخاب سطح دشواری و …. استفاده کنید ، خطر جدی برای بازی شما پیش نمی آورد. اما تصور کنید که شما داده های با اهمیتی مانند امتیازات کسب شده بازیکن، سطح پیشرفت بازیکن در بازی، خریدهای درون برنامه ای، رتبه بازیکن در میان دیگر بازیکنان و …. را به صورت ini ذخیره کرده اید. در این صورت بازیکن زرنگ به راحتی محل فایل ini روی هارد کامپیوتر خود را پیدا می کند و با چند تایپ ساده از مرحله اول بازی به مرحله آخر آن می رود و یا تمام محتواهای قفل شده را برای خود فعالسازی می کند.

بنابراین استفاده از فایل ini برای ذخیره سازی اطلاعات حیاتی و مهم بازی ریسک های جدی دارد که باعث می شود به طور کلی درباره آن تجدید نظر کنیم. برای حل این مشکل راه های متنوعی وجود دارد. یکی از معمول ترین روش ها، این است که فایل ini خود را یرای بازیکن غیر قابل خواندن کنید. یعنی از الگوریتمی استفاده کنید که به سراغ فایل ini رفته و متن های آن را به صورت نظام مندی در هم ریخته کند. به این عملیات پنهان سازی (encode یا encryption) گفته می شود. با پنهان سازی محتوای ini ،این فایل برای کاربر غیر قابل درک می شود؛ زیرا کاراکترها به طوری درهم ریخته و رمزگذاری می شوند که ذهن انسان قابلیت کشف هیچ منطق و الگویی برای پی بردن به اطلاعات مخفی سازی شده آن نداشته باشد. در این صورت تنها رایانه قادر خواهد بود که با رمزگشایی (decode یا decryption) فایل، اطلاعات را از روی آن بازخوانی کند. به این ترتیب خیال بازیساز از حفظ شدن امنیت اطلاعات ذخیره سازی شده بازی راحت خواهد بود.

برای کمک به عملیات پنهان سازی و رمزگشایی در گیم میکر، روش های مختلفی ایجاد شده است که یکی از امن ترین آنها استفاده از توابع زیر می باشد:

ds_map_secure_save()

ds_map_secure_load()

مزیتی که استفاده از این روش دارد، این است که اطلاعات را که به صورت یک نقشه (map) ذخیره سازی شده است را به صورت یک فایل در هم ریخته پنهان سازی می کند و آن را در جای غیر قابل کشف از سیستم بازیکن مخفی می کند. در این صورت بازیکن هم در پیدا کردن محل فایل چار مشکل خواهد بود و هم در صورتی که حتی آن را پیدا کند، توانایی درک آن را برای ایجاد تغییرات نخواهد داشت. در تصویر زیر نمونه ای از یک فایل رمزگذاری شده با این روش را می بینید:

ذخیره گیم میکر

 

در این قسمت، با هم طی یک مثال عملی طریقه استفاده از این روش را فرا می گیریم:

مرحله اول: ذخیره سازی و رمزگذاری اطلاعات

در هنگامی که باید اطلاعات مورد نظر شما ذخیره سازی شود، باید ابتدا یک نقشه (map) ایجاد کنید. Map یک ساختار داده ای است که می توان تعداد بسیار زیادی جفت های اطلاعاتی را در آن وارد کرد. بیایید به یک نمونه معروف در همین مورد توجه کنیم. همانطور که احتمالا اکثر شما می دانید در بازی محبوب Clash Royale بازیکن دارای یک سری نیرو است که در قالب کارت های بازی در اختیار اوست و هرکدام از این کارت ها در بردارنده اطلاعات جنگی آن نیرو می باشند. از طرفی باید سیستم منظمی برای دسته بندی اطلاعات مربوط به هر کارت وجود داشته باشد و از طرف دیگر همان طور که می دانید امن بودن اطلاعات مربوط به این کارت اها بسیار حیاتی است.

ذخیره گیم میکر

همانطور که می بینیدکارت بالا به عنوان نمونه دارای جفت های اطلاعاتی به صورت زیر است:

Damage = 145;

Hitpoints = 2299;

Targets = “Buildings”;

برای پیاده سازی چیزی شبیه به این در گیم میکر می توانیم به صورت زیر عمل کنیم:

ابتدا باید جفت های اطلاعاتی خود را در قالب یک نقشه یا map تعریف کنیم:

 

my_map = ds_map_create();

خط  بالا یک map خالی را ایجاد می کند و نام آن را my_map می گذارد.

 

 

ds_map_add(my_map,”Damage”,145);

ds_map_add(my_map,”Hitpoints”,2299);

ds_map_add(my_map,”Targets”,”Buildings”);

همان طور که می بینید، متغیرهای مورد نظر را یکی یکی به map اضافه کرده و مقدار هر کدام را هم مشخص کرده ایم.

 

ds_map_secure_save(“game_data.dat”);

در این خط پس از معرفی همه متغیرهای مورد نیاز و مقدار دهی به آن، نقشه خود را به صورت رمزگذاری شده و با نام دلخواه game_data با فرمت .dat* ذخیره کردیم.  البته از فرمت ها دیگری نظیر.dat,.json,.bin و غیره نیز می توانیم استفاده کنیم.

 

ds_map_destroy(my_map);

چون کار ما با map تمام شده است، با استفاده از دستور بالا به راحتی آن  را حذف می کنیم. زیرا ساختارهایی مانند map بخشی از حافظه را  اشغال می کنند و وجود آنها در زمانی که دیگر نیازی به آن نیست ممکن است باعث بروز خطا شود. بنابراین همیشه باید بلافاصله بعد از انجام عملیات، آنها را حذف کنید.

 

مرحله دوم: بارگذاری و رمزگشایی اطلاعات

حالا که اطلاعات مورد نظر خود را در یک map قرار دادیم و سپس آن را به صورت رمزنگاری شده مخفی سازی کرده ایم، نوبت آن است که این اطلاعات را بازخوانی و رمزگشایی کنیم تا بتوانیم آن را در بازی مورد استفاده قرار دهیم. روند این عملیات دقیقا برعکس مرحله قبل است. یعنی این بار ابتدا اطلاعات را به صورت امن بارگذاری می کنیم. سپس آن را به صورت یک map در می آوریم و اطلاعات را از روی آن خوانده و مورد استفاده قرار می دهیم. بنابراین:

if file_exists(“game_data.dat”)

{

    my_map = ds_map_secure_load(“game_data.dat”);

    damage = ds_map_find_value(my_map , “Damage”);

    hitpoints = ds_map_find_value(my_map , “Hitpoints”);

    target = ds_map_find_value(my_map , “Targets”);

    ds_map_destroy(my_map);

}

در خط اول شرطی وجود دارد که ابتدا چک می کند که آیا این اولین بار است که بازیکن وارد بازی می شود یا خیر. اگر بازیکن قبلا وارد بازی شده در نتیجه اطلاعات بر طبق توضیحات مرحله قبل برای او ذخیره شده و در نتیجه فایلی به نام gamedata.dat روی سیستم وجود دارد. در این صورت در خط بعد این اطلاعات را به شکل رمزگشایی شده بارگذاری کرده و آن را در یک map با نام my_map قرار می دهیم.(البته می توانستید از نام جدید دیگری نیز استفاده کنید.)  در خطوط بعد با استفاده از تابع ds_map_find_value درون جدول را برای پیدا کردن مقادیر مورد نیازمان جستجو می کنیم و هرکدام را برابر با متغیر مورد نیازمان قرار می دهیم. و در نهایت مجددا چون کارمان با map تمام شده است  بایستی آن را حذف کنیم.

کار ما با map تمام است و اطلاعات مورد نیاز ما در حال حاضر به صورت امن بارگذاری شده و در بازی قابل استفاده خواهند بود. امیدواریم که مطلب این درس برای شما مفید باشد. در صورتی که سوال یا ابهامی درمورد این درس دارید می توانید از بخش نظرات در انتهای همین صفحه با ما درمیان بگذارید.

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *