۱۳۹۰/۰۱/۱۸

يكي كردن اسمبلي‌ها با استفاده از Eazfuscator


نسخه جديد برنامه Eazfuscator به همراه دو قابليت جالب يكي كردن و همچنين مدفون نمودن اسمبلي‌ها ارائه شده است:

يكي كردن چند اسمبلي با هم
Eazfuscator براي يكي كردن اسمبلي‌ها از برنامه معروف ILmerge استفاده مي‌كند با اين تفاوت كه ديگر نيازي نيست تا پارامترهاي آن‌را تنظيم كرد و بسياري از مسايل را به صورت خودكار مديريت مي‌كند.
جهت فعال كردن اين قابليت، يكي از روش‌هاي كار به صورت زير است:
فايلي به نام ObfuscationSettings.cs را به پروژه خود اضافه كرده، سپس محتويات آن‌را حذف نموده و با چند سطر زير جايگزين و كامپايل كنيد:
using System;
using System.Reflection;

[assembly: Obfuscation(Feature = "merge with file1.dll", Exclude = false)]
[assembly: Obfuscation(Feature = "merge with file2.dll", Exclude = false)]
[assembly: Obfuscation(Feature = "merge with file3.dll", Exclude = false)]

همانطور كه ملاحظه مي‌كنيد اين چند سطر حاوي نام اسمبلي‌هايي مي‌باشند كه قرار است با اسمبلي جاري يكي شوند.
سپس اسمبلي جاري را (مي‌خواهد فايل exe باشد يا يك dll ، فرقي نمي‌كند) بر روي Eazfuscator كشيده و رها كنيد. پس از چند لحظه اسمبلي نهايي توليد شده شامل تمام كلاس‌ها و منابع اسمبلي‌هايي خواهد بود كه در فايل ObfuscationSettings.cs ذكر شده‌اند؛ به همراه Obfuscation خودكار آن‌ها.

مدفون كردن اسمبلي‌ها در يك اسمبلي
قابليت ديگر اين برنامه دفن (embedding) چند اسمبلي در اسمبلي نهايي است. براي فعال سازي آن روش كار همانند قبل است با اين تفاوت كه بجاي merge with بايد نوشت embed . براي مثال:
[assembly: Obfuscation(Feature = "embed Common.dll", Exclude = false)]

به اين ترتيب اسمبلي‌هاي ذكر شده پس از رمزنگاري و فشرده شدن به صورت منابع اسمبلي جاري ذخيره خواهند شد. مديريت استفاده از آن‌ها هم خودكار است و نيازي نيست تا كاري در اين مورد صورت گيرد.
براي نمونه برنامه معروف LINQPad از همين روش استفاده مي‌كند و لازم به ذكر است كه ... هنوز كه هنوز است هيچ ك.ر.ك. كارسازي براي فعال سازي قسمت intellisense آن كه رايگان نيست ارائه نشده و تمام وصله‌هاي جديد ارائه شده كار نمي‌كنند ...

تفاوت مدفون كردن با يكي كردن چيست؟
در حالت يكي كردن اسمبلي‌ها، سربار اوليه بارگذاري برنامه همانند روش مدفون سازي وجود ندارد. اما اين سربار آنقدر ناچيز است كه كسي آن‌را احساس نخواهد كرد. مورد ديگر، عدم پشتيباني از روش مدفون سازي در ساير سكوهاي كاري مانند ويندوز فون، Compact Framework و غيره است. اما بايد درنظر داشت كه براي مثال ILMerge روي اسمبلي‌هاي داراي XAML كار نمي‌كند (مطابق مستندات رسمي آن). بنابراين هميشه نمي‌توان از روش يكي سازي استفاده كرد و محدوديت‌هاي خاص خودش را دارد.
در كل روش مدفون سازي به دليل Obfuscation ، فشرده سازي و رمزنگاري همزمان، امنيت بيشتري را نسبت به حالت Obfuscation تنها ارائه مي‌دهد (حداقل شخص "علاقمند" به مطالعه اين نوع اسمبلي‌ها بايد از چند لايه رد شود و تجربه برنامه LINQPad ثابت كرده كه اين روش در مقياس كلان (در انظار عمومي هزاران علاقمند) بسيار موفق بوده است).