{
توجه داشته باشید که این روش باید در قسمتهای مختلف برنامه
مورد استفاده قرار گیرد. برای مثال هنگام باز شدن فرمهای
اصلی و کلیک کردن
button
ها.
v
ذخیره کردن داده های مهم
نرم افزار در قفل
در اغلب نرم افزارها مقادیری (Database
Connection String
و
Database Password)
وجود دارد که برای نرم افزار بسیار مهم و حیاتی
بوده و نرم افزار بدون دسترسی به آن مقدار قابل
اجرا نخواهد بود. برای بالا بردن امنیت نرم افزار خود،
پیشنهاد میگردد مقادیر مهم را در قفل ذخیره نموده و هنگام
اجرای برنامه در زمان چک کردن قفل آن مقدار را از قفل
خوانده و استفاده نمایید. در این حالت حتی اگر
Cracker
موفق شود روتین های چک قفل را از درون فایل اجرایی حذف
نماید باز هم نرم افزار بدون آن مقدار قابل اجرا نخواهد
بود.
v
چک کردن قفل درون یک
Thread
این روش، روشی بسیار مفید در زمانیکه برنامه نویس بخواهد
قفل نرم افزاری را به صورت مداوم چک کند بدون اینکه در کار
User Interface
نرم افزار خللی وارد شود. در این روش توصیه میشود برای
امنیت بالاتر از دو یا چند
Thread
استفاده گردد و هر کدام از آنها با روشی متفاوت عملیات چک
کردن قفل را در یک حلقه انجام دهد. البته در نظر داشته
باشیدکه از کار انداختن
Thread
ها ی برنامه کاری بسیار ساده می باشد پس ، برای چک قفل
برنامه هرگز فقط به
Thread
ها اکتفا نکنید و در صورت استفاده از آنها سعی کنید بین
Thread
و
exe
اصلی به نوعی وابستگی ایجاد کنید. به نحوی که در صورت از
کار انداختن
Thread
ها ، برنامه شما به نوعی
Crash
کرده و روند اجرای
exe
مختل شود. یا قسمتی از کد اصلی برنامه را داخل
thread
قراردهید. در این صورت اگر
Thread
،
Suspend
شود برنامه به صورت کامل اجرا نخواهد شد. لازم به ذکر است
که
Trace
کدی که داخل
Thread
نوشته شده به نسبت مشکل تر است و استفاده از
Thread
هایی که شامل تکه کد های اصلی برنامه هستند بسیار مفید
خواهد بود.
v
جلوگیری از
Debug
کردن نرم افزار
v
چک کردن مقدار
CRC-32
برای DLL
یا Activ
چيست؟
( Clyclic R
edunda ncy Checksum
)
CRC
معمول ترین آن
CRC32
بوده که یک عدد
32
بیتی است و برای هر داده ای قابل محاسبه میباشد از فایل
گرفته تا یک مقدار رشته ای یا حتی یک قسمت از حافظه.
همانطور که می دانید داده ها به صورت رشته ای از بایتها
قابل نمایش بوده که مقدار
CRC
هر بایت قابل محاسبه میباشد. الگوریتمهای مختلفی برای
محاسبه
CRC
وجود دارد ولی نکته قابل توجه اینست که تمام آنها برای یک
داده ثابت مقدار یکسانی را تولید میکنند. توجه داشته باشید
که اگر برای یک داده مقدار
CRC
چند بار محاسبه شود مقادیر به دست آمده یکسان هستند و هر
داده ای مقدار
CRC
مختص به خود را دارد به عبارت دیگر مقدار
CRC
هیچ دو داده ای با هم یکسان نیست.
به طور معمول برای استفاده از قفل های سخت افزاری یا نرم
افزاری برای ارتباط با قفل باید از
DLL
یا
ActiveX
استفاده نمود. به دلیل ماهیت خاص این نوع
Object
ها، آنها قابل جایگزین شدن بوده و با این کار میتوان اداره
نرم افزار را در دست گرفت. پیشنهاد میشود در صورت امکان با
استفاده از روشهای مختلف محاسبه
CRC
قبل از استفاده از متدهای یک
DLL
یا
ActiveX
مشخص نمایید که آیا این
Object،
Object
اصلی است یا خیر؟
//Before
using object
If
(CalculateCRC(object)
= MainCRC)
}
//you
can use methods of object
{
v
استفاده از کدهای نا معلوم
و نا مشخص
استفاده از کدهای نا معلوم و نا مشخص،
Debug
نرم افزار را مشکل ساخته و زمان بیشتری برای
Crack
کردن نرم افزار باید صرف شود. در واقع این کدها در نرم
افزار عمل خاصی را انجام نداده و فقط در بخشهایی از نرم
افزار که قرار است کلمه عبور یا شماره سریال وارد شود قرار
گرفته و کار
Debug
را مشکل تر میکند. برای مثال دستوراتی به زبان اسمبلی وجود
دارد (Macro)
که با قرار دادن آنها در بین دستورات برنامه باعث میشود
بعضی از
Debugger
ها را با مشکل مواجه شوند :
__asm}
mov eax,
offset jump
push eax
//this
can include any code, but it must not change
//the
stack or, if it does, it must clear it.
pop eax
jmp eax
jump:
//any
code
{
v
غیر فعال نکردن منوها و
دکمه ها در نرم افزارهای
Trial
اگر قرار است یک نرم افزار را به صورت
Trial
منتشر نمایید، منوها و دکمه ها را غیر فعال نکرده و کد
اصلی را به طور مستقیم در نرم افزار قرار ندهید بعضی از
ابزارهای نرم افزار سازی امکاناتی را در اختیار قرار داده
تا بتوانید فقط کد های مورد نظر را
Compile
نمایید :
{$DEFINE
Trial}
{$IFDEF Trial}
//No
Action
{$ELSE}
//Operation (No Compile)