[Code] [Delphi] "Kopierschutz" für Programme

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von teqnix, 8. September 2009 .

  1. 8. September 2009
    [Delphi] "Kopierschutz" für Programme

    Nabend,
    und zwar ist mir grad der gedanke gekommen, wie man am Besten programme mit Delphi schützen könnte. Schützen in diesem Sinne, dass das Programm nur auf einem bestimmten Rechner ausgeführt werden kann und auf anderen nicht.
    Nach einigen Google-Recherchen bin ich auf die Hardware/Festplatten-ID-Protection gestoßen, welche aber auch nicht das wirkliche Wahre sein soll, da (die von mir gefunden) Methoden wohl leicht zu umgehen bzw. unwirksam sind.
    Jetzt frage ich hier mal nach, ob jmnd. Ahnugn hat, wie man am besten sein Programm schützen kann.

    Hatte u.a. diesen Thread ganz interessant gefunden: Windows (Hardware-ID) Hardware hash auslesen - Entwickler-Ecke


    Danke schon mal und für hilfreiche Posts gibts natürlich 'ne BW
     
  2. 8. September 2009
    AW: [Delphi] "Kopierschutz" für Programme

    Hallo,

    also erstmal ist sowas ziemlich schwer und mit genügend Zeit bekommt man jeden Schutz ausgehebelt. Selbst hardwardongle wurden emuliert von daher gibt es keinen sicheren Schutz. Die Festplatten-ID ist meistens auch nicht wirklich schwer auszuhebeln.
    Um zu verstehen warum das so ist muss du verstehen wie man so einen Kopierschutz umgeht. Der Cracker benutzt dazu einen Debugger oder Disassembler und geht deinen Code durch bis er meinetwegen an die Stelle im Assemblercode gelangt, wo die Überprüfung stattfindet. Das ist meistens eine Sprung anweisung wie JNE (Jump if not equal) oder JE (jump if equal). Daher braucht man als Cracker nur dafür sorgen, dass diese Anweisung immer an die Stelle springt, dass das Programm glaubt es wäre auf dem richtigen System oder der richtigen Hardware. Und das ist sehr schnell gemacht, vielleicht 5 Minuten. Alternativ kann ein cracker auch einfach auf einem bestimmten Windows-API Aufruf warten der die Festplatten-ID herausgibt, falls es sowas ähnliches gibt.
    Von daher musst du schon genau wissen wie dein Delphiprogramm übersetzt wird vom Compiler um es besser schützen zu können. Du kannst quasi, wenn du das programm hast, es soweit umschreiben als Cracker, dass es das tut was eigentlich nicht vom Programmierer beabsichtigt war. Daher ist es nur möglich sowas zu erschweren indem man diese Stellen im Assemblercode versteckt bzw. verschleiert, was man zum beispiel mit einem binären Packprogramm recht einfach machen kann. Wobei es dafür auch wieder autotmatische Entpackprogramme gibt oder man diese einfach aus dem Arbeitsspeicher lädt wenn es entpackt ist.
    Mal ne andere Fragen wen willst du eigentlich davon abhalten dein Programm auf nem anderen Rechner starten zu lassen?

    Ich hoffe ich konnte dir ein wenig helfen.

    bye
     
  3. 8. September 2009
    AW: [Delphi] "Kopierschutz" für Programme

    Nabned,
    danke für deine Antwort erstmal ,)
    Das ist mir alles klar, ich habe selber Erfahrung mit Reverse Engineering und hab schon einige Cracks released wenn man das so nennt
    Meinen Sourcecode würde ich auch mit nem Crypter schützen lassen
    Meine Frage ist halt, WIE ich den Schutz am besten Umsetzen kann.
    BW haste.

    Grüße
     
  4. 8. September 2009
    AW: [Delphi] "Kopierschutz" für Programme

    Neben den schon gennaten Sachen wie Packer und Crypter könntest du deinen Code
    durch eine inline AntiDebugger (am besten direkt in assembler) Funktion schützen die
    du in deinem Code mehrfach verteilst, desweiteren kann Multithreading gegen Debugger helfen.

    Hier und hier findest du noch nen Code wie du die Hardware Infos der CPU auslesen kannst ....

    Mfg Rushh0ur
     
  5. 8. September 2009
    AW: [Delphi] "Kopierschutz" für Programme

    wie liest du die hdd serial aus?

    wmi? deviceioctl wäre da mal schon nen stück schwerer im code zu finden
     
  6. 8. September 2009
    AW: [Delphi] "Kopierschutz" für Programme

    Okay, danke für die Info und die Links. Werde mich damit mal auseinandersetzen.

    BW habt ihr auch.

    //e
    Die ID lese ich mit folgendem Code aus:

    Code:
    procedure TForm1.FormCreate(Sender: TObject);
    var
     pRootPathName: Array[0..MAX_PATH] of Char;
     pVolumeNameBuffer: Array[0..MAX_PATH] of Char;
     iVolumeSerialNumber: Cardinal;
    
     iMaximumComponentLength: DWORD;
     iFileSystemFlags: DWORD;
    
     cc : Cardinal;
    
    begin
    
     cc := 0;
     pRootPathName := 'X:\'; // Welche Festplatte soll ausgelesen werden
     GetVolumeInformation( pRootPathName,pVolumeNameBuffer,Sizeof(pVolumeNameBuffer)-1,@iVolumeSerialNumber,iMaximumComponentLength,iFileSystemFlags,nil,0 );
     cc := iVolumeSerialNumber;
     ShowMessage(Format('%.8x', [cc])); // achstellig, lässt sich auch 12stellig oder höher ausgeben
    end;
    Habe ich von hier
     
  7. 8. September 2009
    AW: [Delphi] "Kopierschutz" für Programme

    GetVolumeInformation sieht der cracker in klartext im debugger. gefundenes fressen
     
  8. 8. September 2009
    AW: [Delphi] "Kopierschutz" für Programme

    Okay, also lieber eine der verlinkten Lösungen von Rushh0ur benutzen? (Wobei da ja nur der erste Link wirklich brauchbar ist).

    //e
    Habe hier noch was gefunden und zwar das Package aus der SDL Componentent Suite.
    Könnte man die CPU ID nicht als ID benutzen? Sollte ja eindeutig sein. (http://www.lohninger.com/cpuid.html)
     
  9. 9. September 2009
    AW: [Delphi] "Kopierschutz" für Programme

    Get Physical HDD Serial Number without WMI - CodeProject

    mit der cpu id wäre ich vorsichtig. um was für eine app reden wir hier eigentlich? greift sie mindestens 1 mal aufs inet zu?
     
  10. 9. September 2009
    AW: [Delphi] "Kopierschutz" für Programme

    Wieso vorsichtig?
    Ja Internetzugriff ist mehr als einmal gegeben.
    Zum Link, das sieht nicht nach Delphi aus? Naja egal, werde mich morgen aber da mal anmelden und mir die Dateien laden und angucken.
     
  11. 9. September 2009
    AW: [Delphi] "Kopierschutz" für Programme

    is cpp (und die gui c#, die braucht man sich aber eh net anschaun).

    weil leute dazu tendieren die cpu zu wechseln (und die id evtl auch anhand der frequenz generiert werden könnte) und wenn man die primäre hdd wechselst, muss win sowieso neu installiert werden (normalerweise).

    aber wenn du eh inet access brauchst, dann mach dir auf nem webserver nen hwid system, wo jeder zahlende nutzer nen acc bekommt und dann (eine) hwid(s) eintragen kann und dein prog dann einfach beim webserver fragt. so kann man das mit der sich ändernden hwid relativ einfach lösen.
     
  12. 9. September 2009
    AW: [Delphi] "Kopierschutz" für Programme

    Ah ok gut zu wissen.
    An die Lösung habe ich auch schon gedacht, aber irgendwie muss ich dort noch eine Überprüfung der Antwort des Servers Clientseitig einbauen. Sonst könnte man ganz einfach die Antwort fälschen (z.B. per hosts Datei den Server auf einen lokalen oder eigenen Server umleiten).
    Hast du dazu irgendeine Idee?
     
  13. 9. September 2009
    AW: [Delphi] "Kopierschutz" für Programme

    mach bei der abfrage nebenbei paar parallele threads die schön viele JE und JNE produzieren
     
  14. 9. September 2009
    AW: [Delphi] "Kopierschutz" für Programme

    Aber wenn man bspw. den Traffic per Wireshark abfängt, kommt man ja einfach an die Serveradresse bzw. IP ran und kann so den Traffic umleiten
    Die Server-Client-Lösung war schon mein erster Ansatz nur an diesem Problem mit der Umleitung des Traffics ist es dann gescheitert ^^
     
  15. 9. September 2009
    AW: [Delphi] "Kopierschutz" für Programme

    geht sicher, dazu müsste der cracker aber nen prog schreiben, das nebenbei läuft, den http request umleitet und antwortet. das wäre untypisch für nen cracker, oder haste schonmal so nen crack gesehen?
     
  16. 9. September 2009
    AW: [Delphi] "Kopierschutz" für Programme

    Ja okay stimmt (wobei es durchaus in Cracks/Patches die möglichkeit gibt von programmen die Updatefunktion per hosts Datei zu deaktivieren )
    Aberich hoffe einfach, dass meine Zielgruppe inteligent/clever genug ist die hosts Datei zu missbrauchen :-D
    Ich werde das jetzt mit der Server-Client-Lösung nehmen. Werd mich gleich morgen mal ransetzen und ggf. hier nochmal melden.

    Danke an alle und speziell an Hardwarehunger
     
  17. 9. September 2009
    AW: [Delphi] "Kopierschutz" für Programme

    naja und was nützt denen wenn sie diese ändern (ins leere schicken). wenn du keinen request von deinem webserver bekommst nimmste halt einfach an, dass die lizenz nicht valide ist.

    btw: http://www.woodmann.com/crackz/Tutorials/Anticrk.htm

    habs mir net genau angesehen, sieht aber gut aus. werd morgen mal nen blick aufs tut werfen. ansonsten findeste hier sicher noch was:

    Google (hey raid hat den # "bug" in go.raidrush.ws gefixed)

    edit:
    schau mir grad mal den artikel an. im großen und ganzen stimmts, zudem muss ich grad richtig lachen, lohnt sich also grad doppelt:
     
  18. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.