PDA

View Full Version : درس دوم : Compressor - Packer - Encryptor



Inprise
چهارشنبه 14 اردیبهشت 1384, 02:14 صبح
سلام؛

این تاپیک به معرفی مفاهیم و خواص و ویژگیهای ابتدائی Compressor ها - Packer ها و Encryptor ها اختصاص داره و در ادامهء درس اول (http://www.barnamenevis.org/forum/viewtopic.php?t=22173) ، امیدوارم بتونه فضای مناسبی برای انتقال اطلاعات باشه ، حداقل در حد یک EntryPoint ساده .

:)

Inprise
چهارشنبه 14 اردیبهشت 1384, 02:14 صبح
Compressor یا فشرده ساز ، ابزاری برای کاهش حجم فایلهای [عموما"] اجرائی است که کمک میکنه سایز و اندازهء فایل ، روی دیسک یا اصطلاحا" Disk Image کوچکتر بمونه ؛ کمپرسور مشخصا" یک ابزار امنیتی نیست . اغلب توسعه گران از کمپرسورها برای کاهش حجم فایلهای اجرائی غول پیکر برنامه هایشان استفاده میکنند ( برنامه هائی که هفتاد و پنج تا فرم و پنجاه تا کانکشن استرینگ و هزار و یک عدد ریسورس رو یکجا جمع کرده و فرصت نفس کشیدن به Loader بدبخت و مفلوک سیستم عامل نمیده و هر از چند گاهی اگر یک Access Violation هم به برنامه نویس داده شده ، ایشون یک عدد بیلاخ حوالهء کامپایلر و محیط توسعه میکنند و توی فرومها و وبلاگها و غیرهم در نکوهش اون کامپایلر و محیط چه ها که نمی نویسند ! )

کمپرسورها منطق ساده ای دارند . یک برنامهء فوق العاده کوچک که برنامهء اصلی رو [ که قبلا" فشرده شده و فرضا" بصورت یک ریسورس به اون لینک شده] مجددا" به یک فایل باینری/اجرائی "روی حافظه" مبدل کنه و شاید در نگاه اول بسیاری از مشخصه های برنامه اصلی رو به نوعی از دید بررسی کنندگان مخفی کنه ؛ اما در واقع ، آنچه اجرا میشه ، نسخهء کامل برنامهء اصلی ، روی حافظه است ؛ شاید کمپرسور بتونه یک برنامهء حجیم و خفن رو کوچکتر کنه و کمی از هارد دیسک چهل گیگابایتی شما رو نجات بده ، اما یقینا" برنامهء بزرگ و خفن ، کماکان خرخرهء حافظه رو خواهد جوید و عموم کمپرسورها کمک قابل ذکری در این زمینه نمیکنند ؛

بسیاری از توسعه گران مبتدی از کمپرسورها به عنوان یک ابزار حفاظتی استفاده میکنند به این خیالات واهی :

- کد قابل مطالعه نیست ؛ چون حالا من روی دیسک چیزی از کد اصلی نمیبینم .
- چیزی از برنامه اصلی روی دیسک کپی نمیشه پس کسی نمیتونه برنامه رو دستکاری کنه .
- نوع کامپایلر و کتابخانه های مورد استفاده ام لو نمیره .

اما در واقع :

- با یک Memory Dump ساده ، کد باینری برنامهء اصلی به دست میاد و میشه براحتی باهاش PEی اصلی رو بازسازی کرد
- میشه متن کد برنامه رو روی حافظه دستکاری کرد و نهایتا" برای تثبیت اون از یک Loader استفاده کرد
- با مطالعه نسخهء روی حافظهء برنامه هم میشه براحتی عناصر برنامه رو آنالیز کرد

کمپرسورها ، نه کمک مفیدی به حفاظت از امنیت نرم افزار میکنند ، نه فایدهء چندانی به حال برنامه های عصر حجری حجیم و Single Module خواهند داشت ؛ برنامه نویسهای با تجربه ، برای رفع مشکل حجم کد ، از تقسیم کد به عناصر کوچکتر ، و برای حفاظت از امنیت کد از Packer ها و Encryptor ها استفاده میکنند ، که به مرور در مورد نحوهء عملکرد انواع مختلف و متداول اونها مطالبی ارائه خواهد شد .

شب خوش

:)

