سلام
مشكلي كه در بيشتر برنامه هاي قفل گذاري شده هست كه باعث شكستن قفل اونها ميشه، نوع قفل و امنيت اون نيست بلكه اينه كه شما هر قفلي بزاريد و هر چقدر هم قفلتون امن باشه بالاخره در جايي از برنامه مي نويسيد
اگر قفل موجود بود سپس
اجراي برنامه
در غير اينصورت
خاتمه برنامه
هكر ها هم از همين نکته استفاده مي كنند و دستور شرط شما رو كه كد اسمبلي اون معلومه در فايل برعكس مي كنند و اما يكي از راههاي مقابله با اين كار اينه كه از دستور شرطي استفاده نكنيد ولي چطوري ؟
با اين روش ما اجراي برنامه رو متوقف نمي كنيم بلكه كاري مي كنيم برنامه درست اجرا نشه و كار نكنه
فرض كنيد شما يك كد سيستم داريد كه با استفاده از سريال هارد ديسك به دست اومده و كاربر اون رو به شما مي ده و شما طي الگوريتم خاصي اون رو تبديل به كد فعال ساز (ActivationCode) مي كنيد و به كاربر اعلام مي كنيد
برنامه شما هم به صورت داخلي كد فعال سازي رو خودش توليد مي كنه تا بتونه چك كنه كدي كه كاربر وارد كرده صحيح هست يا خير كه اسم اون رو مي زاريم (ProgramActivationCode)
طبق روش معمول ما دستور زير رو مي نويسيم
If ActivationCode = ProgramActivationCode then
'Run program
Else
'End
Endif
اما مسئله اينه كه براي امنيت بيشتر برنامه در مقابل هك شدن برنامه نبايد از دستور شرطي استفاده بشه
راهي كه پيشنهاد ميدم اينه كه يك تابع كد كننده (Encode) رشته ها با هر الگوريتمي خواستيد بنويسيد كه رشته ورودي و كليد رو بگيره و براساس كليد رشته رو كد كنه فقط طوري نوشته بشه كه اگر كليد برابر پوچ ("") بود خود رشته ورودي رو برگردونه
حالا اگر كد فعال سازي درست باشه و ما محتويات ProgramActivationCode رو از داخل ActivationCode حذف كنيم و نتيجه رو در متغير Key ذخيره كنيم بايد متغير Key برابر رشته پوچ بشه و اين يعني ActivationCode = ProgramActivationCode
براي اين كار چنين دستوري رو مي زاريم
dim Key$
Key = Replace(ActivationCode, ProgramActivationCode,"")
مطمئنا ما در برناممون رشته هايي داريم كه اگر درست نباشن برنامه درست كار نمي كنه مثلا مسير ديتابيس برنامه
كافيه مسير ديتابيس برنامه يك رشته الكي و نادرست باشه اونموقع برنامه با وجود اجرا شدن درست كار نمي كنه
اينجاست كه از تابع Encode استفاده مي كنيد
dbasePath = Encode("C:\Test.mdb", Key)
طبق دستور بالا و توضيحات گفته شده، اگر Key برابر پوچ باشه كه Encode كار خاصي انجام نميده و همون C:\Test.mdb رو توي متغير dbasePath كه مسير بانكمون هست قرار مي ده اما اگر Key پوچ نباشه چون رشته C:\Test.mdb كد ميشه پس مسير برنامه بهم ميريزه و تبديل به يك رشته بي معني ميشه و اين يعني عدم كاركرد صحيح برنامه
اگر از قفل سخت افزاري استفاده مي كنيد هم ميشه از اين روش استفاده كرد چون معمولا قفلهاي سخت افزاري مثل يك حافظه محافظت شده با پسورد هستند، شما يك رشته رو درون قفل ذخيره و بعدا چك مي كنيد كه رشته خوانده شده از قفل برابر همون رشته كه تو برنامتون وجود داره هست يا نه كه در اين حالت رشته درون قفل حكم ActivationCode و رشته توي برنامه حكم ProgramActivationCode رو داره
به غير از مسير ديتابيس رشته هاي زياد ديگري نيز در هر برنامه وجود داره كه اجراي صحيح برنامه وابسته به اونها هست و طبق برنامتون ميتونيد از هر كدوم كه خودتون خواستيد استفاده كنيد مثلا دستورات Sql، پيامها و ...
موكدا توصيه ميشه تابع كد كننده رو هم به صورت تابع ننويسيد و هر جا نياز داشتيد عين متن تابع رو بياريد تا امنيت باز هم بالاتر بره
البته من فقط يك ايده رو مطرح كردم تا از نوشتن دستور شرط جلوگيري بشه و اگر دوستان نظري راجع به اين روش دارند يا روشهاي بهتري رو بلد هستند خيلي خوب هست كه به بقيه هم ياد بدن