Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   ProductID auslesen zwecks "Kopierschutz" (https://www.delphipraxis.net/185255-productid-auslesen-zwecks-kopierschutz.html)

erich.wanker 26. Mai 2015 09:58

ProductID auslesen zwecks "Kopierschutz"
 
Hallo Leute,

ich möchte gerne einen "eindeutigen" String eines WindowsOS auslesen..
Gegal ob UAC aktiv oder nicht
Egal ob 32 oder 64 Bit Windows
Egal ob reale Maschine oder virtuelle Maschine
Egal ob uraltes oder neuestes Betriebssystem
Egal - welche Userberechtigung anliegt

Anhand dieses Strings würde ich dann online "nachschauen" - ob der Rechner eine gültige Nutzungslizenz besitzt.


Hab momentan die unten ageführten Zeilen:

Ist das eurer Meinung nach ne brauchbare Lösung (auch in Bezug auf Win10?)

Vielen Dank für Infos

Erich



Delphi-Quellcode:
function TMainForm.GetWindowsRegistryValuesA: string;
const
  CDataValue1: string = 'DigitalProductId';
  CDataValue2: string = 'DigitalProductId4';
  CKeyName: string = 'SOFTWARE\Microsoft\Windows NT\CurrentVersion\';
var
  Reg: TRegistry;
  message_string:String;
  vSize, p: integer;
  tmpStr: AnsiString;
begin

  message_string:='Keine Werte gefunden';

  Reg := TRegistry.Create;
  try
    Reg.RootKey := HKEY_LOCAL_MACHINE;
    if (Reg.OpenKeyReadOnly(CKeyName)) then
    begin
      try

        if Reg.ValueExists(CDataValue1) then // 32 Bit OS
              begin
              vSize := reg.GetDataSize(CDataValue1);
              if (vSize > 0) then
              begin
                SetLength(tmpStr, vSize);
                reg.ReadBinaryData(CDataValue1, tmpstr[1], vSize);
                repeat
                  p := Pos(#0, tmpStr);
                  if p <> 0 then
                    Delete(tmpStr, p, 1);
                until p = 0;
                message_string :='ProductID 32bit:'+ tmpStr;
              end;
              end;

        if Reg.ValueExists(CDataValue2) then // 64 Bit OS
              begin
              vSize := reg.GetDataSize(CDataValue2);
              if (vSize > 0) then
              begin
                SetLength(tmpStr, vSize);
                reg.ReadBinaryData(CDataValue2, tmpstr[1], vSize);
                repeat
                  p := Pos(#0, tmpStr);
                  if p <> 0 then
                    Delete(tmpStr, p, 1);
                until p = 0;
                message_string :='ProductID 64bit:'+ tmpStr;
              end;
              end;

      finally
        Reg.CloseKey;
      end;
    end;
  finally
    Reg.Free;
  end;

  showmessage(message_string);

end;

Der schöne Günther 26. Mai 2015 10:00

AW: ProductID auslesen zwecks "Kopierschutz"
 
Und wenn jemand sein OS neu installiert oder upgraded ist die Lizenz nicht mehr gültig? Ich dachte (Achtung, Halbwissen), so etwas macht man üblicherweise über die MAC des ersten Netzwerkadapters?

RWarnecke 26. Mai 2015 10:00

AW: ProductID auslesen zwecks "Kopierschutz"
 
Was soll Dir das bringen ? Was passiert wenn der Anwender einen Betriebssystemwechsel durchführt ?

erich.wanker 26. Mai 2015 10:06

AW: ProductID auslesen zwecks "Kopierschutz"
 
Falls der User das Betriebssystem wechselt - schick ich ihm eine neue Lizenz ..

Mir geht es nur darum - dass die Software auf EIN verifiziertes OS beschränkt ist.

Popov 26. Mai 2015 10:16

AW: ProductID auslesen zwecks "Kopierschutz"
 
Ich sage mir in solchen Fällen immer: ist das Programm so gut, dass es die halbe Welt haben will, wird man es knacken. Ist es ein unwichtiges pillepale Programm, wozu der Aufwand?

Also diese Methode kann man wohl mit einem Eintrag in hosts aushebeln. Es seiden, das Programm funktioniert gar nicht ohne Überprüfung. Dann funktioniert es also immer dann nicht wenn man kein Internetzugang hat.

Mal klein wenig OT: zum Kopierschutz habe ich ein gespaltenes Verhältnis. Es sollte gut, aber nie zu gut sein. Ich habe schon so manche ehemals sehr erfolgreiche Programme von jetzt auf sofort von der Bildfläche verschwinden sehen, als die einen guten Kopierschutz eingeführt haben. Illegale Kopien, so sehr sie einen ärgern, sind auch immer etwas kostenlose Werbung.

Mavarik 26. Mai 2015 10:33

AW: ProductID auslesen zwecks "Kopierschutz"
 
Zitat:

Zitat von Popov (Beitrag 1303035)
Illegale Kopien, so sehr sie einen ärgern, sind auch immer etwas kostenlose Werbung.[/SIZE]

Blöd nur, wenn 99% der Anwender die Software umsonst benutzen...

guinnes 26. Mai 2015 10:40

AW: ProductID auslesen zwecks "Kopierschutz"
 
Zitat:

Zitat von erich.wanker (Beitrag 1303029)
Anhand dieses Strings würde ich dann online "nachschauen" - ob der Rechner eine gültige Nutzungslizenz besitzt.

Und der, der dein Programm knacken will, disassembliert es und tauscht ein Byte aus und kann dein Programm ohne Einschränkungen benutzen.
Auf den letzten 3-4 EKON's gab es jeweils mindestens einen Vortrag zum Softwareschutz und die Essenz daraus : Vergiss es oder setz was professionelles ein

Popov 26. Mai 2015 10:53

AW: ProductID auslesen zwecks "Kopierschutz"
 
Das will ich nicht verneinen, aber ich stelle mir immer die Frage: wie viele von den 99% sich meine Software tatsächlich auch gekauft hätten? Nicht jeder der sie nutzt ist ein tatsächlicher Kunde. Was soll angeblich AutoDesk über ihr AutoCAD (frei wiedergegeben) gesagt haben? Was interessiert es uns ob Klein Hänschen sich illegal unsere Software besorgt hat um damit sein Vogelhäuschen zu planen. Unsere Kunden sind die Firmen. Wenn eine Software wie z. B. TotalCommander nicht mehr kostenlos nutzbar ist, werden die Leute eine andere Software nutzen. Irgendwann verringert sich der Bekanntheitsgrad des Programms und dann stellt sich die Frage ob man noch dem 1% seine Software verkauft kriegt.

frankyboy1974 26. Mai 2015 10:58

AW: ProductID auslesen zwecks "Kopierschutz"
 
Zitat:

Und der, der dein Programm knacken will, disassembliert es und tauscht ein Byte aus und kann dein Programm ohne Einschränkungen benutzen.
Auf den letzten 3-4 EKON's gab es jeweils mindestens einen Vortrag zum Softwareschutz und die Essenz daraus : Vergiss es oder setz was professionelles ein
Bei meinen Programmen zumindesten waren die Anwender aber in der Regel keine Computerfreaks, die wissen, was es bedeutet ein Programm zu disassemblieren. In der Regel reicht ein selbst gestrickter Kopierschutz aus, es sei denn man verkauft tatsächlich ein Programm, das alle Welt besitzen möchte. Ich habe es bei meinem Programm selbst mal versucht, diese zu cracken, ist mir trotz Informatikstudium nicht gelungen:oops:. Es gib natürlch immer irgentwelche Cracker, die nichts besser zu tuen haben, als Software zu cracken und auf irgendwelchen dunklen Seiten bereit zu stellen, wer aber bereit ist von solchen Seiten Software zu installieren, dem kannst du sowie keine Software verkaufen.
Ich würde allerdings auch keinen Kopierschutz empfehlen, der nur Online funktioniert. Berechne doch aus dem Registry-Key, einen neuem verschlüsselten Key und sende diesem dem Anwender. Nur wenn dieser im Programm hinterlegte Schlüssel, mit dem in der Registry passt, ist das Programm freigeschaltet. Würde dann auch Offline funktionieren.

mfg

Frank

BUG 26. Mai 2015 10:59

AW: ProductID auslesen zwecks "Kopierschutz"
 
Nachdem die obligatorisch Kopierschutzstandpauke nun erledigt ist, bleibt eigentlich noch die Frage, ob die ausgelesenen Werte ein System eindeutig kennzeichnen :mrgreen:

Zitat:

Zitat von Der schöne Günther (Beitrag 1303030)
Ich dachte (Achtung, Halbwissen), so etwas macht man üblicherweise über die MAC des ersten Netzwerkadapters?

Gibt viele Möglichkeiten, wenn ich mich recht erinnere sind die Seriennummern von den Festplatten auch beliebt. Einige hatten auch aus viele Nummern ausgewertet und z.B. Änderungen einzelner Teile ignoriert.

In der DP gibt es einen Haufen Diskussionen und Quellcode zu dem Thema (Hier im Forum suchenKopierschutz/Hier im Forum suchenSeriennummer).

Perlsau 26. Mai 2015 11:08

AW: ProductID auslesen zwecks "Kopierschutz"
 
Zitat:

Zitat von Popov (Beitrag 1303047)
Das will ich nicht verneinen, aber ich stelle mir immer die Frage: wie viele von den 99% sich meine Software tatsächlich auch gekauft hätten? Nicht jeder der sie nutzt ist ein tatsächlicher Kunde. Was soll angeblich AutoDesk über ihr AutoCAD (frei wiedergegeben) gesagt haben? Was interessiert es uns ob Klein Hänschen sich illegal unsere Software besorgt hat um damit sein Vogelhäuschen zu planen. Unsere Kunden sind die Firmen. Wenn eine Software wie z. B. TotalCommander nicht mehr kostenlos nutzbar ist, werden die Leute eine andere Software nutzen. Irgendwann verringert sich der Bekanntheitsgrad des Programms und dann stellt sich die Frage ob man noch dem 1% seine Software verkauft kriegt.

Das kann ich vollumfänglich unterschreiben :!:
Oft ist es ja auch so, daß sich "Klein Hänschen" diese Software, die er unlizensiert benutzt, nicht unbedingt leisten kann. Ich wäre heute noch bei Corel8, wenn nicht ein Kunde mir seine alte Corel11-DVD überlassen hätte (war nicht registriert) für geleistete Dienste, die er nicht vollumfänglich bezahlen konnte. Wichtig ist ja für die Firmen, daß sie Umsatz machen und daß niemand anderes illegal mit ihrer Software Umsatz generiert und der Software-Firma ihren Anteil daran vorenthält. Genau deshalb gibt es ja so viele Programm als abgespeckte Freeware-Versionen, um den Bekanntheitsgrad zu erhöhen und finanziell potentere Zeitgenossen dazu zu verleiten, sich die Pro-Version zu kaufen. Wenn sich das nicht rechnen würde, würden's die Softeware-Ersteller nicht machen.

Ähnliche Erfahrungen gibt es z.B. auch beim Copyright mit Büchern. So hatte der Roman-Autor Celho einst einen seiner Romane als PDF-Datei zur Verfügung gestellt und konnte danach plötzlich wesentlich mehr verkaufen.

p80286 26. Mai 2015 14:15

AW: ProductID auslesen zwecks "Kopierschutz"
 
Zitat:

Zitat von erich.wanker (Beitrag 1303033)
Falls der User das Betriebssystem wechselt - schick ich ihm eine neue Lizenz ..

Mir geht es nur darum - dass die Software auf EIN verifiziertes OS beschränkt ist.

Liest sich für mich so, als ob es für XP,Vista,W7,W8,W8.1 usw. jeweils einen Lizenzschlüssel gäbe.


Und ansonsten, es ist alles eine Frage der Kosten/Nutzenrechnung. Sowohl auf Programmierer- als auch auf Nutzer-Seite. " was ist es mir wert diese Funktionalität zu haben "

Gruß
K-H

Dalai 26. Mai 2015 14:42

AW: ProductID auslesen zwecks "Kopierschutz"
 
Zitat:

Zitat von erich.wanker (Beitrag 1303033)
Falls der User das Betriebssystem wechselt - schick ich ihm eine neue Lizenz ..

Mir geht es nur darum - dass die Software auf EIN verifiziertes OS beschränkt ist.

Und das machst du auch, wenn der Nutzer sein OS neu installiert? Die ProductID ändert sich mit jeder Neuinstallation! Nur für den Fall, dass du ProductID und Product Key verwechseln solltst...

MfG Dalai

Captnemo 26. Mai 2015 19:53

AW: ProductID auslesen zwecks "Kopierschutz"
 
Grundsätzlich muss man zwischen B2C und B2B Software unterscheiden.
Im B2B-Bereich wird sehr viel gecrackt, und eine letztlich 100%igen Schutz gibt es nicht, außer vielleicht eine zwingende Onlineprüfung, welche aber bei mangelnder Onlineverbindung zu Userfrust führt. Und auch das wäre keine unüberwindbare Hürde.
Im B2B reicht im Grunde ein einfacher Schutz, so dass die Software nicht "rumgereicht" wird. Da ist ein guter Support ein wesentlich besserer Kopierschutz. Denn Businesskunden haben mehr Interesse daran, das ihre Software 24/7 läuft, und sie bei Problemen kompetenten Support erhalten, als sich durch Raubkopien ein paar Euro zu ersparen, wie, sie wissen, dass gute Leistung auch bezahlt werden muss.

Daniel 26. Mai 2015 20:18

AW: ProductID auslesen zwecks "Kopierschutz"
 
Jetzt haben wir sehr viele Meinungen zum Themas "Kopierschutz", aber keine technischen Antworten auf die Frage. ;-)
Bei aller - durchaus berechtigten - Kritik/Zurückhaltung/Vorsicht kann man ja dennoch auf die technischen Inhalte eingehen.

mm1256 26. Mai 2015 20:31

AW: ProductID auslesen zwecks "Kopierschutz"
 
Zitat:

Zitat von erich.wanker (Beitrag 1303033)
Falls der User das Betriebssystem wechselt - schick ich ihm eine neue Lizenz ..

Mir geht es nur darum - dass die Software auf EIN verifiziertes OS beschränkt ist.

Generell würde ich die Festplatten-Seriennummer nehmen. Hab das jahrelang gemacht und keine "funktionalen" Probleme damit gehabt. Der Kunde kann in dem Fall wenigstens sein OS ohne Stress neu installieren. Aber, das ständige Neu- bzw. Umlizenzieren hat zu viel Zeit gekostet. Kommt natürlich darauf an, wieviele Lizenzen man im Einsatz hat. Ein Problem ist, man kann dem Kunden ja nichts dafür berechnen, denn er hat ein Nutzungsrecht einer Software gekauft.

Spätestens dann wenn er die Software nicht (mehr) benutzen kann, und daraus ein Schaden entsteht (Produktionsausfall, Rechnungen können nicht geschrieben werden...was auch immer) kann es sehr schnell sehr teuer werden. Der Streitwert liegt fast immer dem Software-Wert und darum wird aus sowas fast immer ein Minus-Geschäft. Weil ich mich mit meinen Kunden nicht vor Gericht treffen möchte, habe ich dann den Blödsinn mit der Hardwarebindung (oder in deinem Fall Softwarebindung) sein lassen. Eine normale Lizenzdatei tut's auch. Und macht keinen Stress. Und wenn der Kunde sie verliert muss ich nichts umsonst machen.

himitsu 26. Mai 2015 20:50

AW: ProductID auslesen zwecks "Kopierschutz"
 
Vielleicht auch mal ein Blick ins XE8?
Ich glaub, ich hatte im GetIt was von OnGuard und Lockbox gesehn.

Oder auf Hardwareebene:
  • der Code kommt garnicht erst ins Programm, also kann er nicht so leicht geackt werden (allerdings dann mit Onlinezwang)
  • oder ein Dongle, der entweder die Funktionen oder die Enschlüsselung/Entsperrung des Programms übernimmt.

hathor 27. Mai 2015 15:32

AW: ProductID auslesen zwecks "Kopierschutz"
 
Generating a “unique” hardware ID using delphi and the WMI
https://theroadtodelphi.wordpress.co...i-and-the-wmi/


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:50 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz