Membuat Serial Number Dan Aktivasinya
-
Upload
masirul2009 -
Category
Documents
-
view
279 -
download
31
Transcript of Membuat Serial Number Dan Aktivasinya
Menambahkan serial number pada paket instalasi (inno setup)
April 5, 2010 Admin Leave a comment Go to comments
Melengkapi koleksi artikel saya tentang pembuatan paket instalasi, kali ini kita akan menambahkan serial number pada paket instalasi yang kita buat menggunakan Inno Setup.
IKG (Inno Key Generator) adalah Third-Party files yang akan kita gunakan pada artikel ini dan Inno Setup yang saya gunakan adalah versi 5.0.8.
Silahkan Anda download IKG dari situs resminya atau bisa juga download disini tetapi saya lebih menyarankan Anda untuk mendownload dari link ke dua saja karena sudah saya seleksi file-file apa saja yang dibutuhkan.
Jika sudah selesai downloadnya silahkan Anda ekstrak file IKG.rarnya, berikut adalah penjelasan singkat tentang file-file yang ada di dalam file IKG.rar
1. ISID.dll, file ini dibutuhkan untuk melakukan validasi serial number/unlock code yang diinputkan pada saat proses instalasi, otomatis harus kita sertakan pada saat pembuatan paket instalasi.
2. IKG.exe adalah tool untuk mengenerate file Inno Key yang berisi informasi user + serial number valid yang sudah terenkripsi, jadi setiap paket instalasi yang kita buat membutuhkan file inno key yang unik (huhhhh report juga ya) namanya juga mau aman (walaupun tidak 100%) report sedikitkan engga pa2 kan
3. IKGHelp.pdf, klo yang ini kayaxnya enggak perlu saya jelasin.
Oke langsung saja Anda jalankan file IKG.exe, setelah itu akan tampil form berikut :
Langkah pertama yang harus kita lakukan adalah mengeset password IKG, agar tidak semua orang bisa menggunakan tool ini.
Klik menu File -> Change Bank Password
Selanjutnya kita tinggal masukkan passwordnya
Untuk menyederhanakan pembahasan, informasi yang akan kita tambahkan pada saat instalasi kita batasi sebagai berikut :
1. Registered Name2. Registered Company
3. Registration Code
4. Private Key
Maka konfigurasi yang harus kita set pada tool IKG adalah sebagai berikut :
Kita tinggal menginputkan informasi Registered Name dan Organisation, untuk informasi Registration Code dan Private Key sudah otomatis terisi.
Jika sudah kita langsung saja simpan file Inno Keynya, file ini berisi informasi Registered Name, Registered Company, Registration Code dan Private Key (sesuai setting diatas) yang sudah dienkripsi.
Jadi jika kita akan membuat file setup berikutnya, kita harus mengetik ulang informasi Registered Name dan Registered Company yang lain (unik) dan menyimpan ulang file Inno Key (sebaiknya dengan nama yang berbeda).
Sampai disini kita akan memasuki bagian yang paling menyenangkan yaitu coding . Kita akan menambahkan beberapa baris kode pada bagian [Files] dan [Code].
view source
print ?
001 [Files]
002 ;file klien-1.iky dihasilkan oleh tool IKG
003 Source: klien-1.iky; DestDir: {tmp}; Flags: ignoreversion
004 Source: ISID.dll; DestDir: {sys}; Flags: ignoreversion
005
006 [Code]
007function ValidateSerialNumber(InnoKeyFile, User, Orgn, ProdCode, HDD, MAC, PrivateKey, Serial: String): Boolean;
008 external 'ValidateSerialNumber@files:ISID.dll stdcall';
009
010 const
011 INNO_KEY = 'klien-1.iky';
012
013 var
014 UserPage : TInputQueryWizardPage;
015 UserValues : TArrayOfString;
016
017 procedure InitializeWizard();
018 begin
019 { create the custom page }
020 UserPage := CreateInputQueryPage(wpInfoBefore, 'Informasi Registrasi', 'Anda memerlukan user yang valid agar bisa melanjutkan proses instalasi',
021 'Masukkan informasi registrasi (case sensitive), kemudian klik tombol Lanjut >.');
022
023 UserPage.Add('Registered Name:', False);
024 UserPage.Add('Registered Company:', False);
025 UserPage.Add('Registration Code:', False);
026 UserPage.Add('Private Key:', False);
027
028 { Set default values }
029 SetArrayLength(UserValues, 4);
030 RegQueryStringValue(HKLM, 'Software\Microsoft\Windows\CurrentVersion', 'RegisteredOwner', UserValues[0]);
031 RegQueryStringValue(HKLM, 'Software\Microsoft\Windows\CurrentVersion', 'RegisteredOrganization', UserValues[1]);
032 if (UserValues[0] = '') and (UserValues[1] = '') then begin
033 RegQueryStringValue(HKCU, 'Software\Microsoft\MS Setup (ACME)\User Info', 'DefName', UserValues[0]);
034 RegQueryStringValue(HKCU, 'Software\Microsoft\MS Setup (ACME)\User Info', 'DefCompany', UserValues[1]);
035 end;
036
037 { Try to find the settings that were stored last time (also see below). }
038 UserPage.Values[0] := GetPreviousData('Name', UserValues[0]);
039 UserPage.Values[1] := GetPreviousData('Company', UserValues[1]);
040 UserPage.Values[2] := GetPreviousData('Unlock', UserValues[2]);
041 UserPage.Values[3] := GetPreviousData('Private', UserValues[3]);
042
043 end;
044
045 procedure RegisterPreviousData(PreviousDataKey: Integer);
046 begin
047 { Store the settings so we can restore them next time }
048 SetPreviousData(PreviousDataKey, 'Name', UserPage.Values[0]);
049 SetPreviousData(PreviousDataKey, 'Company', UserPage.Values[1]);
050 SetPreviousData(PreviousDataKey, 'Unlock', UserPage.Values[2]);
051 SetPreviousData(PreviousDataKey, 'Private', UserPage.Values[3]);
052 end;
053
054 function ScriptDlgPages(CurPage: Integer; BackClicked: Boolean): Boolean;
055 var
056 ExpPath: String;
057
058 begin
059 Result := True;
060
061 if (CurPage = UserPage.ID) then
062 begin
063 ExtractTemporaryFile(INNO_KEY); { the public key file }
064
065 ExpPath := ExpandConstant('{tmp}\' + INNO_KEY);
066
067 Result := False;
068
069 UserValues[0] := UserPage.Values[0];
070 UserValues[1] := UserPage.Values[1];
071 UserValues[2] := UserPage.Values[2];
072 UserValues[3] := UserPage.Values[3];
073
074 if (UserValues[0] = '') or (UserValues[1] = '') or (UserValues[2] = '') or (UserValues[3] = '') then
075 MsgBox('No fields can be blank !', mbError, MB_OK)
076 else
077 begin
078 Result := ValidateSerialNumber(ExpPath, UserValues[0], UserValues[1], '', '', '', UserValues[3], UserValues[2]);
079
080 if (not Result) then
081 MsgBox('Invalid Entry !', mbError, MB_OK);
082
083 end
084 end
085 end;
086
087 function NextButtonClick(CurPage: Integer): Boolean;
088 begin
089 Result := ScriptDlgPages(CurPage, False);
090 end;
091
092 function BackButtonClick(CurPage: Integer): Boolean;
093 begin
094 Result := True;//ScriptDlgPages(CurPage, True);
095 end;
096
097 function HasHtmlHelp(): Boolean;
098 begin
099 { HHCTRL.OCX GUID }
100 Result := RegValueExists(HKCR, 'CLSID\{4662DAB0-D393-11D0-9A56-
00C04FB68B66}\InprocServer32', '');
101 end;
102
103 function HasNoHtmlHelp(): Boolean;
104 begin
105 Result := not HasHtmlHelp;
106 end;
Jika sudah selesai silahkan compile (CTRL+F9) skrip inno setup Anda, dan ingat skrip diatas hanya potongan skrip inno setup. Contoh skrip yang lengkap bisa Anda lihat disini dan sini.
Jika kita mencoba memasukkan informasi registrasi yang salah, maka akan tampil pesan berikut :
[Files];file klien-1.iky dihasilkan oleh tool IKGSource: klien-1.iky; DestDir: {tmp}; Flags: ignoreversionSource: ISID.dll; DestDir: {sys}; Flags: ignoreversion
[Code]function ValidateSerialNumber(InnoKeyFile, User, Orgn, ProdCode, HDD, MAC, PrivateKey, Serial: String): Boolean;external 'ValidateSerialNumber@files:ISID.dll stdcall';
const INNO_KEY = 'klien-1.iky';
varUserPage : TInputQueryWizardPage;UserValues : TArrayOfString;
procedure InitializeWizard();begin
{ create the custom page } UserPage := CreateInputQueryPage(wpInfoBefore, 'Informasi Registrasi', 'Anda memerlukan user yang valid agar bisa melanjutkan proses instalasi',
'Masukkan informasi registrasi (case sensitive), kemudian klik tombol Lanjut >.');
UserPage.Add('Registered Name:', False);UserPage.Add('Registered Company:', False);UserPage.Add('Registration Code:', False);UserPage.Add('Private Key:', False);
{ Set default values } SetArrayLength(UserValues, 4); RegQueryStringValue(HKLM, 'Software\Microsoft\Windows\CurrentVersion', 'RegisteredOwner', UserValues[0]); RegQueryStringValue(HKLM, 'Software\Microsoft\Windows\CurrentVersion', 'RegisteredOrganization', UserValues[1]); if (UserValues[0] = '') and (UserValues[1] = '') then begin RegQueryStringValue(HKCU, 'Software\Microsoft\MS Setup (ACME)\User Info', 'DefName', UserValues[0]); RegQueryStringValue(HKCU, 'Software\Microsoft\MS Setup (ACME)\User Info', 'DefCompany', UserValues[1]); end;
{ Try to find the settings that were stored last time (also see below). } UserPage.Values[0] := GetPreviousData('Name', UserValues[0]); UserPage.Values[1] := GetPreviousData('Company', UserValues[1]); UserPage.Values[2] := GetPreviousData('Unlock', UserValues[2]); UserPage.Values[3] := GetPreviousData('Private', UserValues[3]);
end;
procedure RegisterPreviousData(PreviousDataKey: Integer);begin { Store the settings so we can restore them next time } SetPreviousData(PreviousDataKey, 'Name', UserPage.Values[0]); SetPreviousData(PreviousDataKey, 'Company', UserPage.Values[1]);
SetPreviousData(PreviousDataKey, 'Unlock', UserPage.Values[2]); SetPreviousData(PreviousDataKey, 'Private', UserPage.Values[3]);end;
function ScriptDlgPages(CurPage: Integer; BackClicked: Boolean): Boolean;var ExpPath: String;
beginResult := True;
if (CurPage = UserPage.ID) thenbegin
ExtractTemporaryFile(INNO_KEY); { the public key file }
ExpPath := ExpandConstant('{tmp}\' + INNO_KEY);
Result := False;
UserValues[0] := UserPage.Values[0];UserValues[1] := UserPage.Values[1];UserValues[2] := UserPage.Values[2];UserValues[3] := UserPage.Values[3];
if (UserValues[0] = '') or (UserValues[1] = '') or (UserValues[2] = '') or (UserValues[3] = '') then
MsgBox('No fields can be blank !', mbError, MB_OK)elsebegin
Result := ValidateSerialNumber(ExpPath, UserValues[0], UserValues[1], '', '', '', UserValues[3], UserValues[2]);
if (not Result) thenMsgBox('Invalid Entry !', mbError, MB_OK);
endend
end;
function NextButtonClick(CurPage: Integer): Boolean;begin Result := ScriptDlgPages(CurPage, False);end;
function BackButtonClick(CurPage: Integer): Boolean;begin Result := True;//ScriptDlgPages(CurPage, True);end;
function HasHtmlHelp(): Boolean;begin
{ HHCTRL.OCX GUID }Result := RegValueExists(HKCR, 'CLSID\{4662DAB0-D393-11D0-9A56-
00C04FB68B66}\InprocServer32', '');end;
function HasNoHtmlHelp(): Boolean;
Memanfaatkan library IKG untuk membuat aktivasi + keygen
May 31, 2010 Admin Leave a comment Go to comments
Sebelumnya saya ucapkan terima kasih kepada salah seorang pengunjung blog saya yang sudah memberikan koreksi pada salah satu artikel saya yang berjudul Menambahkan serial number pada paket instalasi (inno setup).
Karena adanya koreksi itu saya jadi punya ide untuk menulis artikel ini
Oke kita langsung saja, file library yang akan kita gunakan disini adalah IKGCG.DLL (untuk generate serial number) dan ISID.DLL (untuk melakukan validasi serial number)
Langkah awal sebelum kita masuk ke bagian kode program adalah membuat file Inno Key yang berfungsi sebagai public key yang akan kita distribusikan bersama aplikasi.
Bagaimana cara membuat file Inno Key ini, Anda bisa merujuk ke artikel saya yang berjudul Menambahkan serial number pada paket instalasi (inno setup).
1. Membuat Form KeygenBuat project baru kemudian desain tampilan seperti gambar berikut :
download file IKGCG.rar, ekstrak dan copykan ke folder project. Berikut adalah source code lengkapnya :
view sourceprint ? 01 Option Explicit
02
03
Private Declare Function GenerateSerialNumber Lib "IKGCG.DLL" (ByVal innoKeyFile As String, ByVal User As String, ByVal Orgn As String, ByVal ProdCode As String, ByVal HDD As String, ByVal MAC As String, ByVal privateKey As String, ByVal UnlockCode As String) As Boolean
04
05 Private Function getSerialNumber(ByVal registeredName As String, ByVal organisation As String) As String
06 Dim innoKeyFile As String
07 Dim privateKey As String
08 Dim serialNumber As String * 1209 Dim ret As Boolean
10
11 innoKeyFile = App.Path & "\key.iky"
12 privateKey = "3D07966E-9AB4-4EBE-BF41-91C2D6611AC0" 'nilai ini didapat pada saat pembuatan file inno key
13
14 ret = GenerateSerialNumber(innoKeyFile, registeredName, organisation, "", "", "", privateKey, serialNumber)
15 getSerialNumber = serialNumber
16 End Function
17
18 Private Sub cmdGenerate_Click()
19 txtSerialNumber.Text = getSerialNumber(txtRegisteredName.Text, txtOrganisation.Text)
20 End Sub
Hal penting yang perlu diperhatikan pada source code diatas adalah nilai variabel privateKey, nilai ini harus sama dengan nilai PRIVATE KEY pada saat membuat file Inno Key
2. Membuat Form Aktivasi
Setelah kita selesai mendesain tampilan seperti gambar diatas download file ISID.rar, ekstrak dan copykan ke folder project. Berikut kode lengkapnya :
view sourceprint ? 01 Option Explicit
02
03
Private Declare Function ValidateSerialNumber Lib "ISID.DLL" (ByVal innoKeyFile As String, ByVal User As String, ByVal Orgn As String, ByVal ProdCode As String, ByVal HDD As String, ByVal MAC As String, ByVal privateKey As String, ByVal Serial As String) As Boolean
04
05 Public Function isValidSerialNumber(ByVal registeredName As String, ByVal organisation As String, ByVal serialNumber As String) As Boolean
06 Dim innoKeyFile As String
07 Dim privateKey As String
08 Dim ret As Boolean
09
10 innoKeyFile = App.Path & "\key.iky"
11 privateKey = "3D07966E-9AB4-4EBE-BF41-91C2D6611AC0" 'nilai ini didapat pada saat pembuatan file inno key
12
13 isValidSerialNumber = ValidateSerialNumber(innoKeyFile, registeredName, organisation, "", "", "", privateKey, serialNumber)
14 End Function
15
16 Public Sub Main()17 Dim registeredName As String18 Dim organisation As String19 Dim serialNumber As String
20
21 registeredName = GetSetting("MyApp", "Aktivasi", "RegisteredName", "")
22 organisation = GetSetting("MyApp", "Aktivasi", "Organisation", "")
23 serialNumber = GetSetting("MyApp", "Aktivasi", "SerialNumber", "")
24
25 If isValidSerialNumber(registeredName, organisation, serialNumber) Then
26 'TODO : tampilkan form utama
27 Else
28 frmAktivasi.Show29 End If
30 End Sub
Selanjutnya tinggal pangil di form aktivasi seperti berikut :
view sourceprint ? 01 Option Explicit
02
03 Private Sub cmdOk_Click()
04 If isValidSerialNumber(txtRegisteredName.Text, txtOrganisation.Text, txtSerialNumber.Text) Then
05 Call SaveSetting("MyApp", "Aktivasi", "RegisteredName", txtRegisteredName.Text)
06 Call SaveSetting("MyApp", "Aktivasi", "Organisation", txtOrganisation.Text)
07 Call SaveSetting("MyApp", "Aktivasi", "SerialNumber", txtSerialNumber.Text)
08
09 MsgBox "Aktivasi berhasil", vbInformation, "Informasi"
10
11 'TODO : tampilkan form utama
12
13 Else
14 MsgBox "Aktivasi gagal", vbExclamation, "Peringatan"15 End If
16 End Sub
17
18 Private Sub Command1_Click()19 Unload Me
Option Explicit
Private Declare Function GenerateSerialNumber Lib "IKGCG.DLL" (ByVal innoKeyFile As String, ByVal User As String, ByVal Orgn As String, ByVal ProdCode As String, ByVal HDD As String, ByVal MAC As String, ByVal privateKey As String, ByVal UnlockCode As String) As Boolean
Private Function getSerialNumber(ByVal registeredName As String, ByVal organisation As String) As String Dim innoKeyFile As String Dim privateKey As String Dim serialNumber As String * 12 Dim ret As Boolean
innoKeyFile = App.Path & "\key.iky" privateKey = "3D07966E-9AB4-4EBE-BF41-91C2D6611AC0" 'nilai ini didapat pada saat pembuatan file inno key
ret = GenerateSerialNumber(innoKeyFile, registeredName, organisation, "", "", "", privateKey, serialNumber) getSerialNumber = serialNumberEnd Function
Private Sub cmdGenerate_Click() txtSerialNumber.Text = getSerialNumber(txtRegisteredName.Text, txtOrganisation.Text)End Sub
--------------------------------------------------------------------
Option Explicit
Private Declare Function ValidateSerialNumber Lib "ISID.DLL" (ByVal innoKeyFile As String, ByVal User As String, ByVal Orgn As String, ByVal ProdCode As String, ByVal HDD As String, ByVal MAC As String, ByVal privateKey As String, ByVal Serial As String) As Boolean
Public Function isValidSerialNumber(ByVal registeredName As String, ByVal organisation As String, ByVal serialNumber As String) As Boolean Dim innoKeyFile As String Dim privateKey As String Dim ret As Boolean
innoKeyFile = App.Path & "\key.iky" privateKey = "3D07966E-9AB4-4EBE-BF41-91C2D6611AC0" 'nilai ini didapat pada saat pembuatan file inno key
isValidSerialNumber = ValidateSerialNumber(innoKeyFile, registeredName, organisation, "", "", "", privateKey, serialNumber)End Function
Public Sub Main() Dim registeredName As String Dim organisation As String
Dim serialNumber As String
registeredName = GetSetting("MyApp", "Aktivasi", "RegisteredName", "") organisation = GetSetting("MyApp", "Aktivasi", "Organisation", "") serialNumber = GetSetting("MyApp", "Aktivasi", "SerialNumber", "")
If isValidSerialNumber(registeredName, organisation, serialNumber) Then 'TODO : tampilkan form utama Else frmAktivasi.Show End IfEnd Sub
----------------------------------------------------------------------
Option Explicit
Private Sub cmdOk_Click() If isValidSerialNumber(txtRegisteredName.Text, txtOrganisation.Text, txtSerialNumber.Text) Then Call SaveSetting("MyApp", "Aktivasi", "RegisteredName", txtRegisteredName.Text) Call SaveSetting("MyApp", "Aktivasi", "Organisation", txtOrganisation.Text) Call SaveSetting("MyApp", "Aktivasi", "SerialNumber", txtSerialNumber.Text)
MsgBox "Aktivasi berhasil", vbInformation, "Informasi"
'TODO : tampilkan form utama
Else MsgBox "Aktivasi gagal", vbExclamation, "Peringatan" End IfEnd Sub
Private Sub Command1_Click() Unload MeEnd Sub