قفل نرم‌افزاری

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

## اجزای اصلی قفلهای نرم‌افزاری
### برنامه اصلی
برنامه اصلی، برنامه‌ای است که می‌خواهیم بر روی آن قفل بگذاریم، این برنامه باید بگونه‌ای تغییر کند که بدون اجرای ماژول گارد اجرا نشود. در این ماژول زمانی که کلید پیدا شود آنگاه به برنامه اصلی اجازه اجرا داده می‌شود.

### [https://redpalet.net/software-development/ ماژول] [[گارد]]
قطعه کدی است که به برنامه اصلی اضافه می‌شود و به آن اجازه اجرا می‌دهد. این اجازه تنها زمانی که کلید پیدا می‌شود صادر می‌گردد.
ماژول گارد دو وظیفه اصلی دارد:
الف) تشخیص کلید
ب) تبدیل برنامه اصلی به یک فرم اجرایی که این عملیات باید کاملاً دور از چشم کاربران و به صورت محرمانه انجام شود.
دستکاری ماژول گارد باید کاملاً غیرممکن باشد، همچنین باید با مخفی سازی رمزگذاری واستفاده از تله‌گذاری دی باگ به‌طور کامل نگهداری شود. (تله دی باگ قطعه کدی است که به ماژول گارد اضافه می‌شود و در صورت تغییر ماژول از اجرا برنامه اصلی جلوگیری می‌کند).

### کلید فیزیکی
یک قطعه فیزیکی یا یک خصوصیت ویژه که به‌طور مصنوعی برای برنامه ساخته شده‌است.
این کلید به اشکال گوناگونی می‌باشد مانند: cd,disket,hard disk,dongle(دانگل یک قطعه سخت‌افزاری است که معمولاً بر روی پورت پرینتر نصب می‌شود)، کارتهای هوشمند یا مشخصات شخصی مانند اثر انگشت، صدا یا تصویر مردمک.

## آشنایی با روش‌های قفل‌گذاری و نحوه طراحی آن‌ها
### قفل‌گذاری با استفاده از شماره سریال اصلی [[دیسکت]]
همان‌طور که می‌دانید، سیستم‌عامل جهت هر دیسکت یک شماره سریال واحد (UNIQUE) اختصاص می‌دهد، بطوری‌که شماره سریال هر دو دیسکت با هم یکی نیستند؛ بنابراین همین خود یک راه تشخیص دیسکت کلید (قفل) می‌باشد. جهت استفاده از این قفل می‌بایست شماره سریال دیسکت را خوانده و سپس در داخل برنامه آن را کنترل نمائیم. یک راه ساده جهت خواندن شماره سریال، اجرای دستور VOL به صورت شکل زیر است:

VOL >>C:DOSLCK.TMP

بعد با باز کردن فایل LCK.TMP می‌توانیم به محتویات آن دسترسی پیدا کنیم. راه دیگر مراجعه به Boot Sector جهت کنترل قفل می‌باشد.

ضریب اطمینان این قفل در مورد دیسکت‌ها ۵٪-۲٪ بوده و در رابطه با هارد دیسک ۶۰٪-۵۰٪ می‌باشد. دلیل این اختلاف این است که در حالت قفل دیسکتی، با عمل کپی Boot Sector، قفل بر روی دیسکت دیگر قرار خواهد گرفت اما در رابطه با هارد دیسک اینکار به سادگی انجام پذیر نیست.

### قفل‌گذاری با استفاده از مشخصات سیستم
در این نوع قفل نرم‌افزاری، برنامه قبل از اجرا ابتدا مشخصات سیستم را خوانده (که اینکار از طریق مراجعه به بخش‌های خاصی از حافظه یا مراجعه به اطلاعات بایوس انجام می‌شود) سپس آن را با فایلی که قبلاً توسط نویسنده نرم‌افزار بر روی کامپیوتر کپی گردیده، مقایسه می‌کند و در صورت عدم برابری، اجرای برنامه پایان می‌پذیرد.

این نوع قفل هنوز هم در بسیاری از برنامه‌ها استفاده می‌گردد، اما نکته قابل ذکر این است که جهت اطمینان بیشتر به قفل، لازم است فایل حاوی مشخصات به صورت کد شده نوشته شده باشد تا امکان دستکاری آن توسط قفل شکنان به حداقل ممکن برسد. درصد اطمینان این نوع قفل ۷۵٪-۶۵٪ می‌باشد.

### قفل با استفاده از موقعیت فایل روی [[هارد دیسک]]
این نوع قفل فقط بر روی هارد دیسک قابل استفاده بوده و به این صورت است که فایل اجرایی به موقعیت خود بر روی هارد حساس می‌باشد چرا که قبل از اجرا ابتدا موقعیت خود را از روی سکتورهای ROOT خوانده و سپس شماره کلاستر اشاره گر به خودش را بدست می‌آورد، سپس آن را با شماره کلاستری که قبلاً توسط برنامه‌نویس بر روی یکی از فایل‌های برنامه (ممکن است به صورت کد شده باشد) قرار داده شده، مقایسه کرده و در صورت برابر بودن اجرا می‌شود.

این نوع قفل نسبت به قفل قبلی (شماره ۲) استفاده کمتری دارد، چون در صورتی که برنامه از روی بخشی از هارد به ناحیه دیگری انتقال یابد، اجرا نخواهد شد و این از نظر کاربر بسیار ناپسند می‌باشد. (ضمنا امکان Defra, Scandisk، و … نیز وجود ندارد چرا که شماره کلاستر اشاره گر به فایل تغییر خواهد کرد) ضریب اطمینان این نوع قفل نیز ۸۰٪-۷۰٪ می‌باشد.

### قفل با استفاده از فرمت غیر [[استاندارد]]
این شیوه یکی از رایج‌ترین قفل‌های نرم‌افزاری است که هنوز هم به صورت جدی مورد استفاده قرار می‌گیرد. برخی از دلایل اهمیت آن عبارتند از:
- امکان استفاده از روش‌های متفاوت در این روش
- راحتی و سرعت زیاد به هنگام استفاده از آن
- وجود ضریب اطمینان بالا و انعطاف‌پذیری زیاد آن
- عدم وجود نرم‌افزار خاصی جهت باز کردن این نوع از قفل‌ها

همان‌طور که می‌دانید سیستم‌عامل جهت دسترسی به اطلاعات یک دیسکت از فرمت خاصی (۱۸ سکتور در هر تراک) استفاده می‌کند، اما اگر یه تراک به صورت غیر استاندارد فرمت شود، (مثلاً ۱۹ سکتور در تراک) سیستم‌عامل دیگر توانایی استفاده از سکتورهای غیرمجاز را نخواهد داشت (برای مطالعه بیشتر در این مورد به سایر مقالات سایت میکرو رایانه مراجعه نمایید) و بنابراین تمام نرم‌افزارهای تحت سیستم‌عامل مزبور نیز از سکتورهای مخفی استفاده نکرده، در نتیجه امکان کپی‌برداری از آن‌ها بسیار ضعیف است.

استفاده از این روش این‌گونه است که تراک آخر دیسک را مثلاً به صورت یک سکتوری و با شماره ۲۰ فرمت کنید. سپس جهت کنترل دیسکت به سکتور فوق مراجعه کرده و در صورت وجود آن کنترل و اجرای برنامه را پی بگیرد.

البته غیر از تغییر شماره سکتور می‌توان از اندازه غیرمجاز نیز استفاده کرد، یعنی به جای اینکه سکتورها را به صورت ۵۱۲ بایتی فرمت کنیم، از اندازه ۱۰۲۴, ۲۰۴۸ و … استفاده کنیم. (قفل نرم‌افزاری Copy Control که معروفترین در نوع خود می‌باشد، از همین روش استفاده می‌کند)
این قفل فقط جهت فلاپی دیسک قابل استفاده می‌باشد و در صد اطمینان در این روش حدود ۹۵٪-۸۵٪ می‌باشد.

