نمایش نتایج 1 تا 18 از 18

نام تاپیک: ! قفل يا كد فعال ساز برنامه بدون استفاده از دستور شرطي !

Threaded View

پست قبلی پست قبلی   پست بعدی پست بعدی
  1. #1

    Wink ! قفل يا كد فعال ساز برنامه بدون استفاده از دستور شرطي !

    سلام

    مشكلي كه در بيشتر برنامه هاي قفل گذاري شده هست كه باعث شكستن قفل اونها ميشه، نوع قفل و امنيت اون نيست بلكه اينه كه شما هر قفلي بزاريد و هر چقدر هم قفلتون امن باشه بالاخره در جايي از برنامه مي نويسيد

    اگر قفل موجود بود سپس
    اجراي برنامه

    در غير اينصورت
    خاتمه برنامه


    هكر ها هم از همين نکته استفاده مي كنند و دستور شرط شما رو كه كد اسمبلي اون معلومه در فايل برعكس مي كنند و اما يكي از راههاي مقابله با اين كار اينه كه از دستور شرطي استفاده نكنيد ولي چطوري ؟

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

    فرض كنيد شما يك كد سيستم داريد كه با استفاده از سريال هارد ديسك به دست اومده و كاربر اون رو به شما مي ده و شما طي الگوريتم خاصي اون رو تبديل به كد فعال ساز (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، پيامها و ...

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

    البته من فقط يك ايده رو مطرح كردم تا از نوشتن دستور شرط جلوگيري بشه و اگر دوستان نظري راجع به اين روش دارند يا روشهاي بهتري رو بلد هستند خيلي خوب هست كه به بقيه هم ياد بدن
    آخرین ویرایش به وسیله vbhamed : یک شنبه 28 مرداد 1397 در 18:46 عصر
    اگر من و شما هر كدوم يك چيز ياد داشته باشيم و به هم ياد بديم، حالا هر كدوم دو تا چيز ياد داريم ! http://www.ArminaCo.com

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •