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

## mahmood_s

با سلام خدمت دوستان

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

----------


## mahmood_s

اول از همه جلوگیری از نفوذ غیره ممکنه ولی سرعت نفوذ و کرک رو کم میکنه و برنامه ما مدت بیشتری تو بازار می مونه


و حال

کدام بهتر و مطمئن تر است ؟   قفل سخت افزاری یا نرم افزاری


مطمئنا مثل دیگر سوالات این سوال هم  جواب کلیشه ای خود را دارد .

هر روش مزایا و معایب خواست خود را دارد .

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

پس حال چه باید کرد ؟!

خوب از حالا به بعد دوستان باید بیاین وسط میدون

هر کی هر نظری داره هر چند غیره ممکن بگه تا اساتید روش بحث کنن تا روش های امن بدست بیاد

ضمنا مثالهای عملی هم در راه است

----------


## mahmood_s

اولین روش نرم افزاری : 

1- بدست آوردن سریال قطعات سخت افزاری ( سعی کنید کمتر از کامپوننت استفاده کنید )
2- ایجاد فایل در سیستم کاربر
3-تولید کدهای تصادفی
4-کد و دیکد کردن اطلاعات با الگوریتم های منحصر به فرد 
.
.
.

----------


## vbhamed

سلام

به نظر من تركيب سخت افزاري و نرم افزاري
به اضافه روشهايي كه براي پروتكت كردن فايل اجرايي و جلوگيري از دي پروتكت موجوده

----------


## mahmood_s

> سلام
> 
> به نظر من تركيب سخت افزاري و نرم افزاري
> به اضافه روشهايي كه براي پروتكت كردن فايل اجرايي و جلوگيري از دي پروتكت موجوده



ممنون از حسن توجه تون

می خوایم با عملی کردن این تاپیک به پربار تر بودنش کمک کنیم

----------


## kooroush

قفل هایی نرم افزاری که کد هارد یا   سی پی یو رو می خونه و اون رو تو یک الگوریتمی میزاره چه جوریه !!!پمنظورم قفل تلفنی هستش (قفلی که طرف تماس می گره یک کدی رو می خونه شما اون رو تبدیل می کنی به یک کد دیگه برای زرف ی خونی توی برنامه وارد میکنه برنامه واسه همیشه فعال می شه )
امنیت اینجور کدها چه جوریاست ؟؟

----------


## vahid_visualbasic

اینروزها به خاطر تنوع هاردها کمتر دیدم برنامه ای سریال هارد رو بگیره اکثرا از سریال یکی از درایو های جاری استفاده می کنن که من هم خودم از همین روش استفاده میکنم که یکی از معایبش اینه که با فرمت کردن درایو مورد نظر سریال درایو هم عوض خواهد شد

----------


## ASKaffash

سلام
در روش قفل تلفنی :
یک رشته که از ترکیب MainBoard و Hard و کارت شبکه و ... (میتواند مدل + تاریخ ساخت + سریال +...) باشد ایجاد شده و این رشته طولانی براساس اسکی / کد یونیک و .... با یک تابع ریاضی پیچیده (تابع پوششی نه یک به یک)
مثلا عددی long را ایجاد کرده و کاربر باید تلفنی این عدد را ارائه دهد فروشنده با یک تابع ریاضی پیچیده و پوششی دیگر عددی را براساس عدد اول به خریدار ارائه میدهد ونرم افزار باید همیشه برابری مقادیر محاسبه شده را با عدد ورودی مقایسه کرده و عکس العمل لازم را انجام دهد در این روشها مراقبت از الگوریتم و توابع ریاضی مورد استفاده بسیار مهم است

----------


## mahmood_s

طبق گفته دوستان ميشه با بدست آوردن سريال قطعات سخت افزاري يك كد ايجاد كرد 

ولي من علاوه بر روش بالا سعي مي كنم يك سري فايل هم در سيستم مشتري ايجاد كنم تا شايد تحمل نرم افزار رو در برابر  كرك شدن كمي بالاتر ببرم

----------


## ASKaffash

سلام
برای جلوگیری از Patch شدن یک Hash از EXE با یک الگوریتم پیچیده تهیه و کنار EXE قرار میدهیم و برنامه  ابتدای اجرا مقدار hash را مقایسه کرده وعکس العمل مورد نیاز را انجام میدهد

