Anda di halaman 1dari 10

Membuat aktivasi dongle bagian akhir 1 dongle

untuk semua
February 10, 2010 Admin Leave a comment Go to comments

Oke akhirnya kita sudah memutuskan untuk membuat proteksi software dengan menggunakan
dongle, tetapi kita masih punya 1 masalah lagi yang harus kita selesaikan yaitu kemudahan
dalam mengimplementasikan jenis aktivasi ini.

Rencananya software yang kita buat akan diinstall dibeberapa komputer misal 1 server dengan
10 klien, yang jadi pertanyaan dimanakah donglenya akan dipasang ? Di komputer server ?
Komputer klien ? Ganti-gantian ? Atau semua komputer akan dipasang dongle

Jelas solusi yang terbaik dan tidak akan dibantah klien kita adalah cukup dipasang di komputer
server, kalo begitu aplikasi klien harus mempunyai cara untuk mengetahui apakah status dongle
di server dipasang/tidak atau donglenya valid/tidak.

Saat ini ada 2 cara yang mungkin bisa kita lakukan :

1. Status donglenya kita simpan di database, dengan cara ini kita mungkin akan membuat
program tambahan yang sifatnya realtime mengecek status dongle kemudian
menyimpannya ke database, sehingga hal ini memungkinkan klien mengetahui status
terakhir dongle.
2. Status dongle hanya akan dicek jika ada request dari klien, jelas ini cara yang lebih
efektif jadi enggak perlu harus realtime mengecek status dongle dan tentunya hal ini akan
lebih menghemat memory.

Baik cara 1 atau 2 tetap mengharuskan kita untuk membuat program tambahan dan karena kita
sudah memutuskan untuk menggunakan cara ke 2 otomatis ada sedikit keahlian pemrograman
yang harus kita ketahui.

Dan untungnya Anda sudah pernah main-main kesini, sini dan sini tetapi akan lebih MANTEB
kalo Anda sudah nyampe kesini dan sini sehingga untuk membuat aplikasi tambahan tersebut
jadi lebih gampang.

1. Aplikasi server

Intinya aplikasi ini hanya menerima koneksi masuk, melakukan pengecekan dongle kemudian
memberikan balasanke klien (true|false). Data yang masuk divalidasi terlebih dahulu jika bernilai
string reqStatusDongle baru diproses.

view source
print?
01 Private Sub Socket_DataArrival(Index As Integer, ByVal bytesTotal As Long)
02 Dim ret As Boolean
03
04 Dim strData As String
05 Dim statusDongle As String
06
07 On Error GoTo errHandle
08
' Grab the data from the specified Winsock object, and pass it to the
09
parent.
10 Call Socket(Index).GetData(strData)
11 DoEvents
12
13 'hanya data dengan string 'reqStatusDongle' yg akan diproses
14 If strData = "reqStatusDongle" Then
15 If isValidDongle Then
16 statusDongle = "true"
17 Else
18 statusDongle = "false"
19 End If
20
21 ret = send(Index, statusDongle) 'kirim status dongle ke klien
22 End If
23
24 Exit Sub
25 errHandle:
26 Call Socket(Index).Close
27 End Sub

Aplikasi server ini akan lebih baik jika dijadikan service dan Anda bisa membaca artikel cara
mudah dan gampang membuat aplikasi service dengan VB6, karena dari sekian banyak contoh-
contoh membuat service yang beredar di pasaran banyak yang sesat dan menyesatkan. He he he
just kidding

2. Aplikasi klien
Aplikasi klien ditambahkan 1 form khusus untuk merequest status dongle