Inprise
چهارشنبه 14 اردیبهشت 1384, 15:16 عصر
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 خوب و نسبتا" گرون قیمت بگرد
- از یک نفر بخواه نسخه حرفه ای اون رو برات بخره ، به اسم خودت ثبتش کن و بلافاصله یک ایمیل برای توسعه گرش ارسال و ازش بخاطر نرم افزار خوبش تشکر کن .
- چند ساعت بعد تو یک ایمیل دیگه در مورد مشخصات برنامه ات براش توضیح بده و ازش بخواه بهترین توصیه هاش رو برات بفرسته و در پایان یک Best Wishes هم بنویس .
- با استفاده از توصیه های او برنامه ات رو Pack کن .
- با استفاده از یک HEX Editor قسمتهای به خصوصی از باینری ات رو تغییر بده . این کار باید باعث نا شناخته موندن Packer مورد استفاده بشه ؛ با مطالعهء مقاله های موجود و مطالبی که فرومهائی مثل اینجا ارائه میکنند تمام تلاشت رو برای تغییر شکل و قالب نرم افزار بکار ببند و در این مسیر از هیچ ابزار عمومی و خودکاری استفاده نکن ؛ اگر نمیدونی چطور باید اینکار رو بکنی منتظر مقاله هائی که به همین منظور همینجا منتشر خواهند شد بمون .
- برنامه ات رو منتشر کن ؛ به دوست دخترت زنگ بزن و شب باهاش قرار بگذار .
- نیم ساعت قبل از قرار به نزدیکترین ATM مراجعه کن تا پولی که از فروش برنامه در آوردی رو خرج کنی
- درسته پولی که تو حسابته کمه ، اما احتمالا" اون شب بخیر خواهد گذشت . شاید برای برنامه های بعدی ات وقت بیشتری بگذاری ، مطالب بیشتری بخونی و از افراد با سواد تری کمک بگیری ؛ بالاخره آدم به امید زنده است .

Packer ها عموما" تاثیرات به خصوصی هم روی نرم افزارها میذارند که لازمه در مورد بعضی از این تاثیرات فکر کنید :

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

- اعتماد : در بسیاری از حوزه ها ، اعتماد به ماهیت نرم افزار ، نقش مهمی در توسعهء اون ایفا میکنه . عموما" استفاده از Packer ضمن اینکه یک روش امنیتی محسوب میشه ، روشی برای مخفی سازی عملکرد نرم افزار نیز به شمار میاد .


Packer های خوب و سورس آزادی مانند yP و Packer های تجاری و قدرتمندی مثل SVKP همیشه در دسترس هستند و درگیری های خونین و ناموسی بین توسعه گران روشهای امنیتی و نفوذگران روی سایتهای زیر زمینی و فرومهای کذائی وجود داشته/داره/خواهد داشت ؛ اما برای یک توسعه گر آنچه نقش مهم و حیاتی رو ایفا میکنه ، کسب دانش و توانائی درک نحوهء عملکرد ابزارهای امنیتی ، و اختصاصی سازی برخی از اونها برای دشوارتر کردن مسیر خدشه دار شدن حفاظ های نرم افزاری است . برای عمومیت برنامه نویسان ، کسب توانائی و تخصص فوق العاده بالا در امنیت نرم افزار نسبتا" امکان پذیر نیست ، چون کسب توانائی در این حوزه منوط به تعطیل شدن فعالیت در سایر حوزه هاست ؛ اما مطالعهء مقدمات و آشنائی با ادبیات و کسب توانائیهای ابتدائی ، یقینا" یک وظیفهء غیر قابل چشم پوشی است .