----------


## scarce

سلام دوستان عزیز چرا تایپیک رو بیهوده رها می کنید.!!
برای من جالب بود روش هایی که ذکر کردید بعضی هاش بدردم خورد

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

 البته از هیچ پروتکتری استفاده نمی کنم 

من سعی کردم بیشتر کد ها رو طوری طراحی کنم به نظر ساده بیاد ولی در باطن بسیار پیچیده است.

* قفل گذاری بر روی یک نرم افزار این نیست که یک الگوریتم طراحی کنیم ( مثل ترکیب کد سی پی یو و...- قفل تلفنی ) و بعد با چند دستور شرطی و پروتکتور ازش محافظت کنیم!!

1_ شما به عنوان یک برنامه نویس باید دستورهای چک کردن سریال  را در چند ماژول متفاوت با روش های متفاوت کد نویسی کنید .

2_ هر چه تعداد این ماژول ها بیشتر باشد وقت کرکر بیشتر گرفته می شود و کرکر حوصلش سر میره

3_ به گفته یکی از دوستان عزیزم (که کرکر ماهری هم هست) : یک برنامه نویس باید حتی زمانی که کاربر ماوس رو تکان میده سریال رو چک کنه 

4_ سعی کنید قبل از اینکه قفلی طراحی کنید کمی با نرم افزار های دیباگر به صورت متوسط کار کنید و ببینید چگونه کار می کنند

در کل به عنوان یک برنامه نویس باید با هزاران کرکر و شاید میلیون ها!؟ کرکر مبارزه کنیم فقط برای اینکه بتونیم از هنر برنامه نویسی خودمون محافظت کنیم و از این راه خرج خودمون را در بیاریم

این یک بازی ناجوانمردانه هست چون دو طرف برابر نیستن یک برنامه نویس و یاشاید 1000 تا برنامه نویس در مقابل ؟ کرکر ؟

ولی یادتون باشه فقط کاری کنید که حوصله کرکر سر بره از کد های شرطی دروغین استفاده کنیدو..

----------


## aminghaderi

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

موفق باشید.

----------


## mrbm_2007

من یه سوالی دارم
وقتی از قفل سخت افزاری استفاده می شه ممکنه یکی بیاد برنامه رو کرک کنه و یه جوری کد مربوط به قفل رو حذف کنه اونوقت مزیت قفل سخت افزاری نسبت به نرم افزاری چیه؟ یعنی با کرک نرم افزاری قفل سخت افزاری کرک میشه!
در ضمن بهترین راه برای ساخت قفل مناسب شناخت درست راههای کرک کردنه
اگر کسی اطلاعاتی داره لطفا توضیح بده، کرکر ها معمولا چجوری یه برنامه رو کرک می کنن؟
 - کد برنامه رو تغییر می دن (مثلا دی کمپایل کنن و تغییرات را اعمال کنن و بعد کمپایل کنن)؟
 - توی مسیر های برنامه تغییر ایجاد می کنن ( مثلا شرط چک کردن قفل رو دور بزنن)؟
 - فایل های جانبی رو جایگزین می کنن (مثلا یه dll برای بررسی قفل هست اونو دوباره خودشون بسازن و جایگزین کنن)؟
 - فرآیند قفل گذاری رو کشف می کنن و همون رو تقلید می کنن (مثلا فایل ها یا اطلاعات درون ریجستری)؟
 - کد مربوط به قفل رو پیدا می کنن و خودشون سریال نامبر تولید می کنن؟
و شاید هزاران راه دیگه

----------


## علیرضا حسن زاده

> وقتی از قفل سخت افزاری استفاده می شه ممکنه یکی بیاد برنامه رو کرک کنه و یه جوری کد مربوط به قفل رو حذف کنه اونوقت مزیت قفل سخت افزاری نسبت به نرم افزاری چیه؟ یعنی با کرک نرم افزاری قفل سخت افزاری کرک میشه!


