• پک کردن و یا پروتکت کردن فایل

  • Packer پر کاربردترین عنصر امنیتی در حوزهء نرم افزار است . وظیفهء Packer :
    • تغییر شکل و قالب بخشهای مهم فایلهای اجرائی
    • ارائه روتینهائی برای حفاظت از برنامه روی حافظه
    • کنترل یکپارچگی باینری
    • مخفی نگهداشتن مشخصه های حائز اهمیت باینری مانند کامپایلر و کتابخانه ها و ... است .


  • شاید بشود براحتی گفت بخش اصلی و پر رنگ روند نفوذ به حریم امنیتی یک نرم افزار ، در UnPack کردن آن خلاصه می شود .
  • Packer ها عموما" از این روشهای متداول برای انجام وظایفشان استفاده میکنند :
    • ارائهء روتین های آنتی دیباگ ( کشف دیباگر و توقف آن یا توقف روند اجرای برنامه یا ... )

    • ارائهء روتین های آنتی دامپ ( جلوگیری از بازسازی فایل باینری از طریق Memory Image )

    • حفظ یکپارچگی فایل با تکنیکهائی مانند CRC و Hash و امضاهائی دیجیتال

    • رمزنگاری اجزاء مهم نرم افزار روی دیسک و حافظه و اجرا از طریق توابع درون ساختهء نسبتا" امن Packer

    • درهم ریزی ساختار قابل شناسائی باینری برای جلوگیری از باز-شناسائی ابزارهای توسعه


  • اغلب Packer ها بخش قابل توجهی از این نیازها را پوشش می دهند و برخی از آنها با ارائه روشهای ابتکاری امکانات دیگری هم در اختیار توسعه گر قرار میدهند ، مثلا" حفاظت از کدهای سطح کاربر از طریق روتین های سطح کرنل ، یا اجرای کد رمز شده به کمک یه VM ماشین مجازی درون ساختهء Packer

    Packer های رایگان و تجاری متعدد و متفاوتی این روزها در دسترس هستند که هر کدام نقاط ضعف و نقاط قوتی دارند و از این مهمتر : برای اغلب اونها ابزارهای خودکار UnPack نیز موجود است . یعنی به محض استفاده از یک Packer متداول و شناخته شده ، یک نفوذگر نرم افزاری با تجربه براحتی آن را می شناسد و از ابزار خودکاری که احتمالا" فرد دیگری منتشر کرده است برای عبور از آن و بازسازی مجدد فایل باینری اصلی استفاده می کند . در این مسیر ابزارهای کمکی متعددی نیز وجود دارند که این روند را تقریبا" به یک وظیفهء روتین و نسبتا" ساده مبدل میکنند ، فی الواقع برای UnPack اغلب راه حلهای آزاد یا تجاری موجود ،به چیزی حدود [حداکثر] نیم ساعت وقت نیاز است !

    اما با این تفاصیل ، استفاده از Packer همچنان یک گزینهء مثبت است . چون اگر انتشار باینری به همان شکلی که هست "بدتر" باشه ، انتشار نسخهء Packed اون با [حتی] یک Packer غیر حرفه ای "بد" است و آدم عاقل می داند بین این دو کدام را انتخاب کند ؛ معهذا همیشه یک حالت بهتر وجود دارد .


    برای حفاظت از امنیت یک نرم افزار به کمک Packer ها باید به چند نکته مقدماتی توجه کنید :
    • Packer اولین سنگر حفاظتی است ، نه جدی ترین ، و نه آخرین .

    • Packer برای ایجاد وقفه در مسیر سهل تخریب امنیت نرم افزار مورد استفاده قرار میگیرد نه چیز دیگر

    • توسعهء یک Packer

    • حتی با استفاده از یک Packer خصوصی ، به امنیت غیر قابل دسترسی نخواهیم رسید


  • روش غلط استفاده از Packer :
    • برنامه ات رو بنویس .

    • یک Packer خیلی ساده و غیرحرفه ای از یک سایت روسی یا چینی بگیر .

    • برنامه ات رو Pack کن و منتشرش کن .

    • به نزدیکترین ATM مراجعه کن تا پولی که از برنامه ات درآوردی برداری.

    • بعد از مشاهدهء حساب خالی ات ، ....

  • وش صحیح استفاده از Packer :
    • برنامه ات رو بنویس .

    • ضمن توسعهء برنامه ات با مطالعهء مداوم مقالات مربوط به امنیت نرم افزار در سایت ها و کتابهای مختلف، سعی کن کمی با ادبیات این حوزه آشنا شوی .

    • حتما در بین کدهای برنامه ات هم از روشهای آنتی دیباگ و آنتی دامپ استفاده کن.

    • با استفاده از اطلاعات منتشر شده ، دنبال یک Packer

    • تو یک ایمیل به توسعه گر آن packer در مورد مشخصات برنامه ات توضیح بده و بخواه که بهترین توصیه ها را برای شما بفرسته.

    • با استفاده از توصیه های او برنامه ات رو Pack کن .

    • با استفاده از یک HEX Editor قسمتهای به خصوصی از باینری ات رو تغییر بده . این کار باید باعث نا شناخته موندن Packer مورد استفاده بشه ؛ با مطالعهء مقاله های موجود تمام تلاشت رو برای تغییر شکل و قالب نرم افزار بکار ببند و در این مسیر از هیچ ابزار عمومی و خودکاری استفاده نکن ؛ اگر نمیدونی چطور باید اینکار رو بکنی حتما جستجوی خودت رو در مورد این کار بیشتر کن و مقاله هائی در این زمینه را مطالعه کن . - برنامه ات رو منتشر کن .


  • Packer ها عموما" تاثیرات به خصوصی هم روی نرم افزارها می گذارند که لازم است در مورد بعضی از این تاثیرات فکر کنید :
    • سرعت : Packer ها به شکل چشمگیری سرعت اجرا و سرویس دهی برنامه رو کم میکنند ؛ اگر یک سرویس مینویسید ، یا درایور سطح کرنلی دارید که قرار است با یک کارت PCI مرتبط باشد ، استفاده از Packer قابل توصیه نیست .

    • اعتماد : در بسیاری از حوزه ها ، اعتماد به ماهیت نرم افزار ، نقش مهمی در توسعهء آن ایفا میکند . عموما" استفاده از Packer ضمن اینکه یک روش امنیتی محسوب میشود ، روشی برای مخفی سازی عملکرد نرم افزار نیز به شمار می آید .
  • Packer های قدرتمندی همیشه در دسترس هستنداما آنچه نقش مهم و حیاتی را ایفا میکند ، کسب دانش و توانائی درک نحوهء عملکرد ابزارهای امنیتی ، و اختصاصی سازی برخی از اونها برای دشوارتر کردن مسیر خدشه دار شدن حفاظ های نرم افزاری است . برای عمومیت برنامه نویسان ، کسب توانائی و تخصص فوق العاده بالا در امنیت نرم افزار نسبتا" امکان پذیر نیست ، چون کسب توانائی در این حوزه منوط به تعطیل شدن فعالیت در سایر حوزه هاست ؛ اما مطالعهء مقدماتی و آشنائی با ادبیات و کسب توانائیهای ابتدائی ، یقینا" یک وظیفهء غیر قابل چشم پوشی است .


  •  
    تمامی حقوق این وبسایت متعلق به شرکت منشور سیمین می باشد.