### قفل با استفاده از شماره سریال ساختگی
این روش قفل‌گذاری که قویترین قفل می‌باشد، به صورت مخلوطی از روش‌های ۱ و ۴ می‌باشد. یعنی ابتدا تراک خاصی را به صورت غیر استاندرد فرمت کرده و سپس اطلاعات خاصی را درون آن قرار می‌دهند (شماره سریال فرضی). این قفل فقط جهت فلاپی دیسک قابل استفاده بوده و ضریب اطمینان آن حدود ۹۸٪-۹۰٪ می‌باشد.

آشنایی با روتین‌های ضد دیباگ Anti Debug Procedures

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

الف: غیرفعال کردن وقفه‌ها جهت جلوگیری از اجرای مرحله به مرحله (Trace کردن) برنامه
می‌توان وقفه‌های کنترلر ۸۳۵۹ را غیرفعال ساخت. (در مورد وقفه‌ها بحث‌های نسبتاً مفصل و کاملی در سایت میکرو رایانه انجام شده برای مطالعه بیشتر در این مورد به سایر مقالات سایت میکرو رایانه مراجعه نمایید) آدرس این کنترلر ۲۱h بوده و IRQهای ۷–۰ را کنترل می‌کند IRQ۱ همان وقفه مربوط به صفحه کلید می‌باشد. پس با غیرفعال کردن این وقفه می‌توان صفحه کلید را غیرفعال نمود. طریقه استفاده:

CS:0100 E421 IN AL,21
CS:0102 0C02 OR AL,02
CS:0104 E621 OUT 21,AL

ب: تغییر بردار وقفه‌ها

یکی از روش‌های ساده و راحت جهت ضد دیباگ کردن برنامه‌ها تغییر برداری است که دیباگر از آن استفاده می‌کند. (۰۳) حتماً بخاطر بسپارید که در پایان برنامه دوباره آدرس بردار وقفه تغییر داده شده را بازیابی کنید. طریقه استفاده:

CS:0100 EB04 JMP 0106
CS:0102 0000 ADD [BX+SI],AL
CS:0104 0000 ADD [BX+SI],AL
CS:0106 31C0 XOR AX,AX
CS:0108 8EC0 MOV ES,AX
CS:010A 268B1E0C00 MOV BX,ES:[000C]
CS:010F 891E0201 MOV [0102],BX
CS:0113 268B1E0E00 MOV BX,ES:[000E]
CS:0118 891E0401 MOV [0104],BX
CS:011C 26C7064C000000 MOV Word Ptr ES:[000C],0000
CS:0123 26C7064E000000 MOV Word Ptr ES:[000E],۰۰۰۰

ج: گیج کردن دیباگر

این راه یکی از قویترین تکنیک‌های ضد دیباگ بوده که در آن به وسط یک دستور، پرش می‌شود و اینکار باعث قفل کردن (Hang) دیباگر خواهد شد. طریقه استفاده:

CS:0100 E421 IN AL,21
CS:0102 B0FF MOV AL,FF
CS:0104 EB02 JMP 0108
CS:0106 C606E62100 MOV Byte Ptr [21E۶],۰۰
CS:010B CD20 INT ۲۰

د: کنترل پرچم‌های CPU

این روش در برابر دیباگرها بسیار مفید می‌باشد و به این صورت است که ابتدا پرچم Trace از CPU را خاموش کرده و در بین برنامه آن را کنترل کنیم. در صورتی که این پرچم روشن شده باشد، مشخص است که دیباگر در پشت صحنه در حال اجراست. طریقه استفاده:

CS:0100 9C PUSHF
CS:0101 58 POP AX
CS:0102 25FFFE AND AX,FEFF
CS:0105 50 PUSH AX
CS:0106 9D POPF

و در بین برنامه از دستورات ذیل استفاده کنید:

CS:1523 9C PUSHF
CS:1524 58 POP AX
CS:1525 250001 AND AX,0100
CS:1528 7402 JZ 152C
CS:152A CD20 INT ۲۰

ه: متوقف ساختن دیباگر

