راهبردها


استفاده از شناسه ویژه (Special ID)

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

شناسه ویژه (Special ID) یک رشته کاراکتری است که به سفارش شخص و یا شرکت در بخشی از حافظه قفل که ReadOnly است، ذخیره می شود.

امتیاز دیگر قفل های دارای شناسه ویژه، Reset شدن آنها با استفاده از PinCode است. PinCode هم یک رشته کاراکتری است که بر اساس Special ID تولید می شود و تنها در اختیار دارنده Special ID قرار می گیرد.


چک کردن قفل در کد نرم افزار بدون Timer

استفاده از Timer Component برای افزایش امنیت توصیه نمی شود چرا که یافتن Event OnTimer کار بسیار ساده ای است و حذف کردن آن بسیار ساده تر. پیشنهاد می شود برای انجام روند قفل گذاری در قسمت های مختلف یک نرم افزار، دستورات ارتباط با قفل تایپ شود و از Function یا Procedure نیز استفاده نشود و در صورت نوشتن متدی برای چک قفل، نام آن طوری انتخاب شود که Cracker را گمراه کند.


توجه : در صورتیکه می خواهید در روند قفل گذاری پیغام خاصی را نمایش دهید، متن پیغام طوری انتخاب شود که بیانگر روند قفل گذاری نباشد.

چک کردن قفل به صورت تصادفی

این راهکار می تواند جایگزین مناسبی برای Timer باشد به این ترتیب که در بین کدهای یک متد، یک عدد تصادفی (مثلا بین 1 تا 10) را تولید نموده و چنانچه این عدد، مساوی عدد مورد نظر بود، چک قفل انجام شود. برتری این روش در این است که چک کردن قفل به صورت تصادفی انجام می گیرد و در نتیجه فرصتی برای گمراه کردن Cracker بدست می آید و در عین حال سرعت اجرای برنامه نیز کاهش نمی یابد.



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

ذخیره کردن داده های مهم نرم افزار در حافظه قفل
در اغلب نرم افزارها مقادیری وجود دارند مثل (Database Connection String و Database Password) که برای نرم افزار بسیار مهم و حیاتی هستند و نرم افزار بدون دسترسی به این مقادیر قابل اجرا نخواهد بود. برای بالا بردن امنیت نرم افزار، پیشنهاد می شود مقادیر مهم در قفل ذخیره و هنگام اجرای برنامه، آنها را از قفل خوانده و استفاده نمایید. در این حالت حتی اگر Cracker موفق به حذف روتین های چک قفل شود، باز هم نرم افزار قابل اجرا نخواهد بود.

چک کردن قفل در Thread
چنانچه نرم افزار نویس مایل باشد قفل سخت افزاری به صورت مداوم چک شود، می تواند از روش چک کردن قفل در Thread استفاده کند. این راهکار روش بسیار مناسبی است که هیچ خللی در User Interface نرم افزار ایجاد نمی کند. برای ایجاد امنیت بیشتر توصیه می شود از دو یا چند Thread استفاده شود و هر کدام نیز با روش متفاوتی عملیات چک کردن قفل را در یک حلقه انجام دهند.

چک کردن مقدار CRC-32 یا MD5 برای DLL یا ActiveX
CRC مخفف عبارت Cyclic Redundancy Checksum و یک عدد 32 بیتی است که برای هر داده ای از قبیل فایل، یک رشته، یک قسمت از حافظه و ... قابل محاسبه است. CRC یک داده ی ثابت، همیشه مقداری ثابت است و CRC هیچ دو داده ی متفاوتی با هم یکسان نیست. حال با توجه به این نکات و ماهیت ویژه ی ActiveX (که رابط بین قفل و نرم افزار است) و برای جلوگیری از جایگزین شدن آن، توصیه می شود، CRC این فایل توسط نرم افزار چک شود.