view source
print?
01 Private Sub Form_Load()
02 If startConnect("127.0.0.1") Then
'ingat hanya string 'reqStatusDongle' yang akan diproses oleh
03
server
04 If Not send("reqStatusDongle") Then
MsgBox "Aplikasi Toekang Cek Doengle belum aktif",
05
vbExclamation, "Warning"
06 Unload Me
07 End If
08
09 Else
MsgBox "Aplikasi Toekang Cek Doengle belum aktif", vbExclamation,
10
"Warning"
11 Unload Me
12 End If
13 End Sub
14
15 Private Sub Socket_DataArrival(ByVal bytesTotal As Long)
16 Dim dataMasuk As String
17
18 'On Error Resume Next
19
20 Socket.GetData dataMasuk
21 If dataMasuk = "true" Then 'dongle sudah terpasang dan valid
22 MsgBox "dongle valid"
23 'TODO : tampilkan form utama disini
24 Else
MsgBox "Maaf dongle belum terpasang, aplikasi tidak bisa
25
dilanjutkan", vbExclamation, "Peringatan"
26 End If
27
28 Unload Me
29 End Sub

Oke mungkin itu saja yang bisa saya bahas, sample program bisa didownload disini.

Selamat mencoba

Membuat aktivasi dongle bagian 1 Simple think


February 8, 2010 Admin Leave a comment Go to comments

Apa yang ada dipikiran Anda ketika diminta untuk membuat aktivasi menggunakan dongle ?
Wahhh susah, wahhh dongle alat apaan tuh, wahhh perlu pesan khusus ke pabrik G, wahhhh
harus riset lagi nih, dan wahhhh2x lainnya.

Tapi sebenarnya kalo kita cermati lagi aktivasi dengan dongle lebih sederhana bila dibandingkan
dengan aktivasi klasik seperti memasukkan serial number, yaaa minimal menghemat 1 form
dan selain itu kelihatan juga lebih wahhhh .

Alat yang digunakan pun enggak perlu yang canggih2x cukup dengan flash disk yang paling
murah yang bisa kita dapatkan.

Pada artikel bagian 1 ini kita akan membuat tool sederhana untuk menandai flash disk yang akan
dijadikan dongle dan bagaimana memvalidasi flash disk donglenya valid/tidak.

Dan tool ini juga bisa digunakan untuk menandai beberapa flash disk sekaligus, berikut adalah
proses sederhana yang dilakukan oleh tool ini.

1. Menampilkan drive (khusus flash disk) dan mengambil serial numbernya


2. Membuat file donglekey yang disimpan di flash disk dan isinya adalah serial number dari
flash disk itu sendiri yang sudah dienkripsi, misal dengan enkripsi MD5. File donglekey
inilah yang kita butuhkan untuk melakukan validasi flash disk dongle.
3. Menyembunyikan file donglekey menggunakan perintah attrib +s +h

Contoh source code :