وقتی مقداری از کد برنامه یا هر اطلاعات دیگری در قفل باشه با حذف کد چک کردن قفل مشکل برنامه حل نمیشه و همچنان کار نخواهد کرد
موردی که فرمودین برای قفل های خیلی ساده هست الان دیگه اکثر قفل های سخت افزاری حافظه دارن و میشه اطلاعات مختلفی از کدهای برنامه گرفته تا یوزر& پسورد دیتابیس رو توش نگه داری کرد 
البته منکر این هم نیستم که با استفاده از این روشها دیگه امکان کرک برنامه از بین بره و راه های زیادی از جمله شبیه سازی وجود داره اینارو فقز به خاطر مقایسه شما گفتم که تفاوت نحوه کار رو ببینیم

----------


## mrbm_2007

> وقتی مقداری از کد برنامه یا هر اطلاعات دیگری در قفل باشه با حذف کد چک کردن قفل مشکل برنامه حل نمیشه و همچنان کار نخواهد کرد
> موردی که فرمودین برای قفل های خیلی ساده هست الان دیگه اکثر قفل های سخت افزاری حافظه دارن و میشه اطلاعات مختلفی از کدهای برنامه گرفته تا یوزر& پسورد دیتابیس رو توش نگه داری کرد 
> البته منکر این هم نیستم که با استفاده از این روشها دیگه امکان کرک برنامه از بین بره و راه های زیادی از جمله شبیه سازی وجود داره اینارو فقز به خاطر مقایسه شما گفتم که تفاوت نحوه کار رو ببینیم


ممنون به نکته ی جالبی اشاره کردید
راستی در مورد روش های کرک کردن اطلاعی ندارید؟

----------


## Mousavmousab

سلام
دوستان هم اشاره کردند ولی من سعی می کنم شفاف تر بگم.
ما زمانی می تونیم یک قفل امن طراحی کنیم که واقعاٌ بدونیم برنامه های کرک که به کرکر کمک می کنند که برنامه های ما را دور بزنند ، چه اطلاعاتی را به دست کرکرها می دهند؟ باز اگر بخوام ساده تر بگم یعنی قبل از اینکه ما سعی در ساخت قفلی داشته باشیم ( چه سخت افزاری / چه نرم افزاری) باید بدونیم که اساس کار های برنامه کرکر چیست؟(به عبارتی کرکر باشیم)  یک کرکر که بدون برنامه نمی تونن کار خاصی انجام بدن اونا توسط یک سری برنامه  ها قفل ها را باز می کنند. اون موقع دیگه دستشون برای ما باز میشه و ما میزان امنیت قفل خودمون را بسته به قدرت برنامه نویسیمان بالا می بریم. 
ما تا اطلاعاتی راجع به دشمنانمان نداشته باشیم نمی تونیم به اونا حمله کنیم و در نتیجه موفق نمیشیم. پس جمع اوری اطلاعات در مورد برنامه های کرکر اولین قدم در جلوگیری نابودی نرم افزار هایی است که با جان و دل می نویسیم. ضمناٌ یادمان نرود که در این آب و خاک ، خودمان باید از حق خودمان دفاع کنیم. به امید کسی یا شخصی و با اما و اگر گفتن ها چیزی حاصل نخواهد شد.

----------


## aryasoft2872

> سلام دوستان عزیز چرا تایپیک رو بیهوده رها می کنید.!!
> برای من جالب بود روش هایی که ذکر کردید بعضی هاش بدردم خورد
> 
> من یه چند وقتی هست روی قفل گذاری روی برنامه کار می کنم
> 
>  البته از هیچ پروتکتری استفاده نمی کنم 
> 
> من سعی کردم بیشتر کد ها رو طوری طراحی کنم به نظر ساده بیاد ولی در باطن بسیار پیچیده است.
> 
> ...


اینم ازون حرفاست دوست عزیز. همچین چیزی غیرممکنه که بتونی توی رویداد MouseMove قفل رو چک کنی.در این صورت باید فرایند چکتون یک چیزی در حدود 10 میلی ثانیه و حتی کمتر طول بکشه تا نرم افزار کند نشه که همچین چیزی غیر ممکنه. یک چک کامل قفل با استفاده از الگوریتمی مثل MD5 و رشته هایی به طول حدودا 20 کاراکتر در عمل چیزی در حدود 2 تا 3 ثانیه طول می کشه که یعنی 2000 میلی ثانیه و رسما شما تو نرم افزار جرات نمی کنی موسو تکون بدی.

در مجموع به نظر من کرکری که به کد دسترسی پیداکنه علی الخصوص توی دات نت خیلی راحت یک کیجن میسازه و حالا شما بیا در هر ثانیه 2000 بار چک کن وقتی کد معتبر باشه چک کردن فایده ای نداره.پچ کردن هم مال کرکرای آماتوره کرکر حرفه ای کیجن میسازه براش(منظورم نرم افزارهای داخلی که مبتنی بر کد اس ام اسی و اینجور موارد هستن وگرنه نرم افزارای با قفل های دیگه راه حل هم همون پچ کردنه)
بهترین راه به نظر من:
1-با ابزارهای obfuscation کد رو محافظت کنید.
2-توی بعضی رویدادهای خاص اتصال به اینترنت رو چک کنید و اگر وجود داشت با دیتابیس کدهای داخل سایتتون چک کنید اگر کد محدودیتش تموم شده بود یا به عنوان کدی که روی بسته نرم افزار ثبت بود شناخته نشد نرم افزار رو قفل کنید به هر شیوه ای که روی اون کامپیوتر کاربر دیگه نتونه استفاده کنه.
(مثلا شما برای یک نرم افزار الگوریتمتون رو طوری نوشتید که 30 میلیارد کد متفاوت میشه تولید کرد در حالی که شما هزار کد مورد نیازتونه.حالا کاربری اگر کیجن هم داشت و اومد کد ساخت ما اون کدساخته شده رو توی لیست اون هزار کد داخل سایتمون چک می کنیم و اگز وجود نداشت نرم افزار رو قفل می کنیم. اینجوری خیلی دست کرکر بسته میشه و شانسش کمه که بتونه کیجن چندان قابل استفاده ای تولید کنه.)

----------


## gholami146

با سلام
من این بخش از سایت رو تازه دیدم و خیلی خوشحال شدم
خوب دوستان برای شروع باید بگم که قفل های سخت افزاری به چندین نوع مختلف دسته بندی می شه یک دسته از ائنها دارای یک کد شناسایی منحصر به فرد هست که برنامه نویس وجود قطعه سخت افزاری رو بر روی سیستم چک میکنه و در صورتی که این قطعه موجود باشه شماره سریال اون رو دریافت و با شماره سریال خودش که در برنامه وجود داره چک میکنه
این روش دارای مزایا و معایبی هست مزایای اون راحتی استفاده از اون و هزینه نسبتا کمش هست و معایبش هم اینه که کاربر میتونه اون قسمتی از کد رو که توسط برنامه شماره سریال چک میشه رو دستکاری کنه و قفل رو از دور خارج کنه
روش بعدی روشی هست که قفل دارای یک حافظه به ظرفیت بسیار کم حدودا یک کیلوبایت هست و توسط برنامه مخصوص قفل قسمتی از اطلاعات فایل اجرایی رو کات کرده و در داخل حافظه قرار میده و برنامه پس از اجرای کدهای اولیه به دنبال ادرس قفل رفته و اطلاعات رو از اون خونده و سپس به روتین برنامه اصلی بر میگرده که میتونیم این روش رو مثل روش قفل نرم افزاری که بعضی از پکرها از اون استفاده میکنن در نظر بگیریم که بهش روش استولن بایت میگن (بایت دزدیده شده)
البته این روش هم قابل باز شدن هست ولی سخت تر  ولی از معایب اون گرونی قفل هاست که باعث بالا بردن قیمت برنامه ها میشه

اگه به نظر من برنامه هاتون ارزشش رو داره برید و ازش بخرید بدک نیست

----------


## gholami146

خوب من هم تصمیم گرفتم از این به بعد در این انجمن پست بدم
و میخوام در پست های اینده خودم به آموزش مختصری از کرک نرم افزار ها بپردازم منتظر پست های بعدی من باشید 
انشاء الله یک تاپیک آموزشی می زنم و در آون به آموزش کرک نرم افزار با مثال های خوب می پردازم
دوست دار شما غلامی
WWW.Multico.ir

----------

