Membuat Serial Number Dan Aktivasinya

21
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 :

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;

beginResult := not HasHtmlHelp;

end;

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