موفق باشید

:wise1:

jirjirakk
جمعه 16 اردیبهشت 1384, 01:46 صبح
برای عمومیت برنامه نویسان ، کسب توانائی و تخصص فوق العاده بالا در امنیت نرم افزار نسبتا" امکان پذیر نیست ، چون کسب توانائی در این حوزه منوط به تعطیل شدن فعالیت در سایر حوزه هاست
برادر اینپرایز آیا توی ایران برای همیچن فعالیت هایی جا هستش که آدم بخواد ریسک کنه و فقط توی این زمینه فعالیت خودش رو شروع کنه ؟
_______________________________
واسه مقاله های قشنگتون هم صمیمانه تشکر :flower:

Inprise
پنج شنبه 22 اردیبهشت 1384, 23:25 عصر
@JirJirak : نمیدونم .

-

Encryptor ها جدی ترین چالش حال حاضر حوزهء امنیت نرم افزار هستند . Encryptor نرم افزاری است که عمدتا" و عموما" :

با رمزنگاری نسخهء باینری ِ روی دیسک فایلهای اجرائی امکان بررسی و مطالعهء اون رو تا حد زیادی از بین میبره
با رمزنگاری/رمزگشائی دائمی و تو در توی توابع برنامه - نسخه موجود روی حافظه - بررسی عملکرد برنامه رو دشوار میکنه
با تغییر شکل متغیرها-نام و ادرس توابع - ارجاعات و کتابخانه های متصل شده بصورت استاتیک آنالیز نرم افزار رو دشوار میکنه

Encryptor ها رو میشه به سه دستهء کلی تقسیم کرد :

دستهء اول : راه حلهائی که از روشهای متقارن برای حفاظت از کد استفاده میکنند ؛
دستهء دوم : راه حلهائی که از روشهای غیر متقارن برای حفاظت از کد استفاده میکنند ؛
دسته سوم : راه حلهائی که از ترکیب دو راه حل اول یا استفاده از راع حلهای ابتکاری استفاده میکنند ؛

-- درصورتیکه در مورد درک مفاهیم اولیه رمزنگاری مشکل دارید به بخشهای مربوطه - رمزنگاری و امنیت شبکه - مراجعه کنید ؛ چند مقاله مناسب برای شروع وجود داره --