این روش باعث متوقف شدن دیباگر می‌شود که با اجرای دستور ساده INT ۰۳ می‌توان این کار را انجام داد. طریقه استفاده:

CS:0100 B96402 MOV CX,0264
CS:0103 BE1001 MOV SI,0110
CS:0106 AC LODSB CS:0107 CC INT 3
CS:0108 98 CBW
CS:0109 01C3 ADD BX,AX
CS:010B E2F9 LOOP ۰۱۰۶

## روش‌های کد کردن اطلاعات Data Coding Procedures
### الف: افزودن یک عدد به کدهای یک فایل
در این روش جهت کد کردن یک فایل، ابتدا آن را خوانده و سپس یک مقدار خاص، مثلاً ۲۰ را به مقدار هر بایت فایل اضافه می‌کنیم. این یکی از ساده‌ترین روش‌ها بوده و نسبتاً کارایی خوبی نیز دارد. جهت خارج کردن فایل از حالت کد شده (Decode) نیز، کافیست مقدار فوق را از تمام بایت‌های فایل کم کنیم.

### ب: XOR کردن کل فایل
در این روش نیز پس از خواندن کل فایل، تمام بایت‌های آن را با رشته کاراکتری یا عدد ثابت خاصی یای مانعةالجمع کرده و سپس مقدار جدید را در فایل حاصل ضبط می‌نمائیم. جهت خارج کردن فایل از حالت کد شده، دقیقاً عکس آن را انجام می‌دهیم.

## بررسی چند روش قفل‌گذاری رایج در بازار
### Safe Disk
این قفل که توسط شرکت C-Dilla ارائه شده که شامل سه روش اصلی در قفل‌گذاری می‌باشد.
الف) یک امضای دیجیتالی که به عنوان کلید مورد استفاده قرار می‌گیرد و در هنگام کپی توسط نرم‌افزارهای کپی دیسک فشرده، کپی نمی‌شود.
ب) عملیات مخفی سازی
ج) استفاده از تله‌های دیباگ برای جلوگیری از دستکاری کد برنامه
این دیسک‌های فشرده شامل یک ساختار درست‌شناسی می‌باشند، هنگامی که دیسک فشرده اصلی داخل درایور قرار می‌گیرد، ساختار درست شناسی، امضای دیجیتالی را چک می‌کند و در صورت موفقیت به برنامه اجازه بالا آمدن و اجرا می‌دهد.
این قفل در دو نسخه مختلف ارائه شده که هر دو از لحاظ ساختار کاملاً شبیه به هم هستند و تنها تفاوت آن‌ها در فایلهایی است که بر روی دیسک فشرده ایجاد می‌کنند.
در نسخه یک، فایلهایی با نام‌های ۰۰۰۰۰۰.tmp, Clocksp.exe , Clcd32.Dll و فایل‌های با پسوند Icd وجود دارد.
این دیسک‌های فشرده در حدود ۱۰۰۰۰ سکتور غیرقابل خواندن دارد که معمولاً از سکتور ۸۰۰ شروع می‌شوند.
در نسخه دو دیگر فایل‌های با پسوند Icd وجود ندارد، ماژول گارد نیز مستقیماً به داخل برنامه اصلی منتقل شده ولی بقیه فای‌ها موجودند. در این نسخه نیز در حدود ۱۰۰۰۰ سکتور غیرقابل خواندن وجود دارد.
این قفل‌ها توسط دیسک درایو با توانایی خواندن و نوشتن در حالتRAW قابل کپی هستند.

