counter



  • Hi leute

    Hab eine Frage und zwar ist es realisierbar einen Counter zu erstellen der von 0 an bis 30 Hochläuft und das Programm nicht mehr zu öffnen ist, Damit mein ich wenn man das Programm einmal öffnet das dan ne 1 erscheint. Beim schließen soll es aber gespeichert werden , und beim 2 mal öffnen das da dan ne 2 steht also das man es nur insgesamt 30 mal öffnen kann. Ist das realisierbar?


  • Mod

    Hallo

    realisierbar ist vom Prinzip her alles
    Die Frage ist: wie leicht ist es zu knacken

    zB Speichern des Counters in einer Ini - in der Reg

    MfG
    Klaus



  • hi

    Auf jeden fall mach ich mir keine sorgen wie schnell man es knacken kann , würd es aber mit einer ini Datei probieren , wenns geht auch mit der Registry.
    Hat jemand vieleicht ein beispiel wie ich das machen kann?

    MFG Fregger



  • Ini öffnen, Wert auslesen, Wenn Wert größer X Programm schließen sonst Wert hochzählen, in Ini speichern, fertig. :p



  • hi
    habs mal probiert aber es funktioniert nicht , es wird immer nur eine 1 in die ini geschrieben.

    #include <vcl.h>
    #pragma hdrstop
    
    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    #include <inifiles.hpp>
    TForm1 *Form1;
    
    TIniFile *Ini = new TIniFile(".\\counter.ini");
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
    	: TForm(Owner)
    {
    
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::FormShow(TObject *Sender)
    {
      static int i = Ini->ReadBool("Form","Counter","");
      {
        Ini->WriteBool("Form","Counter",(i++));
      }
    }
    //---------------------------------------------------------------------------
    

    Weiß jemand wo der Fehler ist?

    MFG Fregger



  • Fregger,

    ein Klassiker: versuchs mal mit ++i



  • hi

    Jetzt wird dan nur ne 2 in die ini geschrieben , sonst nix mehr. Ich will aber das es bei jedem öffnen eins hochzählt. Also beim 1 öffnen solls ne 1 in die ini schreiben und beim 2. öffnen ne 2 reinschreiben usw.

    So wie bei dem beispiel , bei jedem mausklick wird es hochgezählt:

    void __fastcall TForm1::FormMouseDown(TObject *Sender, TMouseButton Button,
          TShiftState Shift, int X, int Y)
    {
      static int i = 1;
      {
        Memo1->Lines->Append(i++);
      }
    }
    

    MFG Fregger


  • Mod

    Hallo

    kurze Rueckfrage
    du verwendest

    WriteBool

    MfG
    Klaus



  • ja verwende ich , weil ReadString und WriteString nicht funktionieren. Da bekomm ich ne Fehlermeldung



  • hi ,
    habs endlich hinbekommen!

    #include <vcl.h>
    #pragma hdrstop
    
    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    #include <inifiles.hpp>
    TForm1 *Form1;
    
    TIniFile *Ini = new TIniFile(".\\counter.ini");
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
    	: TForm(Owner)
    {
    
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::FormShow(TObject *Sender)
    {
      static int i = Ini->ReadInteger("Form","Counter",i);
      {
        Ini->WriteInteger("Form","Counter",(++i));
      }
    }
    //---------------------------------------------------------------------------
    

    und ein dank an dschensky für den Klassiker 😉

    MFG Fregger



  • hi,

    nochmal ich. Hab hier noch das gleiche mit der Registry gemacht und hab da noch 1 Frage. Wie mache ich das , wenn in der Registry die Zahl 30 steht das die Form sich nicht mehr öffnet und sich automatisch Schließt?

    //---------------------------------------------------------------------------
    #include <vcl.h>
    #include <vcl\registry.hpp>
    #pragma hdrstop
    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    
    const char * szMyKey = "Software\\Fregger\\Counter";
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::FormCreate(TObject *Sender)
    {
      TRegIniFile * R;
    
      R = new TRegIniFile ("");
      R->RootKey = HKEY_CURRENT_USER;
      R->OpenKey (szMyKey, true);
    
      static int i = R->ReadInteger ("Form", "Counter", i);
      {
        R->WriteInteger("Form","Counter",(++i));
      }
    
      Label1->Caption = R->ReadInteger ("Form", "Counter", i);
    
      R->Free ();
    }
    //---------------------------------------------------------------------------
    

    Hat jemand eine Idee?

    MFG Fregger



  • warum machst du hier Klammern?

    { 
        R->WriteInteger("Form","Counter",(++i)); 
      }
    

    und zu deiner Frage:

    if (i >= 30) Application->Terminate();
    


  • hi Linnea

    Das stand so in einem Tuti und dachte das es so sein soll *g*

    Danke für den Code , klappt prima vielen dank 👍

    MFG Fregger



  • Ich jedoch würde dir empfehlen das als String, und Zwar als MD5-String abzuspeichern, das ist schon deutlich schwieriger zu knacken, vor allem, wenn du auch noch deine eigenen Sachen da reinsetzt...

    z.B.

    MD5 von MyApp0
    MD5 von MyApp1
    MD5 von MyApp2
    MD5 von MyApp3
    MD5 von MyApp4
    MD5 von MyApp5
    MD5 von MyApp6
    MD5 von MyApp7
    MD5 von MyApp8
    ...
    

    Dafür gibt es die Komponente TIdCoderMD5. Und wenn du in einer Schleife überprüfst, ob die Registry einen gültigen Eintrag enthält, und wenn nicht, dann einfach beendest... kann niemand deinen Counter knacken. Jedenfalls nicht so einfach. Benennst du den Eintrag jetzt noch nach etwas, was wie ein Systemeintrag klingt, wie etwa SysKeys oder so, wo niemand deine Anwendung vermutet, wird es gleich doppelt so schwierig. Allerdings gibt es nie eine 100%ige Sicherheit bei solchen Dingen, irgendwann knackt es immer einer.



  • Hallo,

    mit dieser Methode könnte man auch ein Programm als Testversion zur Verfügung stellen, oder?

    Wie kann man sonst eine Testversion, als Beispiel mal, auf 30 Tage beschränken?



  • Indem du das Installationsdatum speicherst... und jedesmal kontrollierst, ob es länger als 30 Tage her ist...



  • Und kannst du mal ein beispiel geben, wie es aussieht für 30tage nach ersten start?

    kann das mir grad nich so vorstellen....hm....

    Opti



  • Windoof schrieb:

    Indem du das Installationsdatum speicherst... und jedesmal kontrollierst, ob es länger als 30 Tage her ist...

    Naja... aber ich will es nicht in einer INI-Datei oder in der Registry notieren -> leicht zu kanacken!



  • Dann schreib eine .dat datei, die 5367 zufällige(!)dummy zeichen/zahlen(sind noch lustiger), dann deine zahl und dann 25467 dummy zeichen enthält 😃
    Versuch da mal rauszukriegen, welches die beiden richtigen zahlen sind 😃

    Oder zeile die einzelnen ziffern noch auf...
    DUMMYBEREICH (10er stelle) DUMMYBEREICH (1er stelle) DUMMYBEREICH

    Das wird dann ganz schnell, ganz lustig 🙂

    Is aber vielleicht nicht der performateste weg, sollte aber relativ zuverlässig funktionieren, solange niemand die datei schreibschützt oder drüber kopiert *g*



  • Hier ein gutes Programm , das aus deiner Dateiname.exe eine 30 Tage Testversion macht mit Serial.

    http://www.siliconrealms.com/index.shtml

    Find das aber irgendwie Doof, will das aber selbst realisiren 🙂

    MFG Fregger


Anmelden zum Antworten