tponguard

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
digital_agels
Üye
Mesajlar: 114
Kayıt: 20 Ağu 2004 01:08

tponguard

Mesaj gönderen digital_agels »

merhaba ben programa öyle bi koruma koymam lazımki hem başka bilgisayarda çalışmıcak hemde günü bittiğinde çalışmıcak şu şekilde tponguardda vardır makinanın system, user, network , harddisk bilgilerine göre serial üretmek istiyorum bu şekilde başka bilgisayarda çalışmıcak ama program açılışta makinanın işde sistem, harddisk, network bilgilerine göre machineıd yi vericek bende ona göre serial vericem kısaca program açılışta bir edit1.text de machineıd yi göstercek bana kopyalayıp yollucak bende o numaraya göre ona serial vercem böylece diğer makinalarda çalışmıcak ayrıca birde programı mesela gün kısıstlaması koymak istiyorum mesela 3 aylık 2 koruma olucak hem machineıd hemde zamanlı günü bittiğinde çalışmıcak bunu tponguardda nasıl yapabiliriz ? detaylı anlatabilirseniz sevinirim
Kurallara Uyalım Uymayanları Uyduralım .


Resim
Kullanıcı avatarı
vedatkaba
Kıdemli Üye
Mesajlar: 866
Kayıt: 06 Oca 2004 06:50
Konum: DARICA/GEBZE

Mesaj gönderen vedatkaba »

TOgMakeKeys : Sürüm kodunu oluşturmak veya kontrol etmek için gerekli prosedürler topluluğunu barındırır.
TOgMakeCodes : Sürüm veya benzersiz makine kodu gibi bilgilerden programın çalışması için gerekli kodu üretecek olan bileşendir.
TOgDateCode : Programın belli bir tarihe kadar çalışmasına izin vermeyi kontrol edecek bileşendir.
TOgDaysCode : Programın belli bir gün kadar çalışmasına izin ve
TOgNetCode : Programın belli bir client kullanıcı sayısı kadar çalışmasına izin vermeyi kontrol edecek bileşendir.
TOgRegistrationCode : Programın kayıt yaptırılmadan çalışıp çalışmamasını kontrol edecek bileşendir.
TOgSerialNumberCode : Programın kayıt yaptırılmadan çalışıp çalışmamasını kontrol edecek bileşendir.
TOgSpecialCode : Programcının kendi istediği gibi sınırlamalar getirmesini sağlayan bileşendir
TOgUsageCode : Programın belli bir sayıda çalışmasını sağlayacak bileşendir.
TOgProtectExe : Programın exe sini kontrol ederek, üzerinde değişiklikler yapıldıysa bunu anlamaya yarayan bileşendir

Tüm bileşenlerde ana mantık, programa gömülü bir dizi anahtar sayı, programın çalıştığı bilgisayarın özellikleri ile elde edilmiş bir sayı vb.. gibi değerleri şifrelemek, program satıcısının sağladığı şifre ile karşılaştırmak ve eğer geçersiz ise programı sonlandırmaktır.
Bileşenlerin işlevlerine göre ççözeceğini umud ediyorum.Geçenlerde bende biraz üzerine düştüm birşeyler yaptım ama tam tatmin edemedim ve ara verdim biraz kaynak neyin bulmak için,forumdada ararsan detaylı değil ama güzel bilgiler mevcut..Mantığını tam olarak bende kavrayamadım çünkü fazla zamanım yoktu ama hep beraber el atarsak faydalı bir işe imza atarız gibime geliyor.Kolay gelsin..
***********************************
Kamil odur ki; koya dünyada bir eser,
Eseri olmayanın, yerinde yeller eser.

***********************************
Kullanıcı avatarı
mege
Admin
Mesajlar: 2360
Kayıt: 05 Şub 2004 04:32
Konum: Beşiktaş
İletişim:

Mesaj gönderen mege »

üstteki yazını devamı :P ah bi bitse :? :D

bunu programınızın splash screenine atım, eğer register.dat ta geçerli şifreyi bulursa splashı kapatıp geçer, yok bulamazsa size sorar.

Kod: Tümünü seç

unit exam1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Spin, ExtCtrls,
  OnGuard,// OnGuard kütüphanesi
          // OnGuard Liblary
  OgUtil; // OnGuard için çeşitli fonksiyonlar
          // Some functions