### Secu Rom
این قفل که توسط شرکت سونی به بازار عرضه شده‌است، بیشترین طرفدار را در بین شرکت‌های تولیدکننده دیسک فشرده دارد. در این قفل از دو متد برای قفل‌گذاری استفاده شده‌است.
الف) استفاده از یک اثر انگشت الکترونیکی که برای هر دیسک فشرده متفاوت است و در قسمت Subchannel ذخیره می‌شود
ب) تکنولوژی مخفی سازی
SecuRom بر خلاف SafeDisk شامل سکتورهای غیرقابل خواندن نیست.
این دیسک‌های فشرده در اکثر مواقع شامل فایهایی با نام‌های CMS_95dll , CMS16.dll و CMS_NT.dll می‌باشند. البته دیسک‌های فشرده‌ای با این قفل وجود دارند که این فایل‌ها را شامل نمی‌شوند. در بنیان دیسک‌های فشرده‌ای که از قفل SecuRom استفاده می‌کنند شامل علامت اختصاری DADC روی سطح دیسک فشرده می‌باشند.
میزان امنیت این قفل‌ها متوسط بوده و معمولاً توسط دیسک فشرده درایوهای با توانایی خواندن و نوشتن Subchannelها، قابل کپی هستند.

### LaserLock
شرکت MLSlaserlock International این قفل را برای جلوگیری از کپی غیرمجاز دیسک‌های فشرده به بازار ارائه کرد. این قفل از ترکیب پنهان سازی و علامت لیزری بر روی دیسک فشرده استفاده می‌کند. این علامت‌گذاری که در آن یک سری داده خراب و غیرقابل کپی به دیسک فشرده اضافه می‌شود، هنگام صیقلی کردن دیسک فشرده انجام می‌شود.
این دیسک فشرده شامل یک پوشه مخفی با نام Laserlock در ریشه اصلی می‌باشد، این پوشه خود شامل فایل‌های غیرقابل کپی با نام‌های Laserlok.o۱۰، Laserlok.o۱۱ و Laserlok.in می‌باشد. علاوه بر آن یک نوار دایره‌ای شکل که شامل این سکتورهای خراب می‌باشد در روی سطح دیسک فشرده قابل مشاهده‌است.
این دیسک‌های فشرده توسط دیسک فشرده درایوهای با توانایی تشخیص و پرش از روی سکتورهای غیرقابل خواندن (Intelligent Bad Scanner.Fast Skip Error) قابل کپی هستند، البته زمان زیادی برای ایجاد کپی لازم است.

### Libcrypt Protection
این قفل که توسط شرکت Sony ارائه شده‌است، کاملاً شبیه SecuRom است، یک کد شناسائی مخصوص را در قسمت SubChannel ذخیره می‌کند، با این تفاوت که Libcrypt تمام ۹۶ بایت مربوط به SubChannel را برای پیدا کردن کد شناسایی استفاده می‌کند در حالی که SecuRom فقط ۱۶ بایت مربوط به Q-SubChannel را احتیاج دارد.
هیچ روشی برای شناسایی این قفل وجود ندارد.
این قفل از نظر میزان امنیت در رده قفل‌های خوب می‌باشد و فقط توسط دیسک درایوهای با توانایی عدم ترمیم (Don’t Repair Subchannel)SubChannel قابل کپی است.

### CD Cops
توسط شرکت Link Data Securty عرضه شد. این قفل همانند یک پوسته امنیتی است که به برنامه اصلی اضافه می‌شود. در این متد هر دیسک فشرده دارای یک اثر انگشت منحصر به فرد است که توسط تمام دیسک خوان‌ها قابل خواندن است ولی فقط توسط دستگاه خاصی قابل تکثیر است. این اثر انگشت بدین صورت است که هنگام ساخت، یک نرم‌افزار ساختار دیسک‌های فشرده را چک می‌کند و با توجه به آن یک کد ۸ رقمی تولید می‌کند. این کد برای دیسک‌های فشرده‌ای که به‌طور مشابه ساخته شده‌اند، یکسان است. این کد هشت رقمی هنگام نصب برنامه، بر روی سیستم نصب می‌شود و از آن پس برنامه هنگامی اجرا می‌شود که دیسک فشرده اصل در درایو باشد وگرنه اجرا نمی‌شود.
روش شناسایی این دیسک‌های فشرده به اینگونه‌است که شاخه اصلی شامل فایل CDCOPS.dll و فایلهایی با پسوندW_xوGz می‌باشد.
میزان امنیت این قفل‌ها بسیار بالا بوده و به‌طور معمول کپی این دیسک‌های فشرده غیرممکن است.

