PDA

View Full Version : بررسی یک قفل نرم افزاری از نظر امنیت



BOB
دوشنبه 14 دی 1383, 19:14 عصر
سلام.
قبلا بحثهای جالبی در مورد جلوگیری از مهندسی معکوس و بالا بردن امنیت در قفلهای نرم افزاری در سایت شده بود که واقعا جالب و آموزنده بود. اما خیلی وقته از این بحثها خبری نیست.
برای همین هم من این قفل نرم افزاری رو نوشتم تا دوستانی که تمایل دارند ، آن را از نظر امنیتی بررسی کرده و به این ترتیب از نقاط ضعف و قوت آن اگاه شویم.
من این قفل رو دیروز نوشتم و حدود 4 ساعت روش وقت گذاشتم و قفل تقریبا ساده‌ای است. لطفا دوستانی که در این زمینه (ک**ک) کار کرده اند این قفل رو آنالیز کرده و نتیجه رو به ما هم بگن.

در ظمن این قفل در دو نسخه تهیه شده که در اولی از هیچ یک از متدهای Antidebug و Compressing و coding و ......... استفاده نکرده‌ام. به این منظور که دقیقا فقط کدنویسی خود قفل مورد آزمایش قرار بگیرد. پس دوستان هم لطفا در مورد آن جوانمردانه رفتار کرده و از Debuger استفاده نکنید.
اما قفل دوم compress شده و دارای متدهای امنیتی بیشتری میباشد . پس دوستان از هر روشی که مایل هستند برای ک***ک کردن دومی استفاده کنید.

در صورتی که شماره سریال برنامه را درست وارد کرده و یا نقطه ضعف آن را به درستی پیدا کنید برنامه بوسیله پیغامی به شما اطلاع میدهد.
از همه دوستان متشکرم .

VouDou_ir
دوشنبه 14 دی 1383, 22:13 عصر
دوست عزیز خیلی پیچوندی جالب بود ! :wink:

من در وقتی کمی که داشتم تا یه جاهای پیش رفتم
این Offset رو Nop کنید 00459A20 دیگه پیغام نشون نمیده ! فکر میکنم این هدف نیست و باید پیغام دیگه نوشن بده ولی من به نتایجی رسیدم که با دیگران هم منتقل میکنم شاید کسی وقت بیشتری داشته باشه و بتونه روش کار کنه !

برنامه به صورتی است که هر کلیدی زده میشه یک Procedure رو فراخوانی میکند 004041F0 و ظیفه این Procedure ه Switch کردن روی قسمتهای مختلف هست و روشی که استفاده میکند در آخر این Procedure اگر دقت کنید یک Jump هست که وظیفه آن با توجه به محاسباتی انجم میده به جاها مورد نظر منتقل میشود !


در ضمن در مورد دومی فکر میکنم از Shell Protection به نام PESHiELD استفاده کردید !

خیلی برام جالبه که بدونم چقدر روی این وقت گذاشتی ؟!

Inprise
سه شنبه 15 دی 1383, 01:17 صبح
در ظمن این قفل در دو نسخه تهیه شده که در اولی از هیچ یک از متدهای Antidebug و Compressing و coding و ......... استفاده نکرده‌ام. به این منظور که دقیقا فقط کدنویسی خود قفل مورد آزمایش قرار بگیرد. پس دوستان هم لطفا در مورد آن جوانمردانه رفتار کرده و از Debuger استفاده نکنید

یک سوال غیر فنی . برای من توضیح بده "کدنویسی خود ِ قفل" اصولا" چگونه مورد آزمایش قرار میگیره . فکر میکنم فکر کردن به این موضوع از فکر کردن به روتین آنتی دیباگ مهمتره باشه ، برای شروع .


قفل دوم compress شده و دارای متدهای امنیتی بیشتری میباشد . پس دوستان از هر روشی که مایل هستند برای ک***ک کردن دومی استفاده کنید

کد دومت براحتی دیباگ میشه . EP برنامه به وضوح قابل مشاهده است . وقت گذاشتن روی بقیه اش توجیه نداشت .

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

ایام به کام :)

Dolphin
سه شنبه 15 دی 1383, 01:23 صبح
چه کار جالبی :flower:

BOB
سه شنبه 15 دی 1383, 04:45 صبح
سلام.


یک سوال غیر فنی . برای من توضیح بده "کدنویسی خود ِ قفل" اصولا" چگونه مورد آزمایش قرار میگیره . فکر میکنم فکر کردن به این موضوع از فکر کردن به روتین آنتی دیباگ مهمتره باشه ، برای شروع .