view source
print?
001 Private Declare Function GetLogicalDrives Lib "kernel32" () As Long
Private Declare Function GetVolumeInformation Lib "kernel32" Alias
"GetVolumeInformationA" (ByVal lpRootPathName As String, ByVal
lpVolumeNameBuffer As String, ByVal nVolumeNameSize As Long,
002
lpVolumeSerialNumber As Long, lpMaximumComponentLength As Long,
lpFileSystemFlags As Long, ByVal lpFileSystemNameBuffer As String, ByVal
nFileSystemNameSize As Long) As Long
Private Declare Function GetDriveType Lib "kernel32" Alias "GetDriveTypeA"
003
(ByVal nDrive As String) As Long
004
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess
005
As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle
006
As Long, ByVal dwMilliseconds As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As
007
Long) As Long
008
009 Private Const SYNCHRONIZE As Long = &H100000
010 Private Const INFINITE As Long = &HFFFF
011
Private Const SECURITY_CODE As String = "-eB03DVVsA5RFyvKh" 'ini bisa
012
diganti
013
014 Private Sub writeDongleFile(ByVal fileName As String, ByVal key As String)
015 Dim fso As Scripting.FileSystemObject
016 Dim ts As Scripting.TextStream
017
018 Set fso = New Scripting.FileSystemObject
019 Set ts = fso.OpenTextFile(fileName, ForWriting, True)
020 ts.Write key & vbCrLf
021 ts.Close
022 Set ts = Nothing
023 Set fso = Nothing
024 End Sub
025
026 Private Function fileExists(ByVal namaFile As String) As Boolean
027 Dim fso As Scripting.FileSystemObject
028
029 On Error GoTo errHandle
030
031 If Not (Len(namaFile) > 0) Then fileExists = False: Exit Function
032
033 Set fso = New Scripting.FileSystemObject
034 fileExists = fso.fileExists(namaFile)
035 Set fso = Nothing
036
037 Exit Function
038 errHandle:
039 fileExists = False
040 End Function
041
042 Private Function generateKeyByMD5(ByVal serialNumber As String) As String
043 Dim objMD5 As clsMD5
044
045 Set objMD5 = New clsMD5
046 generateKeyByMD5 = objMD5.CalculateMD5(serialNumber)
047 Set objMD5 = Nothing
048 End Function
049
050 Private Sub loadDrive(ByVal lst As ListBox)
051 Dim lDs As Long
052 Dim cnt As Long
053 Dim serial As Long
054
055 Dim strLabel As String
056 Dim fSName As String
057 Dim formatHex As String
058 Dim driveName As String
059 Dim serialNumber As String
060 Dim generateKey As String
061 Dim dongleFile As String
062 Dim cmd As String
063
064 Dim shellX As Long
065 Dim lPid As Long
066 Dim lHnd As Long
067 Dim lRet As Long
068
069 'get the available drives
070 lDs = GetLogicalDrives
071 lst.Clear
072
073 For cnt = 0 To 25
074 If (lDs And 2 ^ cnt) <> 0 Then
075 driveName = Chr$(65 + cnt) & ":\"
076
077 'Drive Type :
078 '***************
079 '2 = Removable/flash disk
080 '3 = Drive Fixed
081 '4 = Remote
082 '5 = Cd-Rom
083 '6 = Ram disk
084
If GetDriveType(driveName) = 2 Then 'hanya flash disk yang
085
kita proses
086 dongleFile = driveName & "donglekey"
087
088 If fileExists(dongleFile) Then 'sudah ada file dongle
089 'tampilkan file donglekey sebelumnya
090 'kalo tidak akan terjadi error waktu menjalankan
perintah kill
091 cmd = "attrib -s -h " & dongleFile
092
093 shellX = Shell(cmd, vbHide)
094 lPid = shellX
095 If lPid <> 0 Then
096 lHnd = OpenProcess(SYNCHRONIZE, 0, lPid)
097 If lHnd <> 0 Then
098 lRet = WaitForSingleObject(lHnd, INFINITE)
099 CloseHandle (lHnd)
100 End If
101 End If
102
103 'hapus file dongle sebelumnya
'kalo tidak akan terjadi error waktu menulis ulang
104
file dongle
'kenapa error,karena file dongle disembunyikan dg
105
attribut +s -> dianggap file system
106 Kill dongleFile
107 End If
108
109 strLabel = String$(255, Chr$(0))
GetVolumeInformation driveName, strLabel, 255, serial, 0,
110
0, fSName, 255
strLabel = Left$(strLabel, InStr(1, strLabel, Chr$(0)) -
111
1)
112
GetVolumeInformation driveName, vbNullString, 255, serial,
113
0, 0, vbNullString, 255
114
115 formatHex = Format(Hex(serial), "00000000")
serialNumber = Left(formatHex, 4) & "-" & Right(formatHex,
116
4) 'serial number - plain text
generateKey = generateKeyByMD5(serialNumber &
117
SECURITY_CODE) 'serial number + security code yang sudah dienkripsi
118
Call writeDongleFile(dongleFile, generateKey) 'tulis file
119
dongle ke flash disk
120 DoEvents
Call Shell("attrib +s +h " & dongleFile) 'sembunyikan file
121
dongle
122
lst.AddItem strLabel & "(" & Chr$(65 + cnt) & ":" & ") ->
123
Serial Number : " & serialNumber & " -> Generate Key : " & generateKey
124 End If
125 End If
126 Next cnt
If Not (lst.ListCount > 0) Then lst.AddItem ">> Belom ada flash disk
127
yang di coloxin <<"
128 End Sub
129
130 Private Sub cmdCreateDongleKey_Click()
131 Call loadDrive(lstDrive)
132 End Sub

