۰۲-بهمن-۱۳۸۶, ۱۰:۱۶:۰۷
ايجاد يك قفل نرم افزاري
با سلام
در اين مجموعه مقالات سعي خواهم كرد كه شما را بتدريج با انواع روشهاي ايجاد قفل آشنا كنم. اصولا" روشهاي زيادي براي ايجاد قفل بر روي نرم افزار ها وجود دارد ولي اولين روشي كه من ياد گرفتم ايجاد قفل بر مبناي شماره سريال درايو مورد نظر بود.
در تمامي مقاله ها روش كار بدين صورت خواهد بود كه برنامه يك كد را از كاربر خواهد خواست. در مقاله اول ابتدا روش بدست آوردن شماره سريال بك درايو را ياد خواهيم گرفت.
با معرفي اين تابع در ويژوال بيسيك شما قادر خواهيد بود كه شماره سريال درايوي را كه در lpRootPathName وارد كرده ايد بدست آوريد
تابع بالا كار شما را قدري آسانتر خواهد كرد. پس از بدست آوردن شماره سريال درايو مورد نظر ميتوانيد آن را زيپ كرده و به كاربر بدهيد و پس از ارئه آن از طرف كاربر به شما، شما آن را دوباره زيپ كرده و به كاربر برگردانيد برنامه پس از چك كردن سريال دوبار زيپ شده با مقدار داده شده اگر دو مقدار باهم برابر بودند اجازه استفاده را به كاربر خواهد داد.
و در آخر يك تابع مفيد ديگر براي بدست آوردن درايو سي دي و سريال آن:
در ضمن در مقاله های آینده سعی می کنم شما رو با روش های زیپ کردن ، کد و دیک کردن و در نهایت طریقه شکستن این نوع قفل ها آشنا کنم. البته اگه دوستان مایل بودن
با سلام
در اين مجموعه مقالات سعي خواهم كرد كه شما را بتدريج با انواع روشهاي ايجاد قفل آشنا كنم. اصولا" روشهاي زيادي براي ايجاد قفل بر روي نرم افزار ها وجود دارد ولي اولين روشي كه من ياد گرفتم ايجاد قفل بر مبناي شماره سريال درايو مورد نظر بود.
در تمامي مقاله ها روش كار بدين صورت خواهد بود كه برنامه يك كد را از كاربر خواهد خواست. در مقاله اول ابتدا روش بدست آوردن شماره سريال بك درايو را ياد خواهيم گرفت.
کد:
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
در ضمن در مقاله های آینده سعی می کنم شما رو با روش های زیپ کردن ، کد و دیک کردن و در نهایت طریقه شکستن این نوع قفل ها آشنا کنم. البته اگه دوستان مایل بودن