مبهمسازی (Obfuscation) در زمینهی توسعهی نرمافزار به فرایند ایجاد تغییر در کدهای یک برنامه گفته میشود به گونهای که بررسی و درک آنها برای انسان یا ماشین (مانند آنتیویروسها) دشوار باشد. اغلب از روشهای مبهمسازی برای پنهان کردن هدف و منطق پشت پردهی کد یا مقادیر گنجانده شده در آن استفاده میکنند و به این ترتیب احتمال مداخله و مهندسی معکوس را کاهش داده یا آن را به یک معما و سرگرمی برای افرادی تبدیل میکنند که قصد یادگیری دارند.
وبشل چیست؟
وبشل یک رابط مبتنی بر پوسته (در سیستمعامل به معنی ایجاد کنندهی ارتباط بین کاربر و سیستمعامل) است که دسترسی و کنترل از راه دور به سرور وب را ممکن میسازد. به این ترتیب هکرها میتوانند با استفاده از یک وبشل مخرب به فایلهای شما دسترسی پیدا کنند. وبشلها میتوانند با زبانهای برنامهنویسی مختلفی نوشته شوند.
به عبارت دیگر وبشل یک اسکریپت مخرب است که اغلب توسط یک مهاجم با هدف گسترش یا حفظ دسترسی مداوم در یک سامانهی وب استفاده میشود. یک وبشل به خودی خود نمیتواند به یک آسیبپذیری از راه دور حمله یا از آن سو استفاده کند، بنابراین همیشه مرحلهی دوم حمله است.
مبهمسازی (Obfuscation) چیست؟
مبهمسازی (Obfuscation) در زمینهی توسعهی نرمافزار به فرایند ایجاد تغییر در کدهای یک برنامه گفته میشود به گونهای که بررسی و درک آنها برای انسان یا ماشین (مانند آنتیویروسها) دشوار باشد. اغلب از روشهای مبهمسازی برای پنهان کردن هدف و منطق پشت پردهی کد یا مقادیر گنجانده شده در آن استفاده میکنند و به این ترتیب احتمال مداخله و مهندسی معکوس را کاهش داده یا آن را به یک معما و سرگرمی برای افرادی تبدیل میکنند که قصد یادگیری دارند.
مبهمسازی ممکن است به صورت دستی یا با کمک ابزارهای مخصوصی موسوم به مبهمساز (Obfuscator) انجام شود. برخی از تکنیکهای مبهمسازی به شرح زیر است:
- نام گذاری متغیرها و توابع به صورت گمراه کننده یا بیمعنا
- استفاده از کامنتهای فریب دهنده
- کدگذاری رشتهها
- حذف یا افزودن فاصله
- ایجاد ابهام در Control Flow
- اضافه کردن کدهای بیربط و نوشتن کد با فرم و ظاهری غیر عادی
Deobfuscation کد ابزار Alfa Shell
Alfa Shell یکی از وبشلهای پرکاربرد منسوب به متخصصین ایرانی است. این وبشل حدود چهار نسخهی اصلی دارد که شیوهی Deobfuscation مربوط به سه نسخهی قبلی را در گذشته بررسی کردم. در اینجا قصد دارم نسخهی 4.1 ( آخرین نسخهی Alfa Shell) را مورد بررسی قرار بدم.
برای شروع ابتدا باید سورس مبهمسازی شده الفا را دریافت کنیم.
https://github.com/Ravin-Academy/DeObfuscation_ALFA_SHELL_V4.1/blob/main/Decode%20Of%20ALFA%20Team/alfav4.1-tesla.php
سپس باید کد مربوطه را در یک فایل با نام دیگر ذخیره کنیم که در اینجا با نام alfav4.1-tesla_encode_1.php ذخیره کردیم.
https://github.com/Ravin-Academy/DeObfuscation_ALFA_SHELL_V4.1/blob/main/alfav4.1-tesla_encode_1.php
در گام بعدی مقدار متغیر $WMKVyvv=’e’.’v’.’a’.’l’ را به $WMKVyvv=’echo’; تغییر میدهیم. و سپس این دستور را در ترمینال لینوکس اجرا می کنیم:
php alfav4.1-tesla_encode_1.php > alfav4_decode.php
محتوای دیکد شده در فایل جدید alfav4_decode.php ذخیره می شود:
https://github.com/Ravin-Academy/DeObfuscation_ALFA_SHELL_V4.1/blob/main/alfav4_decode.php#L145&L181
متنی زیر را در ابتدای این فایل مشاهده میکنید:
/* You’re killing me again ???? Am I still in your head ? ???? You used to light me up ???? Now you shut me down — Solevisible */
این متن از موزیک Archive – Again می باشد:
www.youtube.com/watch?v=r7rF2EZ0A_0
نکته بعدی این که یک شرط به شرح زیر در کد وجود دارد:
if(!isset($_SERVER[“HTTP_HOST”]))exit
با توجه به این شرط، اجرای اینوبشل باید از طریق یک وب سرور انجام شود و در غیراین صورت از برنامه خارج میشود. این خط کد را کامنت میکنیم تا ادامهی کار میسر شود.
در ادامهی مسیر با افزودن کد base64decode قادر به ادامهی Deobfuscation کد ALFA Shell خواهیم بود. مسیر کد اضافه شده به شرح زیر است:
https://github.com/Ravin-Academy/DeObfuscation_ALFA_SHELL_V4.1/blob/main/alfav4_decode.php#L66&L70
سپس دوباره دستور زیر را در ترمینال لینوکس اجرا میکنیم:
php alfav4_decode.php > final_decode.php
حال مشاهده میکنیم که خروجی کد مبهم شکسته شده در فایل final_decode.php ذخیره شد. این فایل از لینک زیر قابل دریافت است:
https://github.com/Ravin-Academy/DeObfuscation_ALFA_SHELL_V4.1/blob/main/final_decode.php