امتیاز موضوع:
  • 2 رأی - میانگین امتیازات: 4
  • 1
  • 2
  • 3
  • 4
  • 5
ايجاد يك قفل نرم افزاري
نویسنده پیام
Di Di آفلاین
مدير بخش هك و كرك
*****

ارسال‌ها: 2,358
موضوع‌ها: 116
تاریخ عضویت: اسفند ۱۳۸۵

تشکرها : 1816
( 4046 تشکر در 1321 ارسال )
ارسال: #1
ايجاد يك قفل نرم افزاري
ايجاد يك قفل نرم افزاري


با سلام
در اين مجموعه مقالات سعي خواهم كرد كه شما را بتدريج با انواع روشهاي ايجاد قفل آشنا كنم. اصولا" روشهاي زيادي براي ايجاد قفل بر روي نرم افزار ها وجود دارد ولي اولين روشي كه من ياد گرفتم ايجاد قفل بر مبناي شماره سريال درايو مورد نظر بود.


در تمامي مقاله ها روش كار بدين صورت خواهد بود كه برنامه يك كد را از كاربر خواهد خواست. در مقاله اول ابتدا روش بدست آوردن شماره سريال بك درايو را ياد خواهيم گرفت.

کد:
Private Declare Function GetVolumeSerialNumber Lib "kernel32" Alias "GetVolumeInformationA" (ByVal lpRootPathName As String, ByVal lpVolumeNameBuffer As String, ByVal nVolumeNameSize As Long, lpVolumeSerialNumber As Long, lpMaximumComponentLength As Long, lpFileSystemFlags As Long, ByVal lpFileSystemNameBuffer As String, ByVal nFileSystemNameSize As Long) As Long

با معرفي اين تابع در ويژوال بيسيك شما قادر خواهيد بود كه شماره سريال درايوي را كه در lpRootPathName وارد كرده ايد بدست آوريد

کد:
Public Function DiscSerialNumber(ByVal RootPath As String) As String
    Dim VolLabel As String
    Dim VolSize As Long
    Dim Serial As Long
    Dim MaxLen As Long
    Dim Flags As Long
    Dim Name As String
    Dim NameSize As Long
    Dim S As String
    Dim ret As Boolean
    ret = GetVolumeSerialNumber(RootPath, VolLabel, VolSize, Serial, MaxLen, Flags, Name, NameSize)
    If ret Then
        S = Format(Hex(Serial), "00000000")
        DiscSerialNumber = Left(S, 4) + "-" + Right(S, 4)
    Else
        DiscSerialNumber = "0000-0000"
    End If
End Function

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

و در آخر يك تابع مفيد ديگر براي بدست آوردن درايو سي دي و سريال آن:

کد:
Const DRIVE_CDROM = 5