جناب اینپرایز بله حق باشماست.
1. قفل اول خود برنامه کامپایل شده است و به هیچ وجه دستکاری نشده و از هیچ برنامه ای روی آن استفاده نکرده‌م و از "کدنویسی خود ِ قفل" هم منظورم همین بود که میخواستم کدنویسی شرطهای متداخل و تکرار و پرش مورد بررسی قرار گرفته و نکات ظعف آن مشخص شود.

2. برای قفل دوم هم دقیقا همان فایل قفل اول را توسط برنامه های آماده فشرده ساز و antitrace فشرده کرده ام. و در صورتی که دوستان آن را Unpack کنند ، هیچ فرقی با فایل اولی ندارد. و در آن به کدنویسی روشهای antidebug نپرداخته‌ام.

3. البته ببخشید من در این زمینه هنوز مبتدی هستم. و هدف اصلی من از این کار افزایش معلوماتم در این زمینه بود. و امیدوارم من را در این زمینه راهنمایی بفرمایید.

حالا از اساتید محترم چند سوال داشتم که امیدوارم پاسخ بدهید....

1. چطور میشود در برنامه از FileChecksum استفاده کرد. چون این مقدار ، تا قبل از کامپایل شدن فایل اجرایی معلوم نیست. پس چطور میشه موقع اولین اجرا اون رو با مقدار صحیح مقایسه کرد.
البته میشه وقتی فایل برای اولین بار اجرا شد مقدار checksum در جایی مطمین ذخیره بشه تا در دفعات بعدی بشه اون رو چک کرد.
اما آیا راهی وجود داره که بشه مقدار checksum رو در داخل خود فایل اجرایی قرار داد.
البته خودم فکر میکنم همچین چیزی غیر منطقی باشه اما اگه دوستان در این زمینه من را راهنمایی کنند متشکر میشوم.

2. بعضی نرم‌افزارها به هیچ وجه با برنامه های معمول قابل dissassembel کردن نیستند و موقع باز کردن فایلشان باعث هنگ کردن برنامه dissassembeler میشوند. در مورد نحوه کار این نرم افزارها هم لطفا توضیح بدهید.
متشکرم

BOB
جمعه 18 دی 1383, 02:46 صبح
سلام
ببخشید یعنی هیچ کس نظری در مورد این برنامه نداره..؟؟
اساتید محترم اگه لطف کنید به سوالات جواب بدید و من رو راهنمایی کنید ممنون میشم .
متشکرم

Inprise
شنبه 19 دی 1383, 18:02 عصر
آیا راهی وجود داره که بشه مقدار checksum رو در داخل خود فایل اجرایی قرار داد.

با استفاده از توابعی مانند MapFileAndCheckSum و یکبار اجرای برنامه و Hardcoding سایز یا برخی از مولفه های هدر میتونی به مقصودت برسی . البته یک Cr@cker هشت ساله هم میتونه این حفاظ رو دور بزنه .


بعضی نرم‌افزارها به هیچ وجه با برنامه های معمول قابل dissassembel کردن نیستند و موقع باز کردن فایلشان باعث هنگ کردن برنامه dissassembeler میشوند

روشها و کلکهای مختلفی برای جلوگیری از دیباگ و دیس اسمبل یک کد باینری وجود داره . در حقیقت تعداد این روشها ، معادل تعداد راههای رسیدن به خدا ست . با کمی جستجو میتونی به یک دوجین روش و Trick برسی . البته اغلب روشهای موجود ، براحتی با دستکاری دیباگر یا دیس اسمبلر یا استفاده از پلاگینهای متداولی که Cr@cker ها توسعه داده اند ، به کشک مبدل میشوند .



در مورد نحوه کار این نرم افزارها هم لطفا توضیح بدهید.

توضیحاتش میتونه خیلی مفصل باشه و نوشتنش اینجا ، تو بخش دلفی ، قاطی یک سری بحث نامربوط ، یه کمی حیفه ! اگر فرصتی بود و محل مناسبی براش پیدا شد میشه در کنار مقوله امنیت شبکه ، به مقوله امنیت نرم افزار هم پرداخت .

خوش باشی :)

BOB
پنج شنبه 24 دی 1383, 02:53 صبح
سلام
مثل اینکه دوستان حوصله بررسی و ک**ک کردن این قفل رو نداشتند. پس لااقل خودم پسوردش رو میگم تا مطمپن بشین کار میکنه.


user:barnamenevis
pas:c r a c k m e (بدون فاصله)
متشکرم