اغلب Encryptor های تجاری موجود روش اول رو حمایت میکنند ؛ به عنوان مثال به توسعه گر اجازه میدن از یک 3DES و یک گواهی دیجیتال برای رمزنگاری توابع یا کلاسها یا ماژولهای خاصی استفاده کند ، و معدودی از اونها امکان استفاده از روش دوم یعنی اتکاء بر PKI و روشهای غیر متقارن رو نیز به این حمایت اضافه میکنند . به این ترتیب فقط ماژولهای مجاز میتونن ماژولهای مورد نظر رو از حالت رمزشده خارج و به حافظه فراخوانی کنند یا روی حافظه اونها رو وارد روتینهای رمزگشائی کنند ؛ و روند تصدیق هویت ماژول ( آیا این واقعا" خود نرم افزار است که میخواهد بخشی از آن از حالت رمز خارج شود ؟ یا فرد دیگری ؟ ) و احراز یکپارچگی ( آیا بخشی از کد یا حافظه تغییر داده شده ؟ ) عطف به مولفه های PKI بر عهدهء چهار عنصر : CA و گواهی دیجیتال و امضای دیجیتال و روشهای رمزنگاری است .

مثال:

برنامهء A از سه ماژول a و b و c تشکیل شده . بخش اعتبار سنجی برنامه در ماژول c و برخی از توابع پایه ای نرم افزار که در تمام نرم افزار از اونها استفاده شده در ماژول a پیاده سازی شده اند . برنامه باید فقط به کاربر مجازی که فایل لیسانس معتبر رو خریده اجازه کاربری بده .

سناریوی متقارن :

ماژول c با یک روش متقارن بصورت رمزشده منتشر میشه . توابع رمزنگاری بصورت توزیع شده در فایل اصلی برنامه و ماژولهای a و b پخش میشن ؛ بین هر دو تابع متصل نباید یک ارتباط طولی وجود داشته باشه ، یعنی نباید هر دو تابع متصل در یک ماژول باشند . برنامه اصلی موقع اعتبارسنجی توابع لازم رو بصورت دینامیک وارد حافظه میکنه ، با بررسی صحت تابع فراخوانی کننده و ماژول محاط اون ، ماژول b رمزگشائی و فایل لیسانس رو بررسی میکنه .

سناریوی نامتقارن :

ماژول d یک CA است ؛ ماژول e هم حاوی ِ هر دو الگوریتم مورد استفاده . برنامهء اصلی با ارائه گواهی دیجیتال به d مجوز فراخوانی c به حافظه رو کسب میکنه و بعد از فراخوانی با بررسی گواهی دیجیتال c در چند نوبت از یکپارچگی اون مطمئن میشه ؛ توابع c پس از هر بار فراخوانی با بررسی گواهی دیجیتال برنامهء اصلی صحت هویت فراخوان رو بررسی میکنند .

فوائد روشهای متقارن :

-سهولت در پیاده سازی
-سرعت بالا در اجرا و ارائهء خدمت
-کمیت قابل قبول بار اضافی تحمیل شده به برنامه

نقائص روشهای متقارن :

- اطمینان دو طرفه وجود ندارد ( تمام اتکاء روی الگوریتم است ، نه منطق اعتماد سازی مانند PKI . شناسائی الگوریتم چنان که مینماید دشوار نیست و دور زدن اون نیز هم ؛ خلاء روشهای متقارن ، عرفی ترین عنصر این حوزه ، یعنی روند صحیح اعتماد سازی است )

فوائد روشهای نامتقارن :

- منطق قدرتمند و قابل اعتماد

نقائص روشهای نا متقارن :

-دشواریهای پیاده سازی و کاربرد
- هزینه
- کمیت بالای فشار بار اضافی تحمیل شده بر نرم افزار
- افزایش پیچیدگی اجرا : کاهش چشمگیر سرعت ارائهء خدمت


Encryptor ها هم مانند بقیه مولفه های نرم افزاری ، میتونن در صورت کاربرد صحیح و معقول ، تا حد قابل قبولی ضریب اطمینان نرم افزار رو بالا ببرند و - باز هم - مانند سایر راه حلها ، هیچوقت هیچگونه تضمین عینی و قطعی برای حفاظت صد در صد از هیچ چیز ارائه نمیکنند .

-

در ادامه ، ضمن معرفی چند کمپرسور - Packer و Encryptor و شرح مختصر روش کار هر کدوم ، بیشتر در مورد ویژگیهای یک راه حل قابل اعتماد حرف میزنیم ؛ احتمالا" آخرین مطلب درس دوم هم به بررسی جزئی دو سناریوی کامل استفاده از این راه حلها باشه .

شب خوش

:wise2:

Inprise
یک شنبه 15 خرداد 1384, 00:28 صبح
لیست اجمالی از کمپرسور/پکرهای متداول که بصورت عمومی در دسترس هستند ؛ برخی تجاری و برخی رایگان ؛ برای کسب اطلاعات بیشتر سایت هر کدام را ببینید :



http://www.anticracking.sk/download.html
SEPP

http://www.webtoolmaster.com/exes.htm
EXE Stealth

http://www.anticracking.sk/products_svkp.html
SVK Protector

http://www.rtsoftware.org
Code-Lock

http://pelock.pac.pl
PE Lock

http://www.xprotector.com/downloads.php
Themida

http://www.aspack.com
ASProtect

http://www.siliconrealms.com/armadillo.shtml
Armadillo

http://www.pc-guard.co.yu/e_pcgw32.htm
PC Guard

http://www.ultraprotect.com/download.htm
Ultra Protect

http://www.obsidium.de/show.php?details
obsidium

http://virogen.cjb.net
VGCrypt

http://yodap.cjb.net
Yoda

http://egoiste.da.ru
tElock

http://pespin.w.interia.pl
PESpin

http://www.blinkinc.com
Shrinker

http://www.neoworx.com
NeoLite

http://www.collakesoftware.com
PEBundle

http://www.pecompact.com
PEcompact

http://packman.cjb.net
PackMan

http://upx.sourceforge.net
UPX

http://dwing.go.nease.net
UPack

بخاطر داشته باشید که برای تمام این ابزارها و ابزارهائی که به مرور به این لیست اضافه میشوند راه حلهای خودکار عبور و لغو کارائی های امنیتی وجود دارد .

:wise1:

seyedof
یک شنبه 09 مرداد 1384, 14:49 عصر
برادر اینپرایز آیا توی ایران برای همیچن فعالیت هایی جا هستش که آدم بخواد ریسک کنه و فقط توی این زمینه فعالیت خودش رو شروع کنه ؟
_______________________________
واسه مقاله های قشنگتون هم صمیمانه تشکر :flower:

سلام
ICA=Iranian Crackers Association که یکی از گروههای قوی کرک و مهندسی معکوس ایرانی هستن. سایت هم داشتن ولی من یادم رفته. آدمهایی به اسم : ابراهیم میرزازاده، بهنام شمشیرساز و ... هم از خدایان اینکارها هستند (البته قدیمی هستند و ممکنه تازه کارا نشناسنشون).

ممنون علی

Amir Oveisi
چهارشنبه 02 اسفند 1385, 09:43 صبح
اگه ادامه پیدا کنه واقعا محشر میشه ...

sohrab o
شنبه 08 اردیبهشت 1386, 16:01 عصر
کسی نمونه سورس packer نداره !!!!!!!!!!!!!

i.voip.hacker
چهارشنبه 21 شهریور 1386, 15:58 عصر
بیشتر از نصف این Packer ها می شود با پیدا کردن یک تغییر esp دور زد !
یک سریشون هم مثل Aspack دیپکر ها شون ریخته همشون هم کامل جواب می دن
به نظر من بهترین راه به جای استفاده از Packer ها و ... اینه که خودمون تو برنامه ازش دفاع کنیم ...

illegalyasync
پنج شنبه 22 شهریور 1386, 01:09 صبح
ضرری نداره ! یه کرک می بنویس و پکش نکن و بقول خودت ازش دفاع کن و بذاراینجا ببین چقدر دوام میاره ;)