Private Declare Function GetLogicalDriveStrings Lib "kernel32" Alias "GetLogicalDriveStringsA" (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long

Private Declare Function GetDriveType Lib "kernel32" Alias "GetDriveTypeA" (ByVal nDrive As String) As Long

Private Declare Function GetVolumeSerialNumber Lib "kernel32" Alias "GetVolumeInformationA" (ByVal lpRootPathName As String, ByVal lpVolumeNameBuffer As String, ByVal nVolumeNameSize As Long, lpVolumeSerialNumber As Long, lpMaximumComponentLength As Long, lpFileSystemFlags As Long, ByVal lpFileSystemNameBuffer As String, ByVal nFileSystemNameSize As Long) As Long

Public Function GetCdRomDrive() As String
    Dim tmp As Integer
    Dim tmpStr As String
    Dim Drives As String
    Dim CDsCount As Integer
    Dim CDsLetters As String
    Dim ret As Long
    
    Drives = Space(255)
    ret = GetLogicalDriveStrings(Len(Drives), Drives)
    For tmp = 1 To ret Step 4
        tmpStr = Mid(Drives, tmp, 3)
        If GetDriveType(tmpStr) = DRIVE_CDROM Then
            CDsLetters = Left(tmpStr, 3)
            Exit For
        End If
    Next tmp
    GetCdRomDrive = CDsLetters
End Function

در ضمن در مقاله های آینده سعی می کنم شما رو با روش های زیپ کردن ، کد و دیک کردن و در نهایت طریقه شکستن این نوع قفل ها آشنا کنم. البته اگه دوستان مایل بودن Wink

۰۲-بهمن-۱۳۸۶, ۱۰:۱۶:۰۷
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : اشک
mbza11 آفلاین
در حال پیشرفت
***

ارسال‌ها: 334
موضوع‌ها: 0
تاریخ عضویت: آبان ۱۳۸۶

تشکرها : 302
( 149 تشکر در 75 ارسال )
ارسال: #2
RE: ايجاد يك قفل نرم افزاري
سلام.
عالی بود.
اما در مورد سریال درایو، فکر کنم با فرمت کردن (یا FDisk) یا با استفاده از روش های نرم افزاری عوض بشه. البته فکر کنم، شما خودت استادی.
در کل روش جالبی بود که شماره سریال رو زیپ (فشرده!) کنم و دوباره یه شماره زیپ شده به کاربر برگردونیم.Heart

یه خورده سرم شلوغ شده دیر به دیر میام، ولی میام ...
------------------------------------------------------------
تنبل نباش، خودت بنويس ... Angry
اگه به مشکل خوردي، بيا بپرس. Clap
S.M.B Productions
۰۲-بهمن-۱۳۸۶, ۱۰:۵۴:۵۴
ارسال‌ها
پاسخ
ΛΛ Θ l-l $ Σ Ω آفلاین
کاربر با تجربه
****

ارسال‌ها: 739
موضوع‌ها: 147
تاریخ عضویت: مهر ۱۳۸۶

تشکرها : 219
( 187 تشکر در 98 ارسال )
ارسال: #3
RE: ايجاد يك قفل نرم افزاري
سلام
من از این کد ها هیچی نفهمیدم!!!
یعنی اگر این کدها توی برنامه ی من باشه روی کامپیوتر کسی دیگه ای اجرا نمی شه؟ لطفا یه مثال بزنید

Exclamation
۰۲-بهمن-۱۳۸۶, ۱۱:۵۵:۴۶
ارسال‌ها
پاسخ
lord_viper غایب
مدیر کل انجمن
*****

ارسال‌ها: 3,949
موضوع‌ها: 352
تاریخ عضویت: بهمن ۱۳۸۴

تشکرها : 5193
( 9875 تشکر در 2650 ارسال )
ارسال: #4
RE: ايجاد يك قفل نرم افزاري
عالی بود جناب didi ولی منظورتون از زیپ شده همون مقدار کد شده هست؟چرا کدی رو که از سریال بدست اوردیم و زیپ کردیم بدیم به کاربر؟ومنتظر ارائه دوباره اون از کاربر باشیم
(شاید منظورتون چیز دیگست و من بد متوجه شدم)
mohsen_f نوشته است:سلام
من از این کد ها هیچی نفهمیدم!!!
یعنی اگر این کدها توی برنامه ی من باشه روی کامپیوتر کسی دیگه ای اجرا نمی شه؟ لطفا یه مثال بزنید
این تقریبا اساس کار قفلهای تلفنی هستش
بله شما میتونین سریال هارد خودتونو بدین و هنگام شروع برنامه سریال هارد رو با اون مقدار چک کنین که اگه یکی نبود برنامه بسته بشه
۰۲-بهمن-۱۳۸۶, ۱۵:۲۷:۳۷
وب سایت ارسال‌ها
پاسخ
Di Di آفلاین
مدير بخش هك و كرك
*****

ارسال‌ها: 2,358
موضوع‌ها: 116
تاریخ عضویت: اسفند ۱۳۸۵

تشکرها : 1816
( 4046 تشکر در 1321 ارسال )
ارسال: #5
RE: ايجاد يك قفل نرم افزاري
سلام
در این مقاله ها سعی دارم کار رو از سطوح ابتدائی شروع کنم .
یعنی روال کار بر این هست که در مرحله اول یک قفل خیلی ساده رو طراحی کنیم و بعد به بررسی نقاط ضعف اون بپردازیم و با توجه به این نقاط ضعف قفل قوی تری طراحی کنیم و باز هم این قفل رو بشکنیم و این کار رو اونقدر ادامه بدیم تا در نهایت به دانش کافی برای طراحی قفل های کارآمد و مقاوم در برابر کراکرها دست پیدا کنیم. ان شاالله

با توجه به این مقدمه طبیعی هست که این قفل اولیه ما کاملا آسیب پذیر باشه و همونطور که آقا سید گفتن با تغییر شماره سریال هارد دیسک یا فرمت کردن هارد ، این قفل متزلزل می شه.

معنی زیپ کردن تقریبا دیکد کردن هست. یعنی در اکثر مواقع همون کد رو مجددا طبق یک فرایند خاص تبدیل به کد جدیدی می کنن که به اون اصطلاحا زیپ کردن می گن و برنامه این کد تغییر شکل یافته رو طبق همون فرایند خاص _ ولی بر عکس عمل می کنه _ به کد اولیه تبدیل می کنه و در صورت صحت کد برنامه فعال می شه.

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


.zip   Project1.zip (اندازه: 2.33 KB / تعداد دفعات دریافت: 268)

۰۲-بهمن-۱۳۸۶, ۱۹:۵۶:۴۸
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : اشک
ΛΛ Θ l-l $ Σ Ω آفلاین
کاربر با تجربه
****

ارسال‌ها: 739
موضوع‌ها: 147
تاریخ عضویت: مهر ۱۳۸۶

تشکرها : 219
( 187 تشکر در 98 ارسال )
ارسال: #6
RE: ايجاد يك قفل نرم افزاري
سلام Di Di
کد فعال سازی رو باید چی بزنم؟

Exclamation
۰۲-بهمن-۱۳۸۶, ۲۲:۴۳:۴۸
ارسال‌ها
پاسخ
Di Di آفلاین
مدير بخش هك و كرك
*****

ارسال‌ها: 2,358
موضوع‌ها: 116
تاریخ عضویت: اسفند ۱۳۸۵

تشکرها : 1816
( 4046 تشکر در 1321 ارسال )
ارسال: #7
RE: ايجاد يك قفل نرم افزاري
داخل سورس برنامه رو دقیق نگاه کن
اون پروسه کلیک بر روی کامند بوتون رو اگه دقت کنی از تابع Decode استفاده می کنه . می تونه قبل از دستور If مقدار اون رو داخب یه تکست باکس دیگه قرار بدی و بعد اون رو کپی کنی.
محسن جان قضیه خیلی ساده است یکم تو بحرش بری حتما می تونی ازش سر دربیاری.

۰۲-بهمن-۱۳۸۶, ۲۳:۰۹:۵۲
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : اشک
ΛΛ Θ l-l $ Σ Ω آفلاین
کاربر با تجربه
****

ارسال‌ها: 739
موضوع‌ها: 147
تاریخ عضویت: مهر ۱۳۸۶

تشکرها : 219
( 187 تشکر در 98 ارسال )
ارسال: #8
RE: ايجاد يك قفل نرم افزاري
نشد ConfusedConfusedConfused

Exclamation
(آخرین ویرایش در این ارسال: ۰۳-بهمن-۱۳۸۶, ۰۰:۲۸:۵۱، توسط ΛΛ Θ l-l $ Σ Ω.)
۰۳-بهمن-۱۳۸۶, ۰۰:۲۷:۰۹
ارسال‌ها
پاسخ
mbza11 آفلاین
در حال پیشرفت
***

ارسال‌ها: 334
موضوع‌ها: 0
تاریخ عضویت: آبان ۱۳۸۶

تشکرها : 302
( 149 تشکر در 75 ارسال )
ارسال: #9
RE: ايجاد يك قفل نرم افزاري
سلام.
یه راه خیلی راحت: Biggrin
این قسمت
کد:
TrueActCode = 'DeCode(InCode(GetDriveSN()))
تو دکمه رو به
کد:
TrueActCode = "Test"
تغییر بده بعد تو باکس Test رو بنویس.

یه خورده سرم شلوغ شده دیر به دیر میام، ولی میام ...
------------------------------------------------------------
تنبل نباش، خودت بنويس ... Angry
اگه به مشکل خوردي، بيا بپرس. Clap
S.M.B Productions
۰۳-بهمن-۱۳۸۶, ۰۱:۱۵:۰۷
ارسال‌ها
پاسخ
ΛΛ Θ l-l $ Σ Ω آفلاین
کاربر با تجربه
****

ارسال‌ها: 739
موضوع‌ها: 147
تاریخ عضویت: مهر ۱۳۸۶

تشکرها : 219
( 187 تشکر در 98 ارسال )
ارسال: #10
RE: ايجاد يك قفل نرم افزاري
سلام
خوب این که نمیشه قفل، اینجوری همیشه کد Test است

Exclamation
۰۳-بهمن-۱۳۸۶, ۰۱:۲۵:۴۵
ارسال‌ها
پاسخ
mbza11 آفلاین
در حال پیشرفت
***

ارسال‌ها: 334
موضوع‌ها: 0
تاریخ عضویت: آبان ۱۳۸۶

تشکرها : 302
( 149 تشکر در 75 ارسال )
ارسال: #11
RE: ايجاد يك قفل نرم افزاري
سلام.
کد دکمه رو به این صورت تغییر بده تا با فشردن اون تو مسیج باکس کد رو بهت نشون بده:
کد:
Private Sub Command1_Click()
'If Text2 <> "" Then
EntryCode = Text2
TrueActCode = DeCode(InCode(GetDriveSN()))

MsgBox TrueActCode
If EntryCode = TrueActCode Then
    MsgBox "ÈÇ ÊÔ˜Ñ ÈÑäÇãå ÔãÇ ÈÇ ãæÝÞíÊ ËÈÊ ÔÏ", vbInformation, "ÈÑäÇãå ÑÌíÓÊÑ ÔÏ"
Else
    MsgBox "˜Ï æÇÑÏ ÔÏå ãÚÊÈÑ äãí ÈÇÔÏ. áØÝÇ ˜Ï ÕÍíÍ ÑÇ æÇÑÏ äãÇÆíÏ", vbCritical, "ÎØÇ"
End If
'End If
End Sub
Exclamation لبته فارسی ها را با همون کد جایگزین کنید، اینجا به هم ریخته.

یه خورده سرم شلوغ شده دیر به دیر میام، ولی میام ...
------------------------------------------------------------
تنبل نباش، خودت بنويس ... Angry
اگه به مشکل خوردي، بيا بپرس. Clap
S.M.B Productions
۰۳-بهمن-۱۳۸۶, ۰۱:۴۹:۲۵
ارسال‌ها
پاسخ


موضوعات مرتبط با این موضوع...
موضوع نویسنده پاسخ بازدید آخرین ارسال
  كرك يا شبيه سازي قفل سخت افزاري قديمي پورت پارالل با پرداخت هزينه shabany 0 923 ۱۷-آبان-۱۳۹۹, ۱۱:۲۸:۵۷
آخرین ارسال: shabany
  آموزش تغيير دادن كد سخت افزاري Enigma 1.65 Sh4DoVV 0 3,730 ۳۰-مهر-۱۳۸۸, ۲۲:۵۰:۲۱
آخرین ارسال: Sh4DoVV
  آموزش مهم » پكيج هاي نرم افزاري MRT چگونه ساخته شده اند؟ uones 1 5,392 ۱۴-شهریور-۱۳۸۸, ۱۰:۳۷:۴۰
آخرین ارسال: alaska

پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 2 مهمان

صفحه‌ی تماس | IranVig | بازگشت به بالا | | بایگانی | پیوند سایتی RSS