Home > Visual Basic > Membuat aktivasi dongle bagian 1 – Simple think

Membuat aktivasi dongle bagian 1 – Simple think

February 8, 2010

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 :

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, 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" (ByVal nDrive As String) As Long

Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long

Private Const SYNCHRONIZE       As Long = &H100000
Private Const INFINITE          As Long = &HFFFF

Private Const SECURITY_CODE     As String = "-eB03DVVsA5RFyvKh" 'ini bisa diganti

Private Sub writeDongleFile(ByVal fileName As String, ByVal key As String)
    Dim fso As Scripting.FileSystemObject
    Dim ts  As Scripting.TextStream

    Set fso = New Scripting.FileSystemObject
    Set ts = fso.OpenTextFile(fileName, ForWriting, True)
    ts.Write key & vbCrLf
    ts.Close
    Set ts = Nothing
    Set fso = Nothing
End Sub

Private Function fileExists(ByVal namaFile As String) As Boolean
    Dim fso As Scripting.FileSystemObject

    On Error GoTo errHandle

    If Not (Len(namaFile) > 0) Then fileExists = False: Exit Function

    Set fso = New Scripting.FileSystemObject
    fileExists = fso.fileExists(namaFile)
    Set fso = Nothing

    Exit Function
errHandle:
    fileExists = False
End Function

Private Function generateKeyByMD5(ByVal serialNumber As String) As String
    Dim objMD5  As clsMD5

    Set objMD5 = New clsMD5
    generateKeyByMD5 = objMD5.CalculateMD5(serialNumber)
    Set objMD5 = Nothing
End Function

Private Sub loadDrive(ByVal lst As ListBox)
    Dim lDs             As Long
    Dim cnt             As Long
    Dim serial          As Long

    Dim strLabel        As String
    Dim fSName          As String
    Dim formatHex       As String
    Dim driveName       As String
    Dim serialNumber    As String
    Dim generateKey     As String
    Dim dongleFile      As String
    Dim cmd             As String

    Dim shellX          As Long
    Dim lPid            As Long
    Dim lHnd            As Long
    Dim lRet            As Long

    'get the available drives
    lDs = GetLogicalDrives
    lst.Clear

    For cnt = 0 To 25
        If (lDs And 2 ^ cnt) <> 0 Then
            driveName = Chr$(65 + cnt) & ":\"

            'Drive Type :
            '***************
            '2 = Removable/flash disk
            '3 = Drive Fixed
            '4 = Remote
            '5 = Cd-Rom
            '6 = Ram disk

            If GetDriveType(driveName) = 2 Then 'hanya flash disk yang kita proses
                dongleFile = driveName & "donglekey"

                If fileExists(dongleFile) Then 'sudah ada file dongle
                    'tampilkan file donglekey sebelumnya
                    'kalo tidak akan terjadi error waktu menjalankan perintah kill
                    cmd = "attrib -s -h " & dongleFile

                    shellX = Shell(cmd, vbHide)
                    lPid = shellX
                    If lPid <> 0 Then
                        lHnd = OpenProcess(SYNCHRONIZE, 0, lPid)
                        If lHnd <> 0 Then
                            lRet = WaitForSingleObject(lHnd, INFINITE)
                            CloseHandle (lHnd)
                        End If
                    End If

                    'hapus file dongle sebelumnya
                    'kalo tidak akan terjadi error waktu menulis ulang file dongle
                    'kenapa error,karena file dongle disembunyikan dg attribut +s -> dianggap file system
                    Kill dongleFile
                End If

                strLabel = String$(255, Chr$(0))
                GetVolumeInformation driveName, strLabel, 255, serial, 0, 0, fSName, 255
                strLabel = Left$(strLabel, InStr(1, strLabel, Chr$(0)) - 1)

                GetVolumeInformation driveName, vbNullString, 255, serial, 0, 0, vbNullString, 255

                formatHex = Format(Hex(serial), "00000000")
                serialNumber = Left(formatHex, 4) & "-" & Right(formatHex, 4) 'serial number - plain text
                generateKey = generateKeyByMD5(serialNumber & SECURITY_CODE) 'serial number + security code yang sudah dienkripsi

                Call writeDongleFile(dongleFile, generateKey) 'tulis file dongle ke flash disk
                DoEvents
                Call Shell("attrib +s +h " & dongleFile) 'sembunyikan file dongle

                lst.AddItem strLabel & "(" & Chr$(65 + cnt) & ":" & ") -> Serial Number : " & serialNumber & " -> Generate Key : " & generateKey
            End If
        End If
    Next cnt
    If Not (lst.ListCount > 0) Then lst.AddItem ">> Belom ada flash disk yang di coloxin <<"
End Sub

Private Sub cmdCreateDongleKey_Click()
    Call loadDrive(lstDrive)
End Sub

Contoh sederhana tool dongle

Dan berikut adalah contoh kode untuk memvalidasi flash disk dongle :

Private Function dongleKeyFile(ByVal fileName As String) As String
    Dim fso As Scripting.FileSystemObject
    Dim ts  As Scripting.TextStream
    Dim tmp As String

    On Error GoTo errHandle

    If fileExists(fileName) Then
        Set fso = New Scripting.FileSystemObject
        Set ts = fso.OpenTextFile(fileName, ForReading, False)
        Do While Not ts.AtEndOfStream
            tmp = ts.ReadLine
            If Len(tmp) > 0 Then Exit Do
        Loop
        ts.Close
        Set ts = Nothing
        Set fso = Nothing
    End If

    dongleKeyFile = tmp

    Exit Function
errHandle:
    dongleKeyFile = ""
End Function

Private Function isValidDongle() As Boolean
    Dim lDs             As Long
    Dim cnt             As Long
    Dim serial          As Long

    Dim strLabel        As String
    Dim fSName          As String
    Dim formatHex       As String
    Dim driveName       As String
    Dim serialNumber    As String
    Dim generateKey     As String
    Dim dongleFile      As String

    lDs = GetLogicalDrives

    For cnt = 0 To 25
        If (lDs And 2 ^ cnt) <> 0 Then
            driveName = Chr$(65 + cnt) & ":\"

            If GetDriveType(driveName) = 2 Then 'hanya flash disk yang kita proses
                dongleFile = driveName & "donglekey"

                strLabel = String$(255, Chr$(0))
                GetVolumeInformation driveName, strLabel, 255, serial, 0, 0, fSName, 255
                strLabel = Left$(strLabel, InStr(1, strLabel, Chr$(0)) - 1)

                GetVolumeInformation driveName, vbNullString, 255, serial, 0, 0, vbNullString, 255

                formatHex = Format(Hex(serial), "00000000")
                serialNumber = Left(formatHex, 4) & "-" & Right(formatHex, 4) 'serial number - plain text

                'serial number + security code yang sudah dienkripsi
                'security code -> harus sama dg yang di tool dongle
                generateKey = generateKeyByMD5(serialNumber & SECURITY_CODE)

                If generateKey = dongleKeyFile(dongleFile) Then
                    isValidDongle = True: Exit For
                End If
            End If
        End If
    Next cnt
End Function

Public Sub Main()
    If isValidDongle Then
        'TODO : tampilkan Form Utama disini
    Else
        MsgBox "Donglenya enggak valid atau belum dipasang.", vbExclamation, "Peringatan"
    End If
End Sub

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

Selamat mencoba🙂

  1. azka
    April 6, 2010 at 3:16 pm

    mas inikan buatan manusia pasti ada kelemahannya juga ,…klo mnrt mas kemungkinan celah dari dongle security ini bagi si hacker dimana mas….

  2. April 6, 2010 at 4:15 pm

    Yg jelas algoritma enkripsinya harus diganti, kan samplenya udah banyak yg download😀.

    Trus bagi cracker yg udah jago bahasa assembly, biasanya gampang untuk hal-hal seperti ini, jadi emg enggak ada yg aman 100% kok.

    Lihat aja vendor2x software gede, tetap ajakan program mereka bisa dijebol.

  3. Akira
    April 30, 2010 at 3:01 am

    Mas knpa ya stlah sy klik “Create Dongle Key” selalu ada msg “Disk Not Ready” padahal flashdisk nya ud sy pasang..
    mohon pencerahannya.. Thx..

  4. April 30, 2010 at 5:48 am

    Akira :

    Mas knpa ya stlah sy klik “Create Dongle Key” selalu ada msg “Disk Not Ready” padahal flashdisk nya ud sy pasang..
    mohon pencerahannya.. Thx..

    Kemungkinan gagal menulis ke flash disknya atw coba dengan flash disk yg lain, atw langsung didebug sendiri aja, baris kode yg menyebabkan error

  5. Pusink
    April 30, 2010 at 12:01 pm

    gimana caranya supaya generate key nya cuma 16 digit aja huruf besar dan angka saja

  6. April 30, 2010 at 12:58 pm

    Pusink :

    gimana caranya supaya generate key nya cuma 16 digit aja huruf besar dan angka saja

    Ya gampang mas tinggal ganti algoritma enkripsinya aja, untuk sample disinikan sy menggunakan MD5, klo sample yg lainnya banyak di PSC

    Tapi ngomong2x pengaruhnya dimana ya?

    Selamat searching😀

  7. Pusink
    May 1, 2010 at 6:56 am

    makasih banyak info na…. kalau pakai md5 terlalu panjang… aku coba cari cari ya…

  8. May 1, 2010 at 9:40 am

    Pusink :

    makasih banyak info na…. kalau pakai md5 terlalu panjang… aku coba cari cari ya…

    Oke mas selamat mencari😀

    • Ribet
      May 22, 2010 at 2:55 am

      lam kenal mas…..

      mas aku punya program usb donglenya nggak kebaca/rusak, gimana solusinya supaya program itu bisa dipakai tanda dongle? tanks

  9. May 22, 2010 at 3:14 am

    Wah klo ini bagiannya om2x yg jago ngecrack😀, atw sudah dicoba minta/beli lagi donglenya ke vendor softwarenya

  10. May 26, 2010 at 3:54 pm

    mas klo mo beli dongle dimana yach….????😀 \m/

  11. May 27, 2010 at 1:31 am

    loeloeng :

    mas klo mo beli dongle dimana yach….???? :D \m/

    Bwt apaan dulu nih ? klo kita beli software n aktivasinya pake dongle, biasanya sudah disediakan oleh vendornya.

    Tapi klo mau coba2x bwt dongle sendiri n murah meriah, pake aja flash disk seperti contoh kasus di artikel ini.

  12. om wi
    November 3, 2010 at 12:42 am

    Numpang nyedot mas… dan banyak2 terima kasih, semoga semua amalan ilmunya di blog ini menjadi amal jariyah. Amin3X

  13. November 3, 2010 at 3:15 am

    Amin

  14. sheillendra
    December 25, 2010 at 1:08 pm

    makasih banyak tutor nya….

    • December 26, 2010 at 4:30 am

      sama2x om

  15. June 17, 2011 at 9:57 am

    Mas, kalau dongle digunakan hanya untuk menyimpan “file donglekey” agak mubazir. Mungkin ada beberapa saran saya :
    1. Dongle bisa juga digunakan untuk menyimpan salah satu fungsi penting aplikasi. Kan masih ada banyak space kosong yang masih bisa dimanfaatkan.
    2. Isi dalam dongle harus tidak bisa dicopy, dilihat, apalagi dibuka (walaupun terenkripsi)
    3. Untuk software yang sudah massal, masa harus generate key satu-persatu?? (misal ada 1000 software, masa harus generate key 1000x)
    Mungkin itu dulu …………😀 sori bnyk komen.

    • June 17, 2011 at 11:38 pm

      Mas, kalau dongle digunakan hanya untuk menyimpan “file donglekey” agak mubazir. Mungkin ada beberapa saran saya :
      1. Dongle bisa juga digunakan untuk menyimpan salah satu fungsi penting aplikasi. Kan masih ada banyak space kosong yang masih bisa dimanfaatkan.

      Contohnya apa om😀

      2. Isi dalam dongle harus tidak bisa dicopy, dilihat, apalagi dibuka (walaupun terenkripsi)

      Nah klo ini bantuin riset donk om ? Soalnya skrg lagi sok sibuk😀

      3. Untuk software yang sudah massal, masa harus generate key satu-persatu?? (misal ada 1000 software, masa harus generate key 1000x)

      Klo males generate satu2x berarti harus langsung pesan ke pabriknya om😀, misal kita pesan serial 1 – 1000, trus diaplikasi tinggal kita daftarkan serial 1-1000nya buat kroscek donglenya.

  16. angga
    September 30, 2011 at 9:46 pm

    mas, aku coba jalanin di Win7 kok keluar error “Disk Not Ready”, tapi waktu saya jalankan di WinXP baik2 saja, kenapa ya?

    • October 2, 2011 at 4:12 am

      Errornya dimana ya om ? Baru sy coba juga nih win 7 aman2x aja.

  17. budi okky
    October 26, 2011 at 10:14 am

    ini yang dilihat SN Hardware nya ato SN volume nya ya?

    • October 28, 2011 at 2:05 am

      Prioritas pengecekan SN Hardware dulu, klo gagal baru baca SN volumenya

  18. January 6, 2012 at 4:59 pm

    Admin Baik…. Sukses Selalu… Aku senang melihat Artikel Admin…

    • January 7, 2012 at 1:13 pm

      Sama2x om, tq juga udah mampir🙂

  19. dude
    January 16, 2012 at 7:16 pm

    Mau nanya ni mas!! aku ada program/sofware yang aktifasinya menggunakan dongle (flasdisk) nah gemana cara jalankan program tsb tanpa menggunakan donglenya?

    • January 24, 2012 at 11:05 am

      Ya programnya harus di cr*ck om😀

  20. Joe Hidayat
    January 18, 2012 at 10:07 pm

    mas saya sudah coba menjalankan source codenya di VB6 dan berjalan dengan baik (tool dan check flash disknya…. tapi ketika saya compile ke exe untuk check flash disk…. ketika dijalankan selalu muncul pesan USB dongle tidak valid atau belum terpasang padahal ketika dijalankan di lingkungan VB berjalan dengan baik…. mohon pencerahannya, terima kasih

  21. January 24, 2012 at 11:33 am

    Coba om cek fungsi isValidDongle, tambahkan MsgBox untuk melihat hasil perbandingan antara generateKey dan dongleKeyFile(dongleFile)

  22. adam
    March 14, 2012 at 11:54 am

    mas ada source kodenya gak kalo pake aplikasi vb net 2010 ? saya kesulitan cos saya bikin program pake vb 2010 and pengen pake dongle…mohon pencerahannya….

    • March 14, 2012 at 12:03 pm

      Enggak ada om, tinggal diupgrade aja source code diatas soalnya klo di dot NET sy pake C#

  23. Edu
    April 10, 2012 at 2:10 am

    wah, mantab ne kyknya, gmana tu cara kerja dongle pada aplikasi kita gan?

    • April 10, 2012 at 10:48 am

      Akan lebih manteb om klo sample diatas om download dan dicoba, trus klo ada masalah baru ditanyakan.

      • Edu
        April 11, 2012 at 10:22 am

        udah didownload ne om, jadi cuma tuk membaca serial num dari plasdik kita ja ya om??😀

        • April 11, 2012 at 11:10 am

          Iya om, jadi masih bisa dicurangin😀

          • Edu
            April 11, 2012 at 10:14 pm

            dicurangin gmana om?
            terus hubungannya dengan dongle apa y om??
            maaf om banyak tanya newbie😀

            • April 13, 2012 at 9:16 am

              Belum tau ya ? Ya udah enggak jadi diceritain ah😀

              • Naldi
                April 13, 2012 at 10:15 pm

                cerita donk om…
                biar tau ne..😀

                • April 14, 2012 at 8:57 am

                  Kelemahan program diatas itukan hanya bisa membaca serial volume/label dari flash disknya bukan serial fisiknya, sedangkan serial volume itukan masih bisa dicopy

                  • Edu
                    April 25, 2012 at 11:48 pm

                    makasih ya om,,,
                    uda bisa bantu saya..
                    makasih bgt udah sharing soal dongle…
                    😀

                    • April 27, 2012 at 9:35 am

                      Oke om sippppp🙂

  24. setyawan
    June 25, 2013 at 5:24 pm

    klo pake java gmn y??😀

  25. August 30, 2013 at 8:16 pm

    share yg pake c# dong bang admin gantheng😀

    • September 3, 2013 at 8:46 am

      Kapan2x ya😀

  26. September 3, 2013 at 8:09 pm

    bagi dong abang admin,, lg butuh ni ane.. uke.. uke..😀

    • September 4, 2013 at 5:33 am

      Coba sendiri aja om, ini langkah-langkahnya :
      1. Download sample program di atas (Project VB 6)
      2. Kemudian convert ke VB .NET
      3. Dari VB .NET convert ke C# menggunakan tool yg ada disini.

  27. nainggolan
    September 9, 2013 at 12:57 pm

    Halo Mas,
    di bagian mana di coding vb6 diatas yang menunjukkan permintaan atau penyimpanan SN Hardware dari USB Flash Disk Dongle?
    Terima kasih mas ..
    Sukses selalu

  28. September 9, 2013 at 3:40 pm

    Semuanya ada di fungsi loadDrive, kan sudah sy kasih komentar juga

    • nainggolan
      September 9, 2013 at 7:27 pm

      Manteb mas .. maap saya ga liat detil.🙂
      Kalo boleh 1 pertanyaan lagi:
      Bagaimana kalo security code diganti dengan username dan password, apakah memungkinkan, bila iya bentuk codingnya jadi seperti apa ya mas?
      Matur nuwun sanget mas admiin yang baik hati dan gantengnya selangit .. ^^

      • September 11, 2013 at 9:15 am

        Pertama kita revisi dulu prosedure loadDrive menjadi seperti berikut :

        Private Sub loadDrive(ByVal lst As ListBox, ByVal userName As String, ByVal password As String)
        

        kemudian kode

        generateKey = generateKeyByMD5(serialNumber & SECURITY_CODE)
        
        Call writeDongleFile(dongleFile, generateKey)
        

        diganti menjadi :

        userName = generateKeyByMD5(userName & SECURITY_CODE)
        password = generateKeyByMD5(password & SECURITY_CODE)
        
        Call writeDongleFile(dongleFile, userName)
        Call writeDongleFile(dongleFile, password)
        

        Terakhir yg perlu direvisi adalah prosedure writeDongleFile yang sebelumnya hanya menulis satu informasi yaitu informasi label flash disk yg sekarang harus menulis dua informasi yaitu informasi userName dan password.

        Set ts = fso.OpenTextFile(fileName, ForWriting, True)
        

        menjadi

        Set ts = fso.OpenTextFile(fileName, ForAppending, True)
        

        Isi file dongle sebelum revisi :

        setelah revisi menjadi :

  29. empri
    September 10, 2013 at 5:23 pm

    hallo ikutan nanya ni admin yg baik hati….
    di kantor saya ada software yg bs dijalankan menggunakan dongle jenis usb,pertanyaannya apakah usb dongle tersebut bisa dicopy supaya software bs di jlnkn dirumah?mkh bnyk sblmnya

    • September 11, 2013 at 8:54 am

      Dicek dl om, usb donglenya bisa di akses via explorer enggak ?

      • Zacky
        September 12, 2013 at 8:26 pm

        kalo engga kebaca gimana Om..?
        dia pake jenis Aladdin AHSP,
        mohon pencerahaannya

        • September 13, 2013 at 10:41 am

          Mmm gt ya? Mungkin om bs coba link yg ada disini.

  30. dapito
    December 24, 2013 at 7:58 pm

    maaf gan, itu cara ngisi SN di demonya gmn ya??

    • December 28, 2013 at 11:08 am

      Ada dipostingan lanjutannya om.

  31. carlo rossi
    January 14, 2014 at 9:23 pm

    ada gak yang sample source coder pake delphi?

  32. donald
    March 1, 2014 at 12:14 am

    gan..ane dah coba tes,errorny “Disk Not Ready”,sudah atasin dengn klik debug,di list nampilin keterangan serial dan generate key. tp cek di flashdisk tidak ada file apapun alias kosong. coba tes dengan software “Toekang Cek Doengle Ver. 0.0.0.1” dan “frmCekDongle” , muncul pesan “Maaf Dongle belum terpasang,aplikasi tidak dapat dilanjut”, sudah ane tes smpe 3 flashdisk,butuh pencerahan gan.. tq.

    • March 4, 2014 at 9:42 am

      Om pake Win brp ? Coba dulu di WinXP normal enggak ?

      • donald
        March 6, 2014 at 11:30 pm

        win xp sp 3 gan…

  1. April 16, 2014 at 9:12 am
Comments are closed.
%d bloggers like this: