پیش‌نویس:دگدگونی کد

«دگرگونی کد» (Code morphing) یکی از شیوه‌های رایج در مبهم‌سازی نرم‌افزار است که با هدف ایمن‌سازی برنامه‌ها در برابر تحلیل، تغییرات غیرمجاز، کرک و مهندسی معکوس به کار می‌رود. این فناوری به جای تمرکز بر کدهای باینری (موجودیتی)، روی حفاظت از کدهای سطح میانی—نظیر کدهای کامپایل‌شده در جاوا و زبان‌های مبتنی بر دات‌نت (مثل سی‌شارپ، اکسیژن و ویژوال بیسیک)—تمرکز دارد. در این روش، ابزار محافظتی کدهای اصلی را به دستورالعمل‌های ریزتر پردازنده یا قطعه‌کدهای کوچک می‌شکند و آن‌ها را با کدهای جایگزین عوض می‌کند، بی‌آنکه خروجی و عملکرد نهایی برنامه دچار تغییر شود. در واقع، این فرآیند ابهام‌سازی را مستقیماً در سطح کدهای میانی پیاده می‌کند.

این فناوریِ چندلایه، از صدها الگوی متمایز برای تغییر ساختار کد بهره می‌برد. افزون بر این، دگرگونی کد می‌تواند کدهای لایه میانی را به دستورهای قابل فهم برای ماشین مجازی (مانند پی-کد) تبدیل کند. با این حال، این تکنیک توانایی مقابله با ردیابی زمان اجرا (Runtime tracing) را ندارد؛ فرآیندی که می‌تواند منطق و ساختار حرکتی کدهای محافظت‌شده را آشکار سازد.

برخلاف دیگر ابزارهای امنیتی، در این شیوه مفهومی به نام رمزگشایی (Decryption) کد وجود ندارد. بلوک‌های کد در این ساختار همواره آماده اجرا هستند و سیستم آن‌ها را به همان صورتِ دگرگون‌شده اجرا و تفسیر می‌کند. اگرچه کد میانی اولیه تا حد زیادی از بین می‌رود، اما با بهره‌گیری از ابزارهای ابهام‌زدایی (Deobfuscation) همچنان می‌توان به تصویر واضحی از جریان کد اصلی دست یافت.

اصطلاح دگرگونی کد در دنیای سخت‌افزار نیز کاربرد دارد؛ این عبارت به فناوری کامپایل در زمان اجرای (JIT) به‌کاررفته در پردازنده‌های شرکت ترانسمتا اشاره می‌کند. این فناوری در تراشه‌هایی مانند کروسو و افیسیون تعبیه شده بود تا معماری مجموعه دستورالعمل‌های x86 را پیاده‌سازی کند.

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

 مکانیزم‌های پیشرفته در دگرگونی کد 
این فناوری از تکنیک‌های پیچیده‌ای برای تغییر ظاهر کد استفاده می‌کند که شناسایی ساختار اصلی را برای تحلیل‌گران سخت می‌آورد. برخی از این روش‌ها عبارتند از:

 تولید کدهای زائد (Junk Code Insertion): اضافه کردن دستورالعمل‌هایی که عملاً هیچ کاری انجام نمی‌دهند و تاثیری روی نتیجه برنامه ندارند، اما باعث گمراه شدن ابزارهای مهندسی معکوس می‌شوند.
 جایگزینی دستورالعمل‌ها (Instruction Substitution): تبدیل یک دستور ساده ریاضی یا منطقی به مجموعه‌ای از دستورهای پیچیده‌تر و معادل آن.
 تغییر جریان کنترل (Control Flow Graph Flattening): به‌هم ریختن نظم خطی اجرای کد و تبدیل آن به یک ساختار غیرخطی و تو در تو، به طوری که ردیابی مسیر منطقی برنامه به شدت دشوار شود.

 تفاوت با چندریختی (Polymorphic) و دگرگونی معمولی (Metamorphic) 
در حوزه امنیت نرم‌افزار، دگرگونی کد (Code Morphing) یک گام فراتر از تکنیک‌های چندریختی سنتی است. در روش‌های چندریختی، معمولاً هسته اصلی کد رمزنگاری می‌شود و فقط بخش رمزگشا در هر بار اجرا تغییر شکل می‌دهد. اما در دگرگونی کد، هیچ بخش رمزگشایی وجود ندارد و کل بدنه کد به صورت بومی و در سطح ساختاری دچار تغییر مداوم می‌شود، بدون اینکه نیازی به بازگرداندن آن به حالت اولیه در حافظه (RAM) باشد.

منابع
== منابع ==

 https://en.wikipedia.org/wiki/Code_morphing

https://dl.acm.org/doi/10.5555/776261.776263