type
  TForm1 = class(TForm)
    OgMakeKeys1: TOgMakeKeys;
    SpinEditSerialNo: TSpinEdit;
    Label1: TLabel;
    EditMachineUniqueNumber: TEdit;
    Label2: TLabel;
    Panel1: TPanel;
    Label4: TLabel;
    ButtonDemo: TButton;
    ButtonSatinAl: TButton;
    EditSifre: TEdit;
    Label3: TLabel;
    Bevel1: TBevel;
    Bevel2: TBevel;
    Label5: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure ButtonSatinAlClick(Sender: TObject);
    procedure ButtonDemoClick(Sender: TObject);
  private
    procedure GetRegistrationInformation (var ReleaseCodeString: string; var SerialNumber : longint);
    function  IsReleaseCodeValid (ReleaseCodeString: string; const SerialNumber : longint) : boolean;
    procedure SaveRegistrationInformation (const ReleaseCodeString: string; const SerialNumber : longint);
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

const
  Key : TKey = ($3E,$C9,$18,$78,$7D,$AC,$AF,$D3,$64,$E0,$BC,$0A,$43,$68,$2C,$F2);
  RegistrationFile  = 'Register.dat';
var
  MachineModifier : longint;
  RegistrationInfo : TStringList;


implementation

{$R *.dfm}


procedure TForm1.FormCreate(Sender: TObject);
var StoredReleaseCodeString : string;
    StoredSerialNumber      : longint;
begin
 MachineModifier := ABS(CreateMachineID([midUser, midSystem, {midNetwork,} midDrives]));
 GetRegistrationInformation(StoredReleaseCodeString,StoredSerialNumber);

 if IsReleaseCodeValid(StoredReleaseCodeString,StoredSerialNumber) then
  begin
     Showmessage('Kayıt daha önce yapılmış program tam özellikleri ile başlatılabilir.');
     // Splash formu kapatın, ve programı başlatın ...
  end
 else
  begin
     // Değerleri editlere aktar.
     EditMachineUniqueNumber.Text := inttostr(MachineModifier);
     SpinEditSerialNo.Value := StoredSerialNumber;
     EditSifre.Text := StoredReleaseCodeString;
  end;
end;

procedure TForm1.ButtonSatinAlClick(Sender: TObject);
begin
 if IsReleaseCodeValid(EditSifre.Text,SpinEditSerialNo.Value) then
  begin
     // Kabul edilen kodu kaydet...
     SaveRegistrationInformation(EditSifre.Text,SpinEditSerialNo.Value);
     // Splash formu kapatın, ve programı başlatın ...
     Showmessage('Kayıt şimdi yapıldı program tam özellikleri ile başlatılabilir.');
  end
 else
  begin
     // Kabul edilmeyen değerleri editlere aktar.
     EditMachineUniqueNumber.Text := inttostr(MachineModifier);
     SpinEditSerialNo.Value := SpinEditSerialNo.Value;
     EditSifre.Text := EditSifre.Text;
     Showmessage('Yanlış Şifre, Tekrar deneyiniz.');
  end;

end;

procedure TForm1.ButtonDemoClick(Sender: TObject);
begin
     // Splash formu kapatın, ve programı başlatın ...
     Showmessage('Demo modda programınızı başlatın.');
end;



(*
        **********************************
              Ara Fonksiyonlar
                  Utility
        **********************************
*)


// bilgisayar tarafından üretilen ve register dosyasından okunan şifreleri karşılaştırır,
function TForm1.IsReleaseCodeValid (ReleaseCodeString: string; const SerialNumber : longint) : boolean;
var
  CalculatedReleaseCode : TCode;
  ProgramKey : TKey;
begin
  // Kod içerisindeki boşlukları kaldırır
  while pos(' ', ReleaseCodeString) > 0 do
    System.Delete(ReleaseCodeString, pos(' ', ReleaseCodeString), 1);

  ProgramKey:= Key;
  ApplyModifierToKeyPrim(MachineModifier, ProgramKey, sizeof(ProgramKey));
  // Makina tekil numarası, seri no, tarih verilerini kullanarak
  // release kodu üreten fonksiyon
  InitSerialNumberCode(ProgramKey, SerialNumber, 0, CalculatedReleaseCode);

  // üretilen ve okunan kodların karşılaştırılması
  result := AnsiUpperCase(ReleaseCodeString) = AnsiUpperCase(BufferToHex(CalculatedReleaseCode, sizeof(CalculatedReleaseCode)));
