آژانس هواپیمایی
pop up

قفل سخت افزاري

شروع موضوع توسط matey ‏11 اکتبر 2007 در انجمن Visual Basic 6

  1. matey

    matey کاربر تازه وارد

    تاریخ عضویت:
    ‏4 جولای 2007
    نوشته ها:
    24
    تشکر شده:
    0
    سلام
    از دوستان كسي در مورد قفل سخت افزاري اطلاعاتي داره؟
    ممنون
     
  2. erroring

    erroring Registered User

    تاریخ عضویت:
    ‏4 دسامبر 2006
    نوشته ها:
    286
    تشکر شده:
    2
    محل سکونت:
    PDC (Parvazeh Developing Center)
    خوب معمولا بايد شماره سريال از هارد و يا Mac address گرفته بشه. اگه اشتباه نكنم. كه هردوش مشكلات خودش رو داره. من خودم هم دنبال يه روش در اين زمينه مي گردم
    مشكل شماره سريال هارد : مشكل در ويندوز ويستا و بعضي سيستم ها؟؟؟! (علتش رو نمي دونم)
    مشكل Mac Address : قابل تغيير بودن به صورت مجازي. غير قابل دسترس بودن در صورتي كه سيستم كارت شبكه نداشته باشه.
     
  3. matey

    matey کاربر تازه وارد

    تاریخ عضویت:
    ‏4 جولای 2007
    نوشته ها:
    24
    تشکر شده:
    0
    سلام
    راستش من خيلي اطلاعاتم كمه.مث اينكه بايد كد قفل براي وي بي تعريف بشه . ولي چطوري من نمي دونم؟؟؟؟؟؟
    اگه راهنماييم كنين خيلي خيلي ممنون ميشم​
     
  4. matey

    matey کاربر تازه وارد

    تاریخ عضویت:
    ‏4 جولای 2007
    نوشته ها:
    24
    تشکر شده:
    0
    سلام
    البته در مورد شماره سريال هارد فكر نميكنم مشكلي باشه چون با دستور مثلا
    :vol c
    در command prompt ميشه سريال درايو سي رو بدست آورد
    اگر فرض كنيم اين مشكل اساسي نيست روال كار چطوريه؟​
     
  5. erroring

    erroring Registered User

    تاریخ عضویت:
    ‏4 دسامبر 2006
    نوشته ها:
    286
    تشکر شده:
    2
    محل سکونت:
    PDC (Parvazeh Developing Center)
    خيلي خوب روال اينطوريه كه شما يه تابع كد كردن بايد بنويسي اين تابع هر رشته اي رو مي گيره و تبديل مي كنه به يه چيز ديگه (با قاعده و قانوني كه شما تعريف مي كنيد و منحصر به فرد)
    مثلا شماره سريال هارد رو ميگيره : 2F2 و به شماره 1234-1233-4444-5555 تبديل مي كنه.
    بعدش برنامه چك مي كنه در هنگام شروع و اگه رجيستر نبود فرم رجيستريشن بايد نمايش داده بشه. در اين فرم اين كد نمايش داده ميشه و كد از كاربر درخواست ميشه. و دكمه تاييد كه چك مي كنه اگه تبديل كد با يه تابع مثل تابع قبلي و يا اصلا همون با كد ورودي توسط كاربر يكي يا خير. اگه يكي بود رجيستر و الا هيچ.
    چند نكته هست كه بهتره رعايت بشه :
    وقتي مي خواد كد چك بشه كد دوباره Generate بشه نه اينكه از محتواي تكست باكسي كه قبلا توش كد ريخته شده استفاده بشه. اين يعني اينكه مجدد شماره سريال هارد رو بگيريد با تابع تبديلش كنيد و دوباره تبديل براي مقايسه و در نهايت با كد وارد شده توسط كاربر مقايسه بشه.
    نكته خيلي مهم اينه كه در عمليات رجيستر چيزي از متن نوشته شده توسط كاربر براي عمليات رجيستر مورد استفاده قرار بگيره اينو قبلا چند بار گفتم. يه مثال مي زنم روشن بشه :
    روش اشتباه :
    عمليات ثبت : كد كاربر اگر صحيح بود در رجيستري بنويس 1
    عمليات بررسي : اگر در رجيستري 1 بود برنامه فعال است.
    روش صحيح :
    عمليات ثبت : كد كاربر اگر صحيح بود در رجيستري كد كاربر (و يا تبديل يافته آن را) بنويس
    عمليات بررسي : اگر در رجيستري كد نوشته شده با تبديل يافته تبديل يافته شماره سريال هارد برابر بود برنامه فعال است.
    يك روش خوب استفاده از خاصيت مقدار دهي در شرطه اينطوري :
    کد:
    global Checked as boolean
    function RealyChecked() as boolean
    Checked=1
    RealyChecked = True
    end function
    
    حالا در برنامه و هنگام چك كردن كد وارد شده توسط كاربر :
    کد:
    if EnteredCode=CorrectCode and  RealyChecked=True then
    Register EnteredCode ' as a neccesary parameter
    end if
    
    و در مرحله پاياني در هنگام رجيستر شدن توسط تابع Register كه نوشتيد بايد از اين متغير Checked استفاده كنيد و از مقدار يك اون در مراحل توليد كد و ثبت استفاده بشه. طوري كه اگه يك نبود (صفر بودن يعني كرك شدن) برنامه ثبت كنه اما ثبتي اشتباه. اميدوارم متوجه منظورم شده باشيد. مثلا در هنگام ثبت شما به هر كاراكتر ورودي كاربر يه عدد بعلاوه Checked اضافه كنيد و در رجيستري بريزيد حالا اگه Checked صفر باشه بازهم تو رجيستري چيزي ريخته ميشه اما اون چيزي نيست كه باعث فعال شدن برنامه بشه




    قدم آخر اينه كه مراحل چك شدن برنامه در تمام كد ها و تمام بخش ها انجام بشه. در لود شدن فرمها دكمه هاي تاييد پروسس پرينت و هر قسمت مهمي كه داريد. به تبع اينكار سرعت نرم افزار رو پايين مياره.
    توضيحاتي درمورد آخرين مرحله هست كه بايد خدمتون عرض كنم : از يك كد يكسان براي چك كردن ثبت برنامه استفاده نكنيد چون اگه كركر يكيشون رو پيدا كنه بقيشون رو در عرض چند دقيقه پيدا ميكنه.

    كد ها تون رو كد كنيد :
    يه روش بسيار مفيد براي افزايش زمان كرك، كد كردن كد هاست!!! براي اينكار لازمه يه تابع بنويسيد كه معكوس خودش باشه. (اگه از رياضيات چيزي يادتون مونده باشه) يه مثال ساده از اين تابع ، تابعيه كه كل كاراكتر هاي رشته ورودي رو از 255 كم مي كنه به اينصورت مثلا كد شده a ميشه 5 و كد شده 5 ميشه a . منظورم از معكوس خودش باشه اين بود.
    در واقع شما بايد يه تابع ديگه براي تغيير خود سورس ها بنويسيد. اين كار يعني چي و چه فايده اي داره ؟ بذاريد يه مثال بزنم :
    برنامه من موقع ثبت شدن در رجيستري در مسير hklm\Sofware يه چيزي ميريزه حالا اگه كركر برنامه رو برگردونه متوجه آدرس ميشه و مستقيم مي فهمه داريد چه مي كنيد. حالا ما با يه تابع داخلي خود HKLM\Software رو به يه رشته ديگه (قابل برگردوندن) بر مي گرديونم به طور مثال اسم تابع هست ChangeStr و اينطوري كار مي كنه :
    کد:
    ChangeStr(ChangeStr("Salam"))="Salam"
    حالا هر جا از برنامه كه مربوط ميشه به چك كردن صحت رجيستر و جاهاي مختلف ديگه (براي رد گم كني) رشته هاي نوشته شده رو با اين تابع كد كنيد و در ويرايشگر ويژوال بيسيك بنويسيد. به طور مثال
    به جاي اينكه بنويسيد :
    کد:
    if ReadCode="Salam" then ActivateProgram
    بنويسيد :
    کد:
    if ReadCode=ChangeStr("#%E%D") then ActivateProgram  
    كه هردو دقيقا يه كار انجام ميدند ولي قسمت دوم وقتي به زبان اسمبلي برگرده رديابيش سخت تره.
    در جاهاي بيربط و نامربوط عبارت هايي مثل :
    کد:
    mylocalvar="Program Registered Thanks"
    
    بنويسيد تا كركر وقت بيشتري براي پيدا كردن محل چك شدن رجيستر صرف كنه.
    در پايان بايد بگم با تمام اين كار ها باز هم برنامه شما كرك ميشه. اما يه خورده بيشتر زمان ميبره و بايد دعا كنيد كه كركر حوصله نداشته باشه بيشتر از زمان مورد نياز وقت صرف كنه. [​IMG]
     
  6. matey

    matey کاربر تازه وارد

    تاریخ عضویت:
    ‏4 جولای 2007
    نوشته ها:
    24
    تشکر شده:
    0
    سلام جناب erroring.از كمكتون خيلي خيلي ممنون

    با اينكه خيلي برام واضح نبود (چون با registery كار نكردم) ولي سعي ميكنم بفهمم شما چي گفتين

    ما سوادمون در اين حد نيست قربان
     
  7. boxilink
  8. erroring

    erroring Registered User

    تاریخ عضویت:
    ‏4 دسامبر 2006
    نوشته ها:
    286
    تشکر شده:
    2
    محل سکونت:
    PDC (Parvazeh Developing Center)
    دوست عزيز به طور مثال گفتم دستور Registery منظور هر دستوري بود كه شما ازش براي ثبت استفاده مي كنيد. نه لزوما داخل رجيستري ويندوز. تقريبا تمام توابعي كه در مثالهايي كه زدم نوشتم وجود خارجي نداره و فقط مثاله براي اينكه منظورم رو بهتر بگم. به هر حال ببخشيد كه اينقدر داغون توضيح دادم. [​IMG]
     
  9. Khepele Sibilo

    Khepele Sibilo کاربر تازه وارد

    تاریخ عضویت:
    ‏2 ژانویه 2008
    نوشته ها:
    1,625
    تشکر شده:
    16
    قفلهاي سخت افزاري با نوشتن قفل تفاوت داره! اينها به صورت سخت افزاري جنبي در اختيار كاربر قرار داده ميشن،مثلا يك عنصري كه روي پورت LPT يا مواردي مثل اون نصب ميشه

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