### DiseGuard
یک تکنولوژی قفل‌گذاری است که توسط شرکت TTR Technologyinc ارائه شده‌است. در این متد، یک کد دیجیتالی خاص بر روی دیسک فشرده ثبت می‌شود. این کد دیجیتالی که هنگام ساخت دیسک فشرده به آن اضافه می‌گردد، غیرقابل کپی است. هنگامی که از یک دیسک فشرده اصلی استفاده می‌شود این امضا ظاهر شده و این باعث آشکار سازی(Decryption) برنامه‌های اجرایی و اجرای آن‌ها می‌شود.
اما بر روی دیسک‌های فشرده کپی این امضا ظاهر نشده و در نتیجه برنامه اجرایی موفق به اجرا نمی‌شود در این‌گونه موارد یک پیغام مبنی بر کپی غیرقانونی ظاهر می‌شود یا نسخه نمایشی نرم‌افزار اجرا می‌شود.
این دیسک‌های فشرده شامل فایل‌های Loslink.Sys, Loslink.Vxd در شاخه Setup برنامه می‌باشد. درجه امنیت این قفل بسیار بالا بوده و به‌طور معمول غیرقابل کپی است.

### Protect CD
این قفل که بیشتر برای دیسک‌های فشرده بازی(game) مورد استفاده قرار می‌گیرد، بر روی داده‌ها هیچ تغییری اعمال نمی‌کند. اما یکسری دادهها خاص بر روی قسمت‌هایی از دیسک فشرده(SubChannel) قرار می‌دهد که فقط توسط سرویس‌های آشکارسازی خودش قابل دستیابی است.
برای شناسایی این قفل اگر فایل اجرایی اصلی را با یک Hex Editor باز کنید حروف VOB در داخل آن قابل مشاهده‌است.
این دیسک‌های فشرده، توسط دیسک فشرده درایوهایی که توانایی خواندن ونوشتن در حالت RAW و همچنین توانایی خواندن ونوشتن کانال‌های فرعی(SubChannel) را دارند قابل کپی هستند.

### PhenoProtect
در این متد که توسط شرکت Codecult به بازار عرضه شد، ابتدا یکسری داده‌های خراب در قسمت‌های مختلف دیسک فشرده ایجاد می‌شود. ماژول گارد هنگام اجرا داده‌های خراب را چک می‌کند در صورت مطابقت به برنامه اجازه اجرا می‌دهد.
این قفل از نظر امنیتی در رده قفل‌های ضعیف قرار دارد، دیسک‌های فشرده‌ای که با این روش قفل‌گذاری شده‌اند می‌توانند توسط دیسک فشرده درایوهایی که توانایی تشخیص و پرش از روی سکتوری‌های غیرقابل خواندن(Intelligent Bad Sector Scaner; Fast Error Skip) را دارند، به راحتی کپی شوند.

### CrypKey
در این متد قفل‌گذاری که از سیستم کنترل زمان استفاده می‌کند، احتیاج به هیچ گونه کلیدی نیست. بدین ترتیب که فقط یک ماژول به نرم‌افزار اصلی اضافه می‌شود، هنگام نصب، این ماژول با توجه به مشخصات سیستمی از جمله شماره سریال دیسکها، یک کد تولید می‌کند.
این کد تولید شده وابسته به خصوصیات ماشین است بنابراین بر روی هر سیستمی متفاوت است پس از ارائه کد، یک کد همسنگ آن را کاربر در خواست می‌کند. کاربر با ارائه کد تولید شده به شرکت تولیدکننده، کد معادل را دریافت می‌کند. این کد یا از طریق تلفن یا از طریق پست الکترونیک دریافت می‌شود. در صورتی‌که کد همسنگ دریافت شده پس از کد شدن معادل کد ارائه شده باشد یا به عبارتی دیگر کد ارائه شده از طرف کامپیوتر، مکمل کد دریافت شده از شرکت باشد برنامه اجزا اجرا می‌یابد.
کاربر می‌تواند بارها از این کد استفاده کند. پس از ورود کد، این کد در مکانی از سیستم مثلاً ریجستری یا یک فایل به صورت کد شده قرار می‌گیرد و هر بار کامپیوتر برنامه را اجرا می‌کند به جای در خواست کد از کاربر، کد را از ریجستری یا فایل مورد نظر پس از کدیابی بکار می‌برد. با توجه به استفاده روزافزون از این قفل‌ها به بررسی نقاط ویژگی‌ها وکاستی‌های این قفل‌ها می‌پردازیم