اگر از بعضی پکرها درست و بجا استفاده بشه خیلی کار کرکر رو کند میکنن
مثلا وقتی در مورد Asprotect چیزی بگین همه میگن برو بابا آنپکرش هست و ....اما اینا حرف مفته ! اگه از SDK اش درست استفاده بشه حتی بعد از آنپک شدن باینری شل اش هیچکدوم از انپکرا نمیتونن سکشنها رو درست کنن و کارکردن با باینری تو IDA به هیچ عنوان امکان نداره و خیلی از کدها توی olly دیتا شناخته میشن و olly هم خیلی دراین زمینه بیشعور هستش
من هفته پیش برای پاک کردن یه فراخوانی داینامیک دی ال ال ازیه تارگت asprotect اشکم دراومد تا آخرش jmp هائی که به فانکشنهای دی ال ال کرده بودو توی olly اونم با سرچ دستی پیدا کردم . ida این امکانو داره که کدها رو به دیتا و برعکس تبدیل کنیم اما اگه تو چیزی مثل asprotect خیلی زیاد از sdk اش استفاده شده باشه ida هم اسکل میشه موقع انالیز کردن اونقدر از اول به آخر میره و برمیگرده که دیگه ارزشش رو نداره...

پکر چیز خوبیه . فقط باید بدونین چطوری ازش استفاده کنین و برای پراتکشنی که انتظار دارین داشته باشین پکر مناسبو انتخاب کنین و حتما خود کد رو دستکاری کنین یعنی باینری پک به تنهائی کافی نیست

