# مهندسی نرم افزار > مباحث مرتبط با مهندسی نرم‌افزار > امنیت در نرم افزار و برنامه نویسی > سوال: امنیت قفل سخت افزاری

## MOHSEN8000

با سلام
دوستان من مشغول کار روی یک پروژه هستم ، به راهنمایی هاتون نیاز داشتم. 
پروژه اینه : قفل سخت افزاری تحت وب
اگر کسی تا حالا کرکینگ کار کرده یا . . . 
اگه می شه منو راهنمایی کنید که معمول ترین راه ها برای شکستن این قفل ها چیه تا من بتونم کد های خودم رو اصلاح کنم. مثلا طول اعدادم رو زیاد انتخاب کنم، دیگه به چه طریق ممکنه که این عزیزان بتونن نسبت به ما لطف داشته باشن
با تشکر

----------


## persian_bigboy

دوست من سلام . 
والا تا اونجا که من دیدم تمامی قفل ها همگی شکست خوردن و راهی برای جلو گیری نیست ولی بتهره از exe protector استفاده کنی . مرسی

----------


## famarini

سلام 
دوست عزیز کامل توضیح دهید : پروژه شما در شبکه کار می کند و یا با asp و یا php  نوشته شده 
کامل توضیح دهید تا ببینیم چی کار باید بکنیم
این رو هم بگم اگه از قفل درست استفاده نشه در کمتر از 2 دقیقه کرک می شه مثل چند وقته پیش یه دونه نرم افزار خیلی بزرگ و خوب بود به پستم خورد که ..... شد دیگه   :لبخند گشاده!:  
پس مواظب باش و کامل توضیح بده
در سایت نرم افزارهای ایرانی www.irsoftwares.com  به بخش قفلهای سخت افزاری مراجعه کنید و از شرکتهایی که در آنجا هستند مشاوره بگیرید

موفق باشید

----------


## sabajamalian

ببینین شما برای قفل گذاری روی نرم افزارتون دو تا چیز رو باید کنترل کنید:
1- اجازه ندید که فایل exe شما debug بشه و cracker بتونه به سورس کد شما دسترسی داشته باشه.
2- رابطه برنامتون با کد سخت افزاری رو طوری تنظیم کنید که کرک کردن کد سخت افزاری شما برای cracker مشکل و زمان بر بشه.

برای مورد اول استفاده از نرم افزارهایی مثل exe protector پیشنهاد میشه اما در کنار این نرم افزار ها خودتون هم می تونین توی کدتون از تکنینک های مختلفی استفاده کنید. مثلا:

 - بین کدهای مهم خودتون از دستوراتی به زبان اسمبلی که هیچ تاثیری در روند برنامه ندارند استفاده کنید چون بعضی از cracker ها کد رو به زبان اسمبلی debug  میکنند این کار باعث گیج شدن آنها میشه. مثلا یه سری چیز بریزین توی stack بعد pop کنید یا یه فایل الکی باز کنید یه چیزی بریزین توش بعد فایل رو پاک کنید  :چشمک: 

 - cracker ها برای debug کردن کد شما مجبورند که برای قرار دادن breakpoint درون کد های شما روی کد های شما یه سری تغییرات کوچیک بدن. شما می تونین در طول اجرای برنامه این تغییرات روی سورس کد هاتون رو دائما چک کنید. یکی از این راه ها استفاده از الگوریتم های CRC check هست. (اگه در این مورد توضیح بیشتری خواستید بگین تا کدشو بزارم)

اما درباره مورد دوم که کنترل قفل سخت افزاری شماست به این نکات توجه کنید:

 - برای کنترل قفلتون از چند thread جداگانه استفاده کنید و در هر کدوم یک روش مختلف برای کنترل قفل قرار بدین. توجه کنید که از آن جا که از کار انداختن thread های یک برنامه برای cracker کار راحتیه بین thread ها و برنامه اصلی یک رابطه خوب برقرار کنید تا با از بین رفتن thread ها کل برنامتون هم از کار بیفته!  :بامزه: 

 - دستورات ارتباط با قفل رو لابلای کد های اصلی قرار بدین و توی function قرار ندید چون یک cracker می تونه از روی function ها به راحتی jump کنه  :گیج: 

 - بخشی از اطلاعات مهم نرم افزار خودتون مثلا Database connection string رو توی حافظه قفل نگهداری کنید تا برنامه همیشه به قفل نیازمند باشه.

 - به cracker اجازه ندین که متوجه بشه شما دقیقا چه زمانی قفل رو چک می کنید.

 - CRC مربوط به کامپوننتی که قفل رو کنترل می کنه رو هم می تونین قبل از ارتباط با قفل چک کنید.