Contoh sederhana tool dongle

Dan berikut adalah contoh kode untuk memvalidasi flash disk dongle :

view source
print?
01 Private Function dongleKeyFile(ByVal fileName As String) As String
02 Dim fso As Scripting.FileSystemObject
03 Dim ts As Scripting.TextStream
04 Dim tmp As String
05
06 On Error GoTo errHandle
07
08 If fileExists(fileName) Then
09 Set fso = New Scripting.FileSystemObject
10 Set ts = fso.OpenTextFile(fileName, ForReading, False)
11 Do While Not ts.AtEndOfStream
12 tmp = ts.ReadLine
13 If Len(tmp) > 0 Then Exit Do
14 Loop
15 ts.Close
16 Set ts = Nothing
17 Set fso = Nothing
18 End If
19
20 dongleKeyFile = tmp
21
22 Exit Function
23 errHandle:
24 dongleKeyFile = ""
25 End Function
26
27 Private Function isValidDongle() As Boolean
28 Dim lDs As Long
29 Dim cnt As Long
30 Dim serial As Long
31
32 Dim strLabel As String
33 Dim fSName As String
34 Dim formatHex As String
35 Dim driveName As String
36 Dim serialNumber As String
37 Dim generateKey As String
38 Dim dongleFile As String
39
40 lDs = GetLogicalDrives
41
42 For cnt = 0 To 25
43 If (lDs And 2 ^ cnt) <> 0 Then
44 driveName = Chr$(65 + cnt) & ":\"
45
If GetDriveType(driveName) = 2 Then 'hanya flash disk yang kita
46
proses
47 dongleFile = driveName & "donglekey"
48
49 strLabel = String$(255, Chr$(0))
GetVolumeInformation driveName, strLabel, 255, serial, 0,
50
0, fSName, 255
51 strLabel = Left$(strLabel, InStr(1, strLabel, Chr$(0)) - 1)
52
GetVolumeInformation driveName, vbNullString, 255, serial,
53
0, 0, vbNullString, 255
54
55 formatHex = Format(Hex(serial), "00000000")
serialNumber = Left(formatHex, 4) & "-" & Right(formatHex,
56
4) 'serial number - plain text
57
58 'serial number + security code yang sudah dienkripsi
59 'security code -> harus sama dg yang di tool dongle
generateKey = generateKeyByMD5(serialNumber &
60
SECURITY_CODE)
61
62 If generateKey = dongleKeyFile(dongleFile) Then
63 isValidDongle = True: Exit For
64 End If
65 End If
66 End If
67 Next cnt
68 End Function
69
70 Public Sub Main()
71 If isValidDongle Then
72 'TODO : tampilkan Form Utama disini
73 Else
MsgBox "Donglenya enggak valid atau belum dipasang.",
74
vbExclamation, "Peringatan"
75 End If
76 End Sub

Yap mungkin itu saja artikel sederhana bagaimana membuat aktivasi dengan dongle, untuk
source code bisa didownload disini.

Dim all As New ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive WHERE


InterfaceType='USB'")
For Each mo As ManagementObject In all.[Get]()
Dim mediaTag As New ManagementObject("Win32_PhysicalMedia.Tag='" +
mo("DeviceID") & "'")
Console.WriteLine(mediaTag("SerialNumber").ToString())
Next

Anda mungkin juga menyukai