end;

// Kullanıcıya gönderilmiş olan register dosyasını açar ve değişkenlere atar.
procedure TForm1.GetRegistrationInformation (var ReleaseCodeString: string; var SerialNumber : longint);
begin
  if FileExists(RegistrationFile) then begin
    RegistrationInfo := TStringList.Create;
    RegistrationInfo.LoadFromFile(RegistrationFile);
    SerialNumber := StrToInt(RegistrationInfo[0]);
    ReleaseCodeString := RegistrationInfo[1];
    RegistrationInfo.Free;
  end else begin
    SerialNumber := 0;
    ReleaseCodeString := '';
  end;
end;

procedure TForm1.SaveRegistrationInformation (const ReleaseCodeString: string; const SerialNumber : longint);
begin
  RegistrationInfo := TStringList.Create;
  RegistrationInfo.Add(format('%d',[SerialNumber]));
  RegistrationInfo.Add(ANSIUpperCase(ReleaseCodeString));
  RegistrationInfo.SaveToFile(RegistrationFile);
  RegistrationInfo.Free;
end;



end.

buda sizde kalacak key genereatörünüz

Kod: Tümünü seç

unit Unitgenerator;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, Spin,
  OnGuard, // Onguard functions
  OgUtil; // OnGuard için çeşitli fonksiyonlar;

type
  TForm1 = class(TForm)
    SpinEditSerialNo: TSpinEdit;
    Label1: TLabel;
    Label2: TLabel;
    EditMachineUniqueNumber: TEdit;
    Panel1: TPanel;
    Label3: TLabel;
    ButtonSatinAl: TButton;
    EditSifre: TEdit;
    Bevel2: TBevel;
    Bevel1: TBevel;
    OgMakeKeys1: TOgMakeKeys;
    Label4: TLabel;
    Label5: TLabel;
    procedure ButtonSatinAlClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.ButtonSatinAlClick(Sender: TObject);
Const
  Key : TKey = ($3E,$C9,$18,$78,$7D,$AC,$AF,$D3,$64,$E0,$BC,$0A,$43,$68,$2C,$F2);
var
 ProgramKey : TKey;
 MachineModifier : longint;
 SerialNumber : longint;
 CalculatedReleaseCode : TCode;
begin
  ProgramKey := Key;
  MachineModifier := StrtoInt64(EditMachineUniqueNumber.Text);
  SerialNumber    := SpinEditSerialNo.Value;
  ApplyModifierToKeyPrim(MachineModifier, ProgramKey, sizeof(ProgramKey));
  InitSerialNumberCode(ProgramKey, SerialNumber, 0, CalculatedReleaseCode);
  EditSifre.Text:= AnsiUpperCase(BufferToHex(CalculatedReleaseCode, sizeof(CalculatedReleaseCode)));
end;

end.
.-.-.-.-.-.-.-. ^_^
digital_agels
Üye
Mesajlar: 114
Kayıt: 20 Ağu 2004 01:08

Mesaj gönderen digital_agels »

tşk..
Kurallara Uyalım Uymayanları Uyduralım .


Resim
mertcenk
Üye
Mesajlar: 71
Kayıt: 03 Tem 2003 05:46

hata oluşuyor

Mesaj gönderen mertcenk »

EditSifre.Text:= AnsiUpperCase(BufferToHex(CalculatedReleaseCode, sizeof

bu sattırda hata veriyor...

undeclerate idetifer ...
Kullanıcı avatarı
vedatkaba
Kıdemli Üye
Mesajlar: 866
Kayıt: 06 Oca 2004 06:50
Konum: DARICA/GEBZE

Mesaj gönderen vedatkaba »

Çok iyi kontrol et yadıklarını bende hiç bir şekilde hata vermedi.zannedersem uses kısmına gerekli uniti eklemedin.kontrol et.
***********************************
Kamil odur ki; koya dünyada bir eser,
Eseri olmayanın, yerinde yeller eser.

***********************************
mertcenk
Üye
Mesajlar: 71
Kayıt: 03 Tem 2003 05:46

buldum

Mesaj gönderen mertcenk »

OgUtil unit ini yazmamışım :) teşekkürler...

buarada bu şifreyi daha çetrefilli bi hale nasıl getirebilirim...burda sadece rakamlarla bir şifre oluşuyor..bu onguard ı tam çözemedim...
Cevapla