Jeg har engang set en artikel på en af de store delphi sites, der omhandler hvordan man beskytter sine programmer, med en kode som brugeren skal have fra producentens hjemmeside...altså en form for registring af programmet, så producenten kan se hvor mange der bruger deres program, det så jeg en tutirial om hvordan man lavede, men fik smidt linket væk..
nogle der har en ide til hvordan man gør dette? eller har nogle gode links?
Der er sikkert utoligt mange måde at gøre det på, men her et forslag til løsningsplan: 1. fastlæg en \"simpel\" kodestrategi - så også du kan huske den, hvis du bliver vækket midt om natten! 2. på nettet har du lavet noget asp / javascript, som dekoder programmets kode - f.eks. når programmet starter, så oplyser det den kode, der skal dekodes (via nettet) - åbningskoden taster brugeren så ind i dit program, her checker du om det er ok, og \"markerer\", at nu er programmet køreklart !
jeg har leget lidt med tekniken, men pt. skal brugeren ringe til mig for at få en åbningskode, der matcher med programmets kode... den skal jeg snart ha\' lagt ud på nettet!
som det fremgår, er der flere ting, der skal afklares inden det falder på plads ...
type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); private public { Public declarations } end;
var Form1: TForm1;
implementation
{$R *.dfm}
const GUID : String = \'{300C7CF3-98E9-4EBD-B7AC-8D3AC93FF4A9}\';//Find på din egen tryk Shift + Ctrl + g EvalTid = 10; //10 dage type TMyDataStruct = packed record Nonsens : ShortString; InstDate : TDateTime; end;
procedure TForm1.FormCreate(Sender: TObject); function DayDiff(Beginning: TDateTime; Ending:TDateTime): integer; begin Result := Trunc(Ending -Beginning); end; var i : Integer; MyDataStruct : TMyDataStruct; Registry : TRegistry;
begin Registry := TRegistry.Create; Randomize;
with Registry do begin RootKey := HKEY_CLASSES_ROOT; OPenKey(\'CLSID\', false); if not OPenKey (GUID, false) then begin OpenKey(GUID, true); i := Random(255); repeat MyDataStruct.Nonsens[i] := chr(Random(233) + 32); dec(i); until i = 1; MyDataStruct.InstDate := Now; OpenKey (\'InprocServer32\',true); WriteBinaryData(\'\',MyDataStruct, SizeOf(MyDataStruct)); Destroy; end else begin OpenKey(GUID, false); OpenKey (\'InprocServer32\',false); ReadBinaryData(\'\',MyDataStruct, SizeOf(MyDataStruct)); i := DayDiff(NOW, MyDataStruct.InstDate);
if i < 0 then begin MessageDlg(\'Du fusker med datoen din nar !!!!!!\', mtError, [mbOk], 0); Application.Terminate; end;
if i > EvalTid then begin MessageDlg(\'Game over !!!!!!\' + #13 + \'Nu skal du købe !!!!\', mtError, [mbOk], 0); Application.Terminate; end;
i := EvalTid - i; MessageDlg(\'Du har nu \'+IntToStr(i)+\' Dage tilbage !!!!!!\', mtError, [mbOk], 0); Destroy; end; end; end; end.
const GUID : String = \'{300C7CF3-98E9-4EBD-B7AC-8D3AC93FF4A9}\';//Find på din egen tryk Shift + Ctrl + g EvalTid = 10; //10 dage type TMyDataStruct = packed record Nonsens : ShortString; InstDate : TDateTime; end;
for iIdx := 1 to iSize do begin uiCurrByte := Byte(ptrBuffer^); uiCurrByte := uiCurrByte xor uiLastByte; uiCurrByte := not uiCurrByte; uiCurrByte := uiCurrByte xor uiInit; uiCurrByte := ((uiCurrByte and $0F) shl 4) or ((uiCurrByte and $F0) shr 4); uiLastByte := uiCurrByte; Char(ptrBuffer^) := Char(uiCurrByte); inc(pChar(ptrBuffer)); end; end;
procedure TForm1.FastDeCrypt(ptrBuffer: Pointer; iSize: Integer; uiInit: Byte); var iIdx : Integer; uiCurrByte : Byte; uiLastByte : Byte; begin uiLastByte := 0; for iIdx := 1 to iSize do begin uiCurrByte := Byte(ptrBuffer^); uiCurrByte := ((uiCurrByte and $0F) shl 4) or ((uiCurrByte and $F0) shr 4); uiCurrByte := uiCurrByte xor uiInit; uiCurrByte := not uiCurrByte; uiCurrByte := uiCurrByte xor uiLastByte; uiLastByte := Byte(ptrBuffer^); Char(ptrBuffer^) := char(uiCurrByte); inc(pChar(ptrBuffer)); end; end;
procedure TForm1.FormCreate(Sender: TObject); function DayDiff(Beginning: TDateTime; Ending:TDateTime): integer; begin Result := Trunc(Ending -Beginning); end; var i : Integer; MyDataStruct : TMyDataStruct; Registry : TRegistry;
begin Registry := TRegistry.Create; Randomize;
with Registry do begin RootKey := HKEY_CLASSES_ROOT; OPenKey(\'CLSID\', false); if not OPenKey (GUID, false) then begin OpenKey(GUID, true); i := Random(255); repeat MyDataStruct.Nonsens[i] := chr(Random(233) + 32); dec(i); until i = 1; MyDataStruct.InstDate := Now; MyDataStruct.InstDate := MyDataStruct.InstDate + Integer(MyDataStruct.Nonsens[Integer(MyDataStruct.Nonsens[15])]); FastCrypt(@MyDataStruct,SizeOf(TMyDataStruct)); OpenKey (\'InprocServer32\',true);
WriteBinaryData(\'\',MyDataStruct, SizeOf(MyDataStruct)); Destroy; end else begin OpenKey(GUID, false); OpenKey (\'InprocServer32\',false); ReadBinaryData(\'\',MyDataStruct, SizeOf(MyDataStruct)); FastDeCrypt(@MyDataStruct,SizeOf(TMyDataStruct));
MyDataStruct.InstDate := MyDataStruct.InstDate - Integer(MyDataStruct.Nonsens[Integer(MyDataStruct.Nonsens[15])]); i := DayDiff(NOW, MyDataStruct.InstDate);
if i < 0 then begin MessageDlg(\'Du fusker med datoen din nar !!!!!!\', mtError, [mbOk], 0); Application.Terminate; end;
if i > EvalTid then begin MessageDlg(\'Game over !!!!!!\' + #13 + \'Nu skal du købe !!!!\', mtError, [mbOk], 0); Application.Terminate; end;
i := EvalTid - i; MessageDlg(\'Du har nu \'+IntToStr(i)+\' Dage tilbage !!!!!!\', mtError, [mbOk], 0); Destroy; end; end; end; end.
hehe jens, det er da vist en rimlig advanceret kode
Lidt spørgesmål
Hvad gør denne kode præsist?GUID : String = \'{300C7CF3-98E9-4EBD-B7AC-8D3AC93FF4A9}\';//Find på din egen tryk Shift + Ctrl + g hvad skal jeg gøre her?
Og hvordan kan jeg gøre følgende
Jeg har en mail form der sender brugeren en email, men der skal der jo være en kode man skal indtaste et sted
Det her kode laver til program om til Shareware .... Jeg gemmer en nøgle i reg. et sted hvor den er godt skjult .... Nemlig sammen med alle de Class ID\'er der er registeret nede i reg.
Det jeg mener er du skal finde på dit eget \"GUID\" nummer, i stedet for \"MIT\", det gør du ved at trykke \"Shift + Ctrl + g\"
Det jeg har vist dig er den basale teknik til at lave sådan en shareware program ... Det er tænkt som inspiration til det endelige program ....
Jeg vil ikke lave programmet forr dig .. Du har så godt af at kunne lave etræsonoment .. Men inden for en halv time burde du have sådan en reg kode fætter i luften.
Jeg anbefaler højre tommerfinger til CTRL tasten i højre side af dit keyboard, ligeledes anbefaler jeg pege fingeren på højrehånd til at hold højre shift taste nede ... Så har du pegefingeren fri på venstrehånd til at trykke på g.
Det GUID nummer er forskelligt for hvert nyt projekt du bruger denne teknik i. Derfor skal du også skifte nummeret ud i det kode du har fra mig.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.