Inprise
پنج شنبه 22 شهریور 1386, 03:05 صبح
برای پاک کردن یه فراخوانی داینامیک دی ال ال ازیه تارگت asprotect اشکم دراومد تا آخرش jmp هائی که به فانکشنهای دی ال ال کرده بودو توی olly اونم با سرچ دستی پیدا کردم

توابع مورد نظرت رو با IDA پیدا کن . محدوده آدرسش رو ببین . در Ollydbg کلید M رو بزن و دنبال اون محدوده آدرس بگرد ، آپکدت رو پیدا و Patch کن . تمام اینکار رو الان دیگه میتونی با Immunity Debugger خودکار کنی . Ollydbg یه سری باگ خفن داره که بعضی از پکرها ازشون به عنوان ترفند آنتی دیباگ استفاده میکنن ، که یه سریشون تو Immunity Debugger برطرف شده و برای بقیه هم لازم نیست خود دیباگر رو Patch کنی __ مثل وضع ملودرامی که در Ollydbg و نگه داشتن چند نسخه Patch شده مختلف وجود داشت __ میتونی در زمان اجرا یه Command ساده اضافه کنی که تو همون Address Space موارد لازم رو Patch کنن .


به نظر من بهترین راه به جای استفاده از Packer ها و ... اینه که خودمون تو برنامه ازش دفاع کنیم ...

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

i.voip.hacker
پنج شنبه 22 شهریور 1386, 11:54 صبح
خیلی از پکرها یا برنامه نویس ها سکشن ها را دست میزنند یا IAT را خراب می کنند
به هر حال موقع اجرا باید هم فایل را دیپک کنند و هم IAT را دوباره بسازند
با تحلیل کد مثلا گشتن دنبال یک jmp که ناگهان به یک جای دیگر برنامه میرود در همان
اول برنامه بعد از این که با چند تا call فایل را دیپک کرد یا پیدا کردن اولین تغییر esp و bp گذاشتن
روی حافظه ذخیره شده در آن و منتظر دسترسی به آن ماندن یا bp گذاشتن روی سکشن که اسم code همراه آن است یا ... می شود ep برنامه اصلی را پیدا کرد مثلا در ollydbg معمولا به جایی بر می خورید که کد وارد یک سری data می شود db,dw,... البته ollydbg خیلی خوب می تونه از پسش بر بیاد! با یکسری پلاگین مثل analyse this یا analyse خود ollydbg همه اون data ها به کد قابل فهم تبدیل می شوند و حتی api های ویندوز هم در آنها شناسایی می کند بعد از پیدا کردن ep اصلی با Lord PE به صورت خودکار می شود pe را دوباره ساخت و سکشن های اضافی را حذف کرد و با Imprec و یک مقدار دقت IAT را دوباره ساخت ... من با 7-8 تا پکری که کار کردم 3تاشون IAT را خراب می کردن FSG,Aspack,UPX ....
من تازه اومدم تو کار RE ;)

...
اگر می شود تا هفته دیگر یک برنامه با Aspack پک کنید بزارید واسه Unpack :)
ممنون می شم

illegalyasync
دوشنبه 26 شهریور 1386, 14:21 عصر
اگر می شود تا هفته دیگر یک برنامه با Aspack پک کنید بزارید واسه Unpack :)
ممنون می شم

برای چی ؟ خوب خودت اینکارو بکن :)



تمام اینکار رو الان دیگه میتونی با Immunity Debugger خودکار کنی


آخرین نسخه اش رفرنس نداره و منوش هنگ میکنه . فقط من اینطوریم ؟