**کاستی‌ها**
الف) این قفل‌ها نیاز به دریافت کد از شرکت دارند یعنی اینکه کاربر حتماً باید به شکلی با شرکت تولیدکننده تماس بگیرد؛ و نمی‌تواند برنامه را پس از خرید بلافاصله استفاده کند.
ب) برای هر سیستم یک کد یکتا ارائه می‌شود و در صورت استفاده از چند سیستم باید برای دریافت هر کد جداگانه اقدام کرد
ج) این کدها ممکن است با فرمت کردن یا پارتیشن‌بندی تغییر یابند.
د) در صورت تغییر یا تعویض قطعه‌ای از قطعات سخت‌افزاری، برنامه تصور می‌کند که سیستم تغییر یافته و دیگر اجرا نمی‌شود.

**ویژگیها**
الف) از امنیت بالایی برخوردارند
ب) توانایی آمارگیری فروش برنامه توسط شرکت تولیدکننده

### Illegal Toc
از این متد بیشتر برای پیشگیری کاربران از کپی دیسک‌های فشرده بازی خصوصاً دیسک‌های فشردهٔ دستگاه Play Station استفاده می‌شود. این متد با دادن داده‌ها غلط دربارهٔ سایز فایلها کار می‌کند. دیسک فشرده یک جدول مشخصات دارد که در مورد سایز فایل‌ها موقعیت واسم هر فایل روی دیسک فشرده اطلاعاتی در خود نگه می‌دارد. هنگامی که شرکت‌های نرم‌افزاری یک دیسک فشرده را تهیه می‌کنند، می‌توانند اندازه فایل‌ها را به‌طور دستی تغییر دهند این کار باعث می‌شود تا در زمان کپی، پیغامی مبنی بر بزرگ بودن اندازه دیسک فشرده و عدم امکان کپی توسط برنامه کپی صادر شود.
روش شناسایی این متد بدین صورت است که به علت حجم بیش از اندازه فایها، ظرفیت دیسک فشرده، در حدود چند گیگا بایت می‌باشد.
این متد از دید امنیتی، در حد متوسط می‌باشد و توسط برنامه‌های کپی دیسک فشرده که امکان نادیده گرفتن جدول مشخصات نادرست Ignore Illegal Toc را داشته باشند قابل کپی هستند.

### OverBurn/Oversize
این متد قفل‌گذاری بر روی داده‌ها هیچ تغییری اعمال نمی‌کند. در این متد یکسری داده اضافی به دیسک فشرده اضافه می‌شود به‌طوری‌که محتویات دیسک فشرده از مقدار استاندارد، فضای بیشتری اشغال کند. برای مثل قرار دادن ۷۰۵ MB داده‌ها در یک دیسک فشرده با ظرفیت ۷۰۰ MB، اکثر دیسک درایوها توانایی خواندن و نوشتن این قسمت اضافی را ندارند و هنگام کپی دچار خرابی می‌شوند.
روش شناسایی به این صورت است که محتویات دیسک فشرده کمی بیشتر از حد استاندارد دیسک فشرده، ظرفیت دارند.
درجه امنیت این متد در حد ضعیف است. این روش قفل‌گذاری تا هنگامیکه دیسک‌های فشرده با ظرفیت بالا به بازار عرضه نشده بود، روش موفق بود.

## منابع
* طراحی و پیاده‌سازی قفل‌های نرم‌افزاری، آرش آبیار، پایان‌نامه ۱۳۸۷ شهریور، دانشگاه صنعتی مازندران
* 

امنیت رایانه‌ای