*** WARNING ***
Tulisan ini digunakan untuk tujuan pendidikan, jika anda sudah mengetahui bagaimana menginjeksi registry dari VB, mohon jangan dimanfaatkan untuk menginjeksi registry dengan tujuan lainnya, sebagaimana yang program virus biasa lakukan.
Jika anda tidak pernah belajar atau tahu tentang registry sebelumnya, mohon jangan mencoba trik berikut, karena saya tidak bertanggung jawab atas kesalahan pengetikan/pengcopyan yang anda lakukan ataupun apa yang terjadi pada komputer anda.
*** WARNING ***

Setelah kita belajar bagaimana proteksi program dengan memanfaatkan file yang kita sembunyikan di folder tertentu, sekarang kita akan mencoba belajar proteksi program dengan registry.
Mungkin sudah banyak yang tahu untuk dapat melakukan operasi registry, kita perlu memanggil function API terlebih dahulu.
Masukkan deklarasi function API berikut ke dalam module program anda.

‘ Reg Key ROOT Types…
Public Const ERROR_SUCCESS = 0

Public Const HKEY_CLASSES_ROOT = &H80000000
Public Const HKEY_CURRENT_CONFIG = &H80000005
Public Const HKEY_CURRENT_USER = &H80000001
Public Const HKEY_DYN_DATA = &H80000006
Public Const HKEY_LOCAL_MACHINE = &H80000002
Public Const HKEY_PERFORMANCE_DATA = &H80000004
Public Const HKEY_USERS = &H80000003

‘ Reg Key Security Options…
Public Const KEY_ALL_ACCESS = &HF003F
Public Const KEY_CREATE_LINK = &H20
Public Const KEY_CREATE_SUB_KEY = &H4
Public Const KEY_ENUMERATE_SUB_KEYS = &H8
Public Const KEY_EXECUTE = &H20019
Public Const KEY_NOTIFY = &H10
Public Const KEY_QUERY_VALUE = &H1
Public Const KEY_READ = &H20019
Public Const KEY_SET_VALUE = &H2
Public Const KEY_WRITE = &H20006
Public Const READ_CONTROL = &H20000

Public Const REG_CREATED_NEW_KEY = &H1
Public Const REG_DWORD_BIG_ENDIAN = 5
Public Const REG_DWORD_LITTLE_ENDIAN = 4
Public Const REG_DWORD = 4
Public Const REG_EXPAND_SZ = 2
Public Const REG_LINK = 6
Public Const REG_MULTI_SZ = 7
Public Const REG_NONE = 0
Public Const REG_RESOURCE_LIST = 8
Public Const REG_SZ = 1
Public Const REG_BINARY = 3

Public Const KeyName = “SOFTWARE\Semau Gue”
Public Const SubKeyName = “Kunci”

Public Declare Function RegOpenKeyEx Lib “advapi32.dll” Alias “RegOpenKeyExA” (ByVal hkey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As Long) As Long
Public Declare Function RegQueryValueEx Lib “advapi32” Alias “RegQueryValueExA” (ByVal hkey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, ByRef lpType As Long, ByVal lpData As String, ByRef lpcbData As Long) As Long
Public Declare Function RegCloseKey Lib “advapi32.dll” (ByVal hkey As Long) As Long
Public Declare Function RegCreateKeyEx Lib “advapi32.dll” Alias “RegCreateKeyExA” (ByVal hkey As Long, ByVal lpSubKey As String, ByVal Reserved As Long, ByVal lpClass As String, ByVal dwOptions As Long, ByVal samDesired As Long, lpSecurityAttributes As SECURITY_ATTRIBUTES, phkResult As Long, lpdwDisposition As Long) As Long
Public Declare Function RegSetValue Lib “advapi32.dll” Alias “RegSetValueA” (ByVal hkey As Long, ByVal lpSubKey As String, ByVal dwType As Long, ByVal lpData As String, ByVal cbData As Long) As Long
Public Declare Function RegSetValueEx Lib “advapi32.dll” Alias “RegSetValueExA” (ByVal hkey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpData As String, ByVal cbData As Long) As Long

Setelah deklarasi fungsi-fungsi API di module sudah kita masukkan, kita tinggal mengetikkan sebuah procedure untuk pengecekan, apakah benar ada key yang dimaksud. Untuk key yang anda simpan di dalam registry komputer client anda nantinya, boleh berupa apa saja. Berikut ini adalah procedurenya

Private Sub Registry_Check()
Dim rc As Long
Dim hkey As Long
Dim KeyValType As Long
Dim KeyVal As String
Dim KeyValSize As Long

‘ Open Registry…
rc = RegOpenKeyEx(HKEY_CURRENT_USER, KeyName, 0, KEY_ALL_ACCESS, hkey)
If (rc <> ERROR_SUCCESS) Then
rc = RegCloseKey(hkey)
MsgBox “Maaf Program Anda belum diregistrasi” & vbCrLf & vbCrLf & “Untuk registrasi program, anda dapat menghubungi:” & vbCrLf & vbCrLf & “Candra Wahyu Kurniawan ph. 081330995038”, vbCritical, PesanMessageBox
End
Else
KeyVal = String$(1024, 0)
KeyValSize = 1024

‘ Retrieve Registry Key Value…
rc = RegQueryValueEx(hkey, SubKeyName, 0, KeyValType, KeyVal, KeyValSize)

If (rc <> ERROR_SUCCESS) Then
rc = RegCloseKey(hkey)
MsgBox “Maaf Program Anda belum diregistrasi” & vbCrLf & vbCrLf & “Untuk registrasi program, anda dapat menghubungi:” & vbCrLf & vbCrLf & “Candra Wahyu Kurniawan ph. 081330995038”, vbCritical, PesanMessageBox
End
Else
t = KeyVal
End If
End If

End Sub

Dalam contoh diatas, saya menggunakan key yang bernama Kunci, yang saya simpan di registry HKEY_CURRENT_USER\SOFTWARE. Sekali lagi penyimpanan key ini boleh terserah diletakkan di directory registry yang mana saja. Lalu apa yang terjadi apabila program menemukan key tersebut? Tentunya kita bisa memanfaatkan untuk pengecekan periode atau umur program dengan menyimpan data tanggal expired di key tersebut, lalu kita tinggal bandingkan dengan tanggal sistem seperti biasa.
Dengan memanfaatkan registry sebagai alternatif untuk proteksi pengcopyan program, program anda akan menjadi lebih sulit dicopy, sehingga hubungan anda dengan client akan tetap terpelihara dengan baik.