رمزگشایی جاوا اسکریپت: راهنمای رفع ابهام

یکی از جذابترین چیزهایی که در سفر اولیه خود در توسعه وب به شما آموزش داده میشود این است که چگونه یک وبسایت را با کپی کردن کد منبع از صفحه ابزارهای توسعهدهنده تکرار کنید. بسیاری از توسعه دهندگان این را مفید می دانند، اما این مورد در مورد توسعه دهندگانی که این وب سایت ها را ساخته اند و صاحبان وب سایت ها صدق نمی کند.
این صاحبان وب سایت ها معمولاً از سرقت کدهای سمت مشتری (HTML، CSS و جاوا اسکریپت) خود می ترسند و نگران هستند. این تنها یک گزینه برای آنها باقی می گذارد: جستجوی راه حل هایی برای جلوگیری از کپی غیر مجاز یا سوء استفاده از کدهای منبع خود.
یکی از راه حل هایی که نیازهای صاحبان وب سایت ها را برآورده می کند، تکنیکی به نام ابهام سازی جاوا اسکریپت است. به زبان ساده، مبهم سازی جاوا اسکریپت عمل تبدیل کد جاوا اسکریپت قابل خواندن توسط انسان به قالبی پیچیده است که درک آن برای انسان دشوار است.
از آنجایی که یک سکه دو روی دارد، مبهم سازی جاوا اسکریپت همتای خود به نام deobfuscation جاوا اسکریپت را نیز دارد. از نام آن، میتوانید متوجه شوید که این عمل برعکس مبهمسازی جاوا اسکریپت است، در نتیجه یک کد جاوا اسکریپت از قبل مبهم شده را به قالبی قابل خواندن برای انسان تبدیل میکند.
توجه داشته باشید: در بیشتر موارد، رفع ابهامزدایی جاوا اسکریپت کد مبهم را به شکل اصلی خود نمیبرد، اگرچه گاهی اوقات فرم اصلی را دریافت میکنید. به جرات می توان گفت که رفع ابهامات جاوا اسکریپت کد اصلی جاوا اسکریپت را به شما نوید نمی دهد، بلکه کدی است که می توانید بخوانید و بفهمید.
توضیح کاربردی جاوا اسکریپت Deobfuscation و Obfuscation
ما با تمرین بهتر یاد می گیریم، بنابراین بیایید جنبه عملی تمام توضیحات نظری را در قسمت مقدماتی این راهنما بررسی کنیم.
برای آزمایش این تکنیک ها به کد جاوا اسکریپت نیاز دارید. با این گفته، اجازه دهید یک کد جاوا اسکریپت ساده ایجاد کنیم که یک متغیر را تعریف می کند و یک رشته را بر اساس تعداد دفعاتی که یک حلقه برای اجرا می شود، خروجی می دهد.
const no_loop_cycle = 5
for (let i = 0; i < no_loop_cycle; i++) {
console.log("String ", i)
}
اکنون که کد جاوا اسکریپت را برای آزمایش دارید، به JavaScript Obfuscator Tool بروید، ابزاری رایگان برای مبهم کردن کد جاوا اسکریپت.
نمونه کد جاوا اسکریپت را در ابزار قرار دهید و روی دکمه Obfuscate کلیک کنید.
در اینجا چیزی است که به عنوان خروجی دریافت خواهید کرد:
function _0xb78f(_0x2224cc,_0x217706){const _0x44095f=_0x4409();return _0xb78f=function(_0xb78f5c,_0x2ff516){_0xb78f5c=_0xb78f5c-0xd3;let _0x60ee28=_0x44095f[_0xb78f5c];return _0x60ee28;},_0xb78f(_0x2224cc,_0x217706);}const _0x5f75f2=_0xb78f;(function(_0x2c5162,_0x14873c){const _0x4e4ef7=_0xb78f,_0x5a8a62=_0x2c5162();while(!![]){try{const _0x1b7f08=parseInt(_0x4e4ef7(0xdb))/0x1*(-parseInt(_0x4e4ef7(0xdc))/0x2)+parseInt(_0x4e4ef7(0xdd))/0x3+-parseInt(_0x4e4ef7(0xd9))/0x4*(parseInt(_0x4e4ef7(0xd4))/0x5)+-parseInt(_0x4e4ef7(0xde))/0x6+parseInt(_0x4e4ef7(0xd6))/0x7*(-parseInt(_0x4e4ef7(0xd3))/0x8)+parseInt(_0x4e4ef7(0xd5))/0x9+parseInt(_0x4e4ef7(0xd7))/0xa;if(_0x1b7f08===_0x14873c)break;else _0x5a8a62['push'](_0x5a8a62['shift']());}catch(_0x153236){_0x5a8a62['push'](_0x5a8a62['shift']());}}}(_0x4409,0x71eba));const no_loop_cycle=0x5;for(let i=0x0;i<no_loop_cycle;i++){console[_0x5f75f2(0xda)](_0x5f75f2(0xd8),i);}function _0x4409(){const _0x5189f4=['2031897OhIMeN','15423690UOVACr','String\x20','1326068tySTtA','log','1CErZVM','245842QiNqEk','1819539wUQmJB','4133556arqvkn','16ZAFmnL','10OzrKck','3358431pZHaXs'];_0x4409=function(){return _0x5189f4;};return _0x4409();}
این کد مبهم را در ویرایشگر کد خود قرار دهید و آن را اجرا کنید تا صحت آن را تأیید کنید. خواهید دید که همان خروجی کد اصلی را می دهد.
اکنون که ابهام زدایی جاوا اسکریپت را در عمل مشاهده کردید، امتحان کردن ابهام زدایی جاوا اسکریپت به همان اندازه خوشایند خواهد بود. کد مبهم بالا را کپی کنید و آن را در این ابزار رایگان deobfuscated قرار دهید.
با استفاده از آن ابزار deobfuscator کد زیر را به شما می دهد:
for (let i = 0x0; i < 0x5; i++) {
console.log("String ", i);
}
کد بازگردانده شده پس از deobfuscating مشابه کد اصلی جاوا اسکریپت است اما با کمی تفاوت. این تأیید می کند که شما معمولاً کد جاوا اسکریپت واقعی را دریافت نمی کنید، اما کدی را در قالبی قابل خواندن و قابل درک دریافت نمی کنید.
چرا Deobfuscation جاوا اسکریپت مهم است؟
اکثر وبسایتها به شدت به جاسازی تکنیکهای خود برای جلوگیری از کاربران غیرمجاز، عمدتاً در کد جاوا اسکریپت، متکی هستند، زیرا مسئول تعاملات اساسی کاربر است (اکثر مواردی که نیاز به تعامل با وبسایتها دارند، با استفاده از جاوا اسکریپت اجرا میشوند).
تکنیکها عمدتاً مبهمسازی جاوا اسکریپت هستند، جایی که رفع ابهامزدایی جاوا اسکریپت وارد عمل میشود. این به مقابله با چنین اتفاقاتی کمک می کند، به خصوص هنگام خراش دادن وب.
ابهام زدایی جاوا اسکریپت به خوانایی بیشتر کد کمک می کند و به شما امکان می دهد اسکریپت را بهتر درک کنید، تعاملات خود را شبیه سازی کنید و داده های مورد انتظار را به درستی خراش دهید.
مبهم سازی جاوا اسکریپت حتی مکانیسم های ضد خراش بیشتری مانند اوراق بهادار ضد ربات، اتاق های انتظار Cloudflare و مجموعه ای از پازل های CAPTCHA را ایجاد می کند. با وجود این چالشها، رفع ابهامزدایی جاوا اسکریپت همچنان انجام میشود زیرا به دور زدن و مهندسی معکوس این چالشها کمک میکند.
نحوه عملکرد Deobfuscation جاوا اسکریپت
رفع ابهام زدایی جاوا اسکریپت فرآیندهای زیر را انجام می دهد:
- شناسایی مبهم سازی جاوا اسکریپت: برای شناسایی آن، باید برخی از الگوها مانند تغییر نام متغیر، کنترل کوچک سازی جریان، مقادیر هگزا دسیمال، رشته های رمزگذاری شده و غیره را بشناسید. با ادامه مطالعه آن، الگوهای بیشتری را کشف خواهید کرد.
- دسترسی به کد مبهم: اکنون که کد مبهم را مشاهده کردید، فرآیند بعدی دسترسی به کد با استفاده از ابزارهای توسعه دهنده کروم برای تجزیه و تحلیل بهتر است. همچنین می توانید پس از یافتن فایل، آن را ذخیره کنید.
- کد را فرمت کنید: ابزارهایی مانند Prettier یا زیباساز جاوا اسکریپت می توانند کد مبهم را قالب بندی کنند.
- کد را اجرا کنید تا در صورت عدم خطا، اعتبارسنجی شود.
- در نهایت، منطق عملکردی (کد برای تولید محتویات پنهان یا اعتبار سنجی نشانه) استخراج می شود.
راه حل هایی برای رفع اشکال جاوا اسکریپت
راه حل عالی برای رفع ابهام زدایی جاوا اسکریپت ترکیبی از مهارت های حل مسئله، توانایی شما در تشخیص الگوها در کد مبهم و استفاده از ابزارهای فنی است.
اگر ابزارهای لازم برای قالببندی کد خود، Chrome DevTools برای دسترسی و تجزیه و تحلیل کد مبهم، کتابخانههای شخص ثالث خارجی مانند uglify-js برای تجزیه و کوچکسازی کد و ابزارهای اشکالزدایی را دارید، میتوانید از طریق هر نمونه مبهمسازی جاوا اسکریپت مشاهده کنید.
برای ردیابی سریع کارها، می توانید از هر ابزار جاوا اسکریپت deobfuscator یا ابزار مورد استفاده در این راهنما استفاده کنید.