در مطلبی ، خبر انتشار بازی رمزگشایی را به کاربران دادم. گفتم که این بازی ، مربوط به برنامه نویسی و امنیت است. قرار بود در مورد آن آموزش هایی قرار دهم تا افراد مبتدی هم بتوانند آن را بازی کنند. امروز در این مطلب می خواهم در مورد مرحله ای اول این بازی توضیحاتی بدهم و روش بردن مرحله ی اول را توضیح دهم.
نکته: برای اجرای کد های جاوا اسکریپت می توانید از کنسول موجود در مرورگر خود استفاده کنید. برای این کار F12 را بزنید و در قسمت console کد جاوا اسکریپت را وارد کنید و نتیجه را ببینید.
نکته: برای اجرای کد های C# می توانید از نرم افزار visual studio استفاده کنید.
برای ورود به بازی روی لینک زیر کلیک کنید:
مرحله ی یک بازی رمزگشایی
من در بازی عضو شدم و این مرحله را باز کردم. این مرحله 10 امتیاز دارد و آسان به حساب می آید. رمز مبهمی که برای من نمایش داده شده است ، عبارت زیر است:
<<<code>>>
32VE1e8n
<<</code>>>
می خواهیم با استفاده از چند مثال و کمی کدنویسی جاوا اسکریپت یا C# (در فضای کنسول) به رمز اولیه دست پیدا کنیم. در هر جا که برنامه نویسی لازم باشد من به هر دو زبان برنامه نویسی توضیح می دهم. (برای آشنایی با سی شارپ می توانید از این لینک استفاده کنید)
خب! باید از فرم بالایی استفاده کنیم تا بتوانیم به الگوریتم رمزگذاری پی ببریم. بیایید با هم چند کاراکتر و عبارت را آزمایش کنیم تا ببینیم چگونه توسط فرم بالایی مبهم می شوند. من 123 را وارد کردم و 234 نمایش داده شد. یک بار دیگر abc را وارد کردم و bcd را دریافت کردم. حال بیایید عدد کاراکتر هایی که وارد کرده ایم را بفهمیم: (کد کاراکتر چیست؟)
<<<code>>>
/* javascript: */
"123".charCodeAt(0); // 1 => 49
"123".charCodeAt(1); // 2 => 50
"123".charCodeAt(2); // 3 => 51
/* C# */
byte[] asciiBytes = Encoding.ASCII.GetBytes("123"); // array => [49, 50, 51]
<<</code>>>
به دست آوردن الگوریتم رمزگذاری
حال باید بدانیم چه تغییری در آن های ایجاد شده است. با همین کار می توانیم بفهمیم کد کاراکتر های جدید چه اعدادی است.
<<<code>>>
/* javascript */
"234".charCodeAt(0); // 2 => 50
"234".charCodeAt(1); // 3 => 51
"234".charCodeAt(2); // 4 => 52
/* C# */
byte[] asciiBytes = Encoding.ASCII.GetBytes("234"); // array => [50, 51, 52]
<<</code>>>
همان طور که مشاهده می شود ، کد کاراکتر های یک واحد زیاد شده است. پس الگوریتم این فرم را فهمیدیم. هر چیزی که به فرم داده شود ، کد کاراکتر آن یکی بیشتر می شود و در خروجی نمایش داده می شود.
توجه: شاید بگویید که می توانستیم بدون کد نویسی هم این موضوع را متوجه بشویم ، اما باید توجه کنید که همین حروف اعداد نیستند که باید که باید رمزگشایی شوند. گاهی اوقات کاراکتر های خاصی مانند ! ، ؟ و ... وارد کار می شوند که تنها راه استفاده از برنامه نویسی است.
برنامه ی رمزگشایی
حال می توانیم به این شکل ، رمز خود را رمزگشایی کنیم:
<<<code>>>
/* javascript */
var mypassword = "32VE1e8n",
unobfuscated = "";
for( var n in mypassword )
{
var charCode = mypassword.charCodeAt(n);
charCode--;
unobfuscated += String.fromCharCode(charCode);
}
alert(unobfuscated);
/* C# */
string mypassword = "1234asdf";
byte[] chars = Encoding.ASCII.GetBytes(mypassword);
string unobfuscated = "";
foreach( byte charCode in chars )
{
int newcharCode = charCode - 1;
char character = (char)newcharCode;
unobfuscated += character.ToString();
}
Console.WriteLine(unobfuscate);
Console.ReadKey();
<<</code>>>
خب! نتیجه ای که به دست می آید 21UD0d7m است. ما توانستیم یک مرحله را رمزگشایی کنیم.
خیلی از مراحل به همین شکل است. کدی از کاراکتر ها را باید به دست آورد و نتیجه گرفت که چه عمل ریاضیاتی یا بیتی ای روی آن انجام شده است تا عکس همان را انجام دهیم و به رمز اصلی دست پیدا کنیم. باید توجه کرد که این کار کمی هم به هوش بستگی دارد و شما باید با ذکاوت خود بتوانید مراحل را پشت سر بگذارید.
البته توجه داشته باشید که ممکن است تغییراتی که در کاراکتر ها ایجاد می شود فقط یک عمل ریاضایتی خیلی ساده نباشد. مثلا در مراحل با سطح دشواری "Hard" شاید برنامه به شکلی با شرط کار کند؛ مثلا ، اگر کاراکتر در مکان زوج بود یک کار را انجام دهد ولی اگر نبود کار دگیری را انجام دهد.