Inprise
دوشنبه 26 شهریور 1386, 14:30 عصر
رفرنس رو از سایتشون هم میتونی بگیری . مال منم هنگ میکنه ، قبلا هم هنگ میکرد . ولی چیز مهمی نیست .

- لطفا بحث یک تاپیک را منحرف نکنید . ممنون

i.voip.hacker
دوشنبه 26 شهریور 1386, 21:39 عصر
ولی با اینحال هم همه این پروتکشن ها باید برنامه را در حافظه Extract کنند
برای کرک کردنشان هم باوجود Loader ها حتی نیاز به Unpack کردن شان هم نیست
(البته اگر آدم تنبلی باشید !) ...
همون شعار کرکرها :
هرچیزی که اجرا بشه کرک می شه ...
....
....
از اونجایی که گفتین کرکرها کم سواد ...
به این نکته توجه داشته باشید که کرکرها همیشه جلوتر از Protector هستند و این را از این
که هر برنامه ای که آومده در کوتاه ترین مدت کرکش هم اومده می شه فهمید و هر پرتکشنی که باشد برای تازه وارد ها (guys like me) می باشد
و این که BlackHat ها هم همیشه بالاتر و چند سال جلوتر از WhiteHat ها هستند ...
و این را فقط با خوندن Abstract مقالات کنفرانس Black Hat 2007 می شود فهمید
و چیزهای دیگر مثلا توجه به این نکته که سال 1991 نقطه ضعف Buffer Overflow در مجله
Phreak مطرح شد قبلا از این که Window 95 بیاد قبل از این که حتی لینوکس به وجود
بیاد ... وجود این همه Exploit BoF این نکته را می رساند که WH ها چقدر عقب تر از Black Hat
ها هستند ...
روش حمله جدید به اسم Dongling Pointer اومده (در BH2007 مطرح شد)
که اون هم مدتی طول می کشه تا White Hat ها بفهمن داستان چیه ...ا
...
این ها را برای این گفتم چون فکر کردم نظر تون در مورد BH ها خوب نیست
...
از این که بحث امنیت نرم افزار تو این پست ها راه افتاده خوشحالم ...
چون نقاط تاریک خیلی زیادی هست که متاسفانه برنامه نویس های ایرانی
ازش خبر ندارند نبود منبع مناسب هم دلیلشه ....

از برادران عزیزم Inspiron و illegalyasync هم ممنونم

Tanx anyway...

MAiLDEREMi
جمعه 30 شهریور 1386, 07:02 صبح
سلام به دوستان
ضمن تشکر از شما درباره مطالبتون یه درخواستی داشتم. این Packer ها فقط برای برنامه هایی جواب می دن که با Net. کار نشده باشه. در صورتی که یک برنامه ای با Net. نوشته شده باشه رو بخوایم Pack کنیم Error میده. قبلا من یه برنامه ای رو تو همین سایت دیده بودم به نام:
Net Reactor. که خیلی قشنگ کار می کنه ولی Unregistered هست.
در صورت امکان اگه Keygen یا کرک یا ... برای این برنامه رو پیدا کردید لطف کنید لینکش رو همینجا بگذارید.
http://eziriz.com

متشکرم

anubis_ir
یک شنبه 12 خرداد 1387, 16:04 عصر
- با استفاده از یک HEX Editor قسمتهای به خصوصی از باینری ات رو تغییر بده . این کار باید باعث نا شناخته موندن Packer مورد استفاده بشه ؛

سلام
راجع به اين مورد بالا اگر دوستان بتوانند بيشتر و با ذكر مثال توضيح بدهند ممنون خواهم شد.
در مورد upx تست كردم؛ اگر با هگز اديتور upx را مثلا به xyz تبديل كنيد، ديگر خود upx فايل رو آنپك نخواهد كرد و پيغام ميده كه فايل دستكاري شده. تا اينجا خوب است ولي اين مورد signature كامل رو از بين نمي‌بره.