از همه اینها که بگذریم شما می تونین از یک قفل تلفنی هم در کنار موارد بالا برای نرم افزارتون استفاده کنید . 

موفق باشید. . . 
اگر نرم افزار شما تا 1 سال پس از فروش کرک نشود شما موفق شده اید  !!!  :قهقهه:

----------


## ostovarit

> - cracker ها برای debug کردن کد شما مجبورند که برای قرار دادن breakpoint درون کد های شما روی کد های شما یه سری تغییرات کوچیک بدن. شما می تونین در طول اجرای برنامه این تغییرات روی سورس کد هاتون رو دائما چک کنید. یکی از این راه ها استفاده از الگوریتم های CRC check هست. (اگه در این مورد توضیح بیشتری خواستید بگین تا کدشو بزارم)
>  - به cracker اجازه ندین که متوجه بشه شما دقیقا چه زمانی قفل رو چک می کنید.
>  - CRC مربوط به کامپوننتی که قفل رو کنترل می کنه رو هم می تونین قبل از ارتباط با قفل چک کنید.


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

----------


## Nima NT

> با سلام و تشکر 
> لطفا در مورد موارد بالا که نقل قول کردم بیشتر توضیح بدهید ...
> مخصوصا CRC که چیه و نمونه در مورد هر قسمتی که مقدور هست اگر بزارید که ممنون میشم...
> ریختن کدهای اسمبلی در برنامه رو هم متوجه نشدم؟! نمونه لطف کنید ممنون میشم...


با اجازه اساتید بنده توضیح میدم...
CRC یک الگوریتم هش هست ، این روش برای هر گروه داده ای یک مقدار عددی ثابت تولید میکنه از این روش برای فهمیدن دستکاری فایلهای هم استفاده میشه به عنوان مثال وقتی فایل شما کامپایل شد مقدار CRC اون مثلا" 123 هست وقتی کوچکترین تغییری در اون اعمال بشه مقدار CRC تغییر میکنه و مثلا" میشه 473 که از این تغییر شما میتونید تغییر در فایل رو متوجه بشید.
میتونید چک کرد قفل رو بر اساس اعداد تصادفی انجام بدید ، مثلا" یک مقدار تصادفی تولید کنید و هر وقت این عدد برابر 4 شد قفل رو چک کنید.

نهایتا" تمامی این روشها خوب هستن ولی برای یک کراکر با تجربه دور زدنشون زیاد کار سختی نیست ، اگر پلتفرم کاری Native باشه باز شاید بشه کمی روش مانور داد ولی در مورد دات نت تاثیر زیادی ندارن.

----------


## sabajamalian

در ادامه فرمایشات آقا نیما، اینم یک نمونه کد که به زبون ++C هست :
http://www.createwindow.com/programming/crc32/
http://www.createwindow.com/programm...32/crcfile.htm

در رابطه با کد اسمبلی هم باید عرض کنم که وقتی کامپایلر کد رو کامپایل می کنه اونو به زبون اسمبلی تبدیل می کنه و وقتی cracker می خواد اونو debug کنه با کد اسمبلی برنامه شما مواجه می شه بنابراین اگه بین کدتون دستورات اسمبلی گیج کننده قرار بدین کار cracking رو برای cracker کند می کنید.
مثلا این جوری :
asm{ 

mov ax, offset continue
push ax 
-----
 pop ax 
jmp ax
continue: 
//continue your code }

که بین Push و Pop می تونین هر دستور اسمبلی گیج کننده ای قرار بدین  :لبخند:

----------

