Les Illégaux: une base de données securisante. Est ce possible?

Résolu
cs_new2000 Messages postés 23 Date d'inscription mardi 1 août 2006 Statut Membre Dernière intervention 5 juin 2008 - 27 mai 2008 à 16:48
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 - 27 mai 2008 à 19:05
Salut!


J'ai un problème de securité que j'arrive à resoudre. Mais pas du tout bien comme je le pense...
S'il vous plait, j'aimerai partager avec vous mes idées.
Je m'explique:
J'ai un programme déjà fait. C'est juste la facturation travaillant avec du Stock en même temps.
1) Pour une première securité, voilà ce que j'avais pensé faire dans l'évenement BeforeInsert
de mon composant AdoTable1:



If Adotable1.RecordCount > 15 then begin
ShowMessage('version demonstrative...contactez le Programmeur!');
Abort;
Exit;


Ben, ces codes serviront surement quand le programme est distribué pour une question demonstrative.

2) Et pour ma deuxième securité (c'est ici où je n'arrive pas à gerer ça):
si le programme sera installé definivement quelque part. Comment le proteger contre des copies
illégales?
Voilà ce que je tente de faire et ça ne marche pas comme il faut:
J'ai avec moi une Base de données toute simple dans mon PenDrive (elle peut être vide...peu importe).

Et alors, le programme devra demarrer normalement à condition que mon PenDrive soit connecté à un
des ports USB. Mais alors, qu'est ce qui s'passe si le dit PenDrive ne pas connecté à mon ordinateur?
au lancement de l'application, ce message apparait:

"Project Project1.exe raised exception class EOleException with message 'F:\MaBase.mdb' ce n'est pas
chemin valide..."

C'est un très bon message logiquement correcte.
Mais il est très inconfortable cette demarche, parce que l'"illegal" vera le chemin et pourra s'inspirer de créer vraisemblablement une Base de données pareillle. Et peu tenter sa chance pour le faire bien marcher.
Ma préocupation est faire de manière que ce message n'apparaisse pas comme tel. Mais qu'il y est juste un message disant par exemple: "vous n'avez pas de permission".
Au final, même si le programme se fait copier...mais il ne peut marcher!


Developper est une passion,


New2000

3 réponses

dominique.stock Messages postés 436 Date d'inscription vendredi 7 novembre 2003 Statut Membre Dernière intervention 8 octobre 2008 7
27 mai 2008 à 16:52
Bonjour,
Tu dois utiliser
 try
/ ton code d'ouverture de la base de données/
except on e:exception do 
      showmessage('toto');
end;

Dom
3
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
27 mai 2008 à 18:20
Salut,

c'est peine perdue ... toute protection est contournable
le mieux étant de faire une application de démo (avec limitation ... portion de code non implémenté donc pas de risque de le craquer) et d'en faire une pour ceux qui l'auront acheté

 
@+
Cirec

<hr siz="" />
3
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
27 mai 2008 à 19:05
Cirec a raison

une fois le programme fini, insere des directives de compilation comme suis :

unit Unit1;

{.$DEFINE VCOMPLETE} { directive désactivée }

{$IFDEF VCOMPLETE}
  {$MESSAGE warn 'Vous compilez ce programme en version complete!'}
{$ELSE}
  {$MESSAGE warn 'Vous compilez ce programme en version Demo!'}
{$ENDIF}

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, StdCtrls;

type
  TForm1 = class(TForm)
    MainMenu1: TMainMenu;
    Fichier1: TMenuItem;
    Ouvrir1: TMenuItem;
    Fermer1: TMenuItem;
    Sauvegarder1: TMenuItem;
    SaveDialog1: TSaveDialog;
    OpenDialog1: TOpenDialog;
    Memo1: TMemo;
    procedure FormCreate(Sender: TObject);
    procedure Sauvegarder1Click(Sender: TObject);
  private
    { Déclarations privées }
  public
    {$IFNDEF VCOMPLETE} {code pour version Demo}
    procedure WarnDemo(const Msg: String);
    {$ENDIF}
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

const
  CRLF = #13#10;

procedure TForm1.FormCreate(Sender: TObject);
begin
  {$IFDEF VCOMPLETE}{ code version complete }
  caption := 'Programme v1.0';
  {$ELSE}{ code version demo }
  caption := 'Programme v1.0 (DEMO)';
  WarnDemo('Ce programme est une version Demo,'+CRLF+
           'certaines actions ne seront donc pas disponible.');
  {$ENDIF}
end;

procedure TForm1.Sauvegarder1Click(Sender: TObject);
begin
  {$IFDEF VCOMPLETE}{ code version complete }
  if SaveDialog1.Execute then
    Memo1.Lines.SaveToFile(SaveDialog1.FileName);
  {$ELSE}{ code version demo }
  WarnDemo('Sauvegarde indisponible en version Demo.');
  {$ENDIF}
end;

{$IFNDEF VCOMPLETE}{ code version demo }
procedure TForm1.WarnDemo(const Msg: String);
begin
  MessageDlg(Msg, mtInformation, [mbOk], 0);
end;
{$ENDIF}

end.

Compilation en mode VCOMPLETE = version complete, le code demo est ignoré et non inclus.
Compilation sans mode VCOMPLETE = version demo, le code complete est ignoré et non inclus.

cela genere donc 2 executables different.

<hr size="2" width="100%" />
3
Rejoignez-nous