scarce
جمعه 18 اردیبهشت 1388, 10:12 صبح
به نظر من باید برنامه که توسط برنامه نویس نوشته می شه از داخل کد بشه

Armin060
چهارشنبه 03 تیر 1388, 23:46 عصر
من هنوز درست متوجه نشدم!!! ما همه ی اين كار ها رو انجام میديم كه چی بشه؟
كسی نتونه به سورس برنامه دسترسی پيدا كنه؟
كسی نتونه به فرمول ما برای ساخت Serial دسترسی پيدا كنه؟
... ؟؟

Nima NT
پنج شنبه 04 تیر 1388, 20:32 عصر
من هنوز درست متوجه نشدم!!! ما همه ی اين كار ها رو انجام میديم كه چی بشه؟
كسی نتونه به سورس برنامه دسترسی پيدا كنه؟
كسی نتونه به فرمول ما برای ساخت Serial دسترسی پيدا كنه؟
... ؟؟
فکر میکنم علت این سوال شما این هست که شما محور رو برنامه های دات نت قرار دادین.
در برنامه های دات نت هدف نرسیدن به سورس هست ( البته نه 100 % )
ولی در مورد برنامه های native ( مثل وی بی 6 و دلفی و ... ) هدف در پکرها فشرده سازی و در Protector ها ایجاد مشکل در کشف الگوریتم برنامه هست.
چون اگر الگوریتم لو بره , اول کل زحمت برنامه نویس هدر میشه و دوم اینکه میشه در اون تغییراتی رو ایجاد کرد.

Armin060
پنج شنبه 04 تیر 1388, 20:43 عصر
فکر میکنم علت این سوال شما این هست که شما محور رو برنامه های دات نت قرار دادین


فقط در مورد سوال اول درسته، در كل نه

kasmaii61
سه شنبه 06 مرداد 1388, 08:40 صبح
با تشکر از INprise عزیز به خاطر بحث بسیار جالب و پر اهمیتی که آغاز کردن
فقط چرا بحث نیمه کاره رها شد؟
دوستان برای یک فرد مبتدی چه منابعی رو پیشنهاد می کنید برای مطالعه؟

golbafan
شنبه 14 شهریور 1388, 15:56 عصر
حالا بگید ببینیم بهترین پکر کدوم یکیه؟

آخه n تا پکر هست ولی من نمیدونم کدوم قویتره!!!

REZADG
چهارشنبه 16 دی 1388, 10:08 صبح
سلام
راجع به اين مورد بالا اگر دوستان بتوانند بيشتر و با ذكر مثال توضيح بدهند ممنون خواهم شد.
در مورد upx تست كردم؛ اگر با هگز اديتور upx را مثلا به xyz تبديل كنيد، ديگر خود upx فايل رو آنپك نخواهد كرد و پيغام ميده كه فايل دستكاري شده. تا اينجا خوب است ولي اين مورد signature كامل رو از بين نمي‌بره.

دوست عزیز من یک مقاله در این باره نوشتم و رو سایت هست بگیر و بخون خودتون میفهمید البته حرف زدن مقابل اساتید بالا جایز نیست اساتید شرمنده
آدرس مقاله
http://barnamenevis.org/forum/showthread.php?t=187504
اولی در این مورد هست
واما

حالا بگید ببینیم بهترین پکر کدوم یکیه؟

آخه n تا پکر هست ولی من نمیدونم کدوم قویتره!!!
شما باید بگم که شما خودتون میگید N پکر پس همگی شناخته شده هستن پس با هر کدوم که بخوایی پک کنی آنپک میشه پس پکر های من در آورده که کد هاشون رو خودتون مینویسید بهترین گزینه واسه این کاره او کی البته مقاله ی دوم همون آدرس به این کار اشاره نکرده اما راه حلی نوشتم که شاید به دردتون بخره نوع روش جایگزین کردن EXE هست