| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY bietet das umfangreichste Ökosystem von B2B als auch B2C-Lösungen für IT-Akteure auf dem Markt, eine Pressemitteilung
|
Autor
|
Thema: Kopierschutz mittels Abfrage der AutoCAD Lizenz (3872 mal gelesen)
|
sebastian. Mitglied
Beiträge: 90 Registriert: 03.09.2009 Windows XP Prof. SP3 AutoCAD 2010 Visual Studio 2008 / 2010 Prof.
|
erstellt am: 19. Nov. 2010 16:23 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, ein entwickeltes AutoCAD AddOn soll nur innerhalb der eigenen Firma lauffähig sein, weshalb ich irgendeinen (relativ sicheren, aber nicht zu komplexen) Kopierschutz benötige. Wir haben hier AutoCAD Floating/Netzwerk Lizenzen. Ist es irgendwie möglich, die Lizenz des laufenden AutoCADs abzufragen und diese dann mit einer Liste aller Unternehmenslizenzen abzugleichen? Das AddOn kann dann nur auf einem Unternehmensrechner ausgeführt werden. Das ganze sollte auch 'offline' funktionieren, also wenn man sich eine der Netzwerklizenzen ausgecheckt hat. (Daher kam auch die Idee mit dem Lizenzabgleich-Kopierschutz, da eine Überprüfung wie "befindet sich der PC aktuell im Firmen-LAN" unterwegs nicht funktionieren würde). Vielen Dank schon mal für eure Ideen / Ratschläge! Schönes Wochenende, Grüße, Sebastian Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 19. Nov. 2010 16:32 <-- editieren / zitieren -->
Hi, eine einfache Variante ist die AutoCAD-Seriennummer abzufragen und mit eine Liste zu vergleichen. Vorsicht aber, wenn Du das mit C++ machst OK, wenn Du dies aber mit dotNET machst, ist Dein Code fast frei lesbar, also kein wirklicher Schutz für Programmierer. Abfrage der Seriennummer geht über die Variable '_PKSER' In Lisp als Beispiel (getvar "_PKSER") Alternative Variante kann sein, dass Du aus dem System den Namen des Domain-Controllers ausliest. Das sollte auch gültig sein, wenn Du Dich mal mit dem Laptop ins Gebirge vertschüsst zum 'Arbeiten in der Natur'. - alfred - ------------------ www.hollaus.at |
sebastian. Mitglied
Beiträge: 90 Registriert: 03.09.2009 Windows XP Prof. SP3 AutoCAD 2010 Visual Studio 2008 / 2010 Prof.
|
erstellt am: 19. Nov. 2010 16:50 <-- editieren / zitieren --> Unities abgeben:
Hi Alfred, hm...ein Seriennummern-Abgleich wäre also machbar, aber zu unsicher (-> .net Code), da somit die gültigen Firmen-Seriennummern nach außen dringen könnten (und das wohl auch trotz code-obfuscation). Gibt es evtl. eine Art Firmen-Lizenz-ID, die man abgleichen könnte und welche nicht so sicherheitskritisch wie Seriennummern ist? Was du mit dem Auslesen des "Namen des Domain-Controllers" meinst, müsstest du mir erklären. Da steh ich auf dem Schlauch. BTW: Wäre dieser "Name des Domain-Controllers" dann für Außenstehende leicht zu simulieren, um mein AddOn zum laufen zu bekommen? Den validen Namen könnten sie ja evtl. wieder durch Dekompilieren meines .NET Codes erhalten... Beste Grüße, Sebastian Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Ehrenmitglied V.I.P. h.c. Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 ACAD 2004DX Mechanical PP
|
erstellt am: 19. Nov. 2010 16:58 <-- editieren / zitieren --> Unities abgeben: Nur für sebastian.
|
sebastian. Mitglied
Beiträge: 90 Registriert: 03.09.2009 Windows XP Prof. SP3 AutoCAD 2010 Visual Studio 2008 / 2010 Prof.
|
erstellt am: 19. Nov. 2010 17:03 <-- editieren / zitieren --> Unities abgeben:
|
Ex-Mitglied
|
erstellt am: 19. Nov. 2010 17:05 <-- editieren / zitieren -->
Hi, guck mal in: My.Computer.Network ...hier kannst Du Info's über Netzwerk bekommen My.Computer.Registry ...hier kannst Du aus der Registry Info's auslesen My. ...ist ein grundsätzlich guter Platz für Infos der App, des Computers, des Users, ... - alfred - ------------------ www.hollaus.at |
sebastian. Mitglied
Beiträge: 90 Registriert: 03.09.2009 Windows XP Prof. SP3 AutoCAD 2010 Visual Studio 2008 / 2010 Prof.
|
erstellt am: 19. Nov. 2010 17:19 <-- editieren / zitieren --> Unities abgeben:
Hi Alfred, diesen Namespace (My) kenne ich. Hatte auch schon mit dem Gedanken gespielt, z.B. die MAC-Adresse, HDD-Id etc. abzugleichen. Allerdings gibt es hier zwei Nachteile: - Diese können (angeblich) relativ leicht (mit gültigen Daten) simuliert werden, wodurch der Kopierschutz leicht ausgehebelt werden kann - Wenn das AddOn auf neuen PCs in der Firma genutzt werden soll, müssen deren Daten in die Liste der gültigen Rechner aufgenommen werden Daher hatte ich gehofft, ich könnte die Lizenz-ID o.ä. von AutoCAD abfragen. Mittlerweile habe ich auch herausgefunden, dass es eine solche ID wirklich gibt. Zu finden unter "Info" -> "Produktinformation..." -> "Lizenz-ID" Wäre es eigentlich kritisch, wenn diese ID nach außen gelangt (ähnlich wie bei der AutoCAD Seriennummer)? Könntest du nochmal die Idee hinter dem Abfragen des "Namen des Domain Controllers" erläutern (hat aber natürlich auch bis Montag Zeit)? Danke und Grüße, Sebastian Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
oscarr Mitglied CAD-Manager
Beiträge: 198 Registriert: 02.10.2007 ACA 2012 - English Win 7/x64
|
erstellt am: 19. Nov. 2010 18:11 <-- editieren / zitieren --> Unities abgeben: Nur für sebastian.
Hallo, Die LizenzID ist unkritisch aber vor allem für deine Zwecke wohl ungeeignet, es ist mehr so ein LizenzTyp zB. steht 55800ARCHDESK_2008_0F für ein AutoCAD Architecture 2008 oder 57100REVIT_2008_0F für ein Revit 2008. Irgenwo auf der Autodesk Site findest du auch die IDs für alle anderen Autodesk Produkte. Da Du jedoch in .NET machst ist im Grunde alles relative leicht herauszubekommen was Du an Mechanismen implementierst. Aber auch nur wenn man weiss wie Und da liegt der Hund begraben. Selbst die ausgeklügelsten Schutzmechanismen können ausgeheblt werden. Fragt sich nur mit welchem Aufwand. Also: "Wenn jemand Schutz sagt, frage Ihn immer: Schutz wovor?" Man kann Software nicht vor kopieren schützen, da ein Computer seit dem guten Herrn von Neumann per Definition ein System zum kopieren ist. Definiere doch bitte einmal Deine Schutzbedürfnisse und dann lässt sich auch eine angemessene Lösung finden. Schönes Wochenende Holger
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 19. Nov. 2010 18:54 <-- editieren / zitieren -->
Hi, >> [...] Diese können (angeblich) relativ leicht (mit gültigen Daten) simuliert werden Wenn wer die Harddisk cloned und Du willst davor geschützt sein, dann darfst Du aber gar nicht erst auf dotNET setzen. Wer Harddisk cloned, AutoCAD-Seriennummer knackt oder gar den Lizenzserver emuliert, sorry, der hat Deine DLL schneller offen als Du es glaubst. Willst Du soooo sicher sein, musst Du etwas in C++ oder Assembler machen, am besten mit Hardwarelock. Rechne aber auch: wenn wer soviel kriminelle Energie hineinsteckt, um Deine App zu knacken, dann rechne gegen, wieviel Schaden kann er anrichten kontra wieviel Programmieraufwand steckst Du in Stunden hinein und wird dafür Deine App teurer. Sorry, - alfred - ------------------ www.hollaus.at |
sebastian. Mitglied
Beiträge: 90 Registriert: 03.09.2009 Windows XP Prof. SP3 AutoCAD 2010 Visual Studio 2008 / 2010 Prof.
|
erstellt am: 22. Nov. 2010 09:14 <-- editieren / zitieren --> Unities abgeben:
Guten Morgen, erstmal danke an Holger für die Info mit der LizenzID. Das ist dann wirklich nix für meine Zwecke. Bzgl. Sinn des Kopierschutzes: Da es sich bei dem AddOn im Prinzip nur um eine einzige dll Datei handelt, welche z.B. schnell mal per E-Mail verschickt werden könnte, soll sichergestellt sein, dass diese nicht ohne weiteres außerhalb der Firma lauffähig ist. Es handelt sich dabei (z.Zt.) nicht um ein Verkaufsprodukt. Hier war schon ein Soft- oder gar Hardware Schutz mittels Aladdin HASP im Gespräch, aber das scheint für unsre Zwecke zu aufwändig/teuer/unflexibel, da wir beispielsweise bei dem Softwareschutz für jede Aktivierung unsres eigenen AddOns ca. 60€ zahlen müssten...irgendwie paradox! Somit suche ich eine Lösung, die einen grundlegenden Schutz gegen 'Copy&Paste' bietet.
Als Möglichkeiten sehe ich gerade: a) Abgleich der AutoCAD Seriennummer (wie könnte ich das Ergebnis des Kommandos _PKSER nicht nur in der Konsole ausgeben, sondern in meinem Programmcode verfügbar machen?) b) Abgleich, ob für diesen PC gerade eine unsrer AutoCAD Netzwerk-Lizenzen läuft bzw. ausgecheckt wurde (falls das funktioniert?!) c) Abgleich von PC-Daten (z.B. MAC-Adresse & HDD-Id). Hier bräuchte ich aber einen Art Registrierungsprozess, da ich diese beiden Werte ja beim User (programmmäßig) erfragen müsste. Daraus würde dann ein Lizenzfile für ihn generiert und ihm geschickt und somit wäre das Programm an dessen PC gebunden. d) Abgleich von Infos, die bei allen Firmen-PCs/Laptops gleich sind. Wäre das die anfangs erwähnte Sache mit dem "Domain Controller" bzw. welche Netzwerk/PC-Infos könnten das sonst sein? Wäre über eure Meinungen zu den Möglichkeiten sehr dankbar!
Grüße, Sebastian Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
oscarr Mitglied CAD-Manager
Beiträge: 198 Registriert: 02.10.2007 ACA 2012 - English Win 7/x64
|
erstellt am: 22. Nov. 2010 10:28 <-- editieren / zitieren --> Unities abgeben: Nur für sebastian.
Hallo Sebastian, eine Abfrage von HW Id hat nach meiner Ansicht zu viele Nachteile, im Grunde sind es die gleichen Gründe die auch gegen einen Dongle sprechen. Sowas halte ich nur sinnvoll wenn man es auch mit einer HW verkauft (zB. einen Mediaplayer mit einer TV Karte). Eine "feste" Verdrahtung von Servernamen würde ich nie einprogramieren. Aber wie wäre es mit einer asymetrisch verschlüsselten Lizenz- oder besser noch Konfigurationdatei. Den PuplicKey kannst Du ruhig verteilen und Lizenzdateien selbst erstellen. Wenn es eine Konfigurationsdatei ist mit Infos die Du zur Laufzeit benötigst ist es für einen Angreifer wesentlich aufwendiger dies zu Hacken. Gruss Holger
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
sebastian. Mitglied
Beiträge: 90 Registriert: 03.09.2009 Windows XP Prof. SP3 AutoCAD 2010 Visual Studio 2008 / 2010 Prof.
|
erstellt am: 22. Nov. 2010 10:33 <-- editieren / zitieren --> Unities abgeben:
Hi Holger, ist es bei der PublicKey-Lösung dann aber nicht so, dass der PublicKey/das Lizenzfile einfach zusammen mit der AddOn-DLL weitergegeben werden könnte und das Programm dann auch auf jedem andren PC lauffähig wäre? Grüße, Sebastian Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
oscarr Mitglied CAD-Manager
Beiträge: 198 Registriert: 02.10.2007 ACA 2012 - English Win 7/x64
|
erstellt am: 22. Nov. 2010 10:48 <-- editieren / zitieren --> Unities abgeben: Nur für sebastian.
Klar kann es weitergegeben werden. Das lässt sich ja nicht verhindern. Die Frage ist aber was in der Lizenzdatei verschlüsselt wird. zB. der Domainname und/oder LokaleNAme IDs oder oder oder. Irgendwas was du dann beim Programmstart abfragst. Persönlich denke ich das eine vershlüsselte Konfigurationsdatei mit Layerliste, Verzeichnissnamen, Blockname o.ä. deutlich schieriger zu häcken ist. Die Abfrage nach irgenwas singulärem bzw. statischem lässt sich evtl. noch leicht aushebeln, hauptsache die Abfrage liefert True zurück. Sind es jedoch werte mit denen Du weiterarbeitest ist es deutlich schwieriger das aus deiner dll "auszubauen". Der Dieb müsste bei einer verschlüsselten Konifgurationsdatei dann das Tool exact so verwenden wie ihr es auch verwendest. Also die gleiche Layerstruktur, die gleich Ordenerstruktur, die gleiche Block- oder Dateinamen. Und das ist dann sehr unwahrscheinlich das er es dann noch nutzen kann. Holger Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
sebastian. Mitglied
Beiträge: 90 Registriert: 03.09.2009 Windows XP Prof. SP3 AutoCAD 2010 Visual Studio 2008 / 2010 Prof.
|
erstellt am: 22. Nov. 2010 11:28 <-- editieren / zitieren --> Unities abgeben:
Hi Holger, danke für deine Ausführungen und Ideen! Das mit der verschlüsselten Lizenz/Konfigurationsdatei klingt schon mal interessant. Ich hätte noch ein paar Fragen zu einem möglichen Inhalt einer solchen Lizenzdatei: Könnte ich nicht auch einfach die Checksumme (md5 / sha-1 / crc32) der gültigen AutoCAD-Firmen-Seriennummer im Quellcode oder einer Lizenz/Konfigurationsdatei hinterlegen? Wenn das Programm gestartet wird, würde diese Checksumme dann mit der Checksumme der aktuellen AutoCAD-User-Seriennummer verglichen... Sehe ich das richtig, dass sich aus der Checksumme im Quellcode bzw. Lizenzdatei die Firmen-Seriennummer nicht wiederherstellen liese? Grüße, Sebastian Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
oscarr Mitglied CAD-Manager
Beiträge: 198 Registriert: 02.10.2007 ACA 2012 - English Win 7/x64
|
erstellt am: 22. Nov. 2010 11:58 <-- editieren / zitieren --> Unities abgeben: Nur für sebastian.
Was Du da beschreibst sollte funktionieren, beruht aber auf der Annahme das der Dieb beim lesen der Lizenzdatei nicht erraten kann was für eine verschlüsselung/codierung vorlieget. Prüfsummen sind von ihrem Wesen nach nicht umkehrbar. Das Problem bei Deiner Idee ist, dass die FirmenSN nach einer Acad installation noch änderbar ist. Dh. ich installiere mein Acad wie gehabt und nach dem ich dann dein Tool installiert habe, ändere ich einfach meine SN auf die eurige und schon läuft es Wie gesagt, meiner Meinung nach sind einmalabfrage zu schwach. Für einen "normalen" CAD Anwender könnte es aber reichen. Womit wür wieder beim Aufwand/Nutzen verhältniss sind. LG Holger Holger Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
sebastian. Mitglied
Beiträge: 90 Registriert: 03.09.2009 Windows XP Prof. SP3 AutoCAD 2010 Visual Studio 2008 / 2010 Prof.
|
erstellt am: 22. Nov. 2010 12:40 <-- editieren / zitieren --> Unities abgeben:
Hi Holger, wie gesagt, geht es mir im Grunde um einen Schutz vor 'Copy&Paste'. Der normale CAD User soll davon abgehalten werden, das Programm einfach weiterzugeben. Bzgl. späterem Ändern der Seriennummer. Da müsstest du aber ja auch erstmal wissen, auf welche Seriennummer du dein AutoCAD ändern musst. Laut deiner Aussage, könntest du unsre Seriennummer aus dem Hash/Checksum im Code ja nicht wiederherstellen?! Somit müsste ein Unternehmensmitarbeiter bei uns nicht nur das Programm, sondern auch unsre AutoCAD Seriennummer rausgeben...was doch eher unwahrscheinlich wäre. Außerdem müssten die Firmenmitarbeiter auch noch wissen, dass der Kopierschutz auf einer Seriennummer-Überprüfung basiert und sie zum Umgehen des Kopierschutzes die Firmenseriennummer mit nach außen geben müssten. Oder man müsste den Hash aus dem Quellcode nehmen und mit den Hash-Werten aller möglichen AutoCAD Seriennummern vergleichen. Dann könnte man auch auf die gültige Seriennummer kommen. Ein entsprechendes Programm wäre wohl relativ einfach geschrieben, da die AutoCAD Seriennummer ja ein festes Format hat?! Das ganze könnte man aber deutlich erschweren, wenn man z.B. noch eine PC/Netzwerk-Information (welche keine fest Stellenanzahl besitzt) an die Seriennummer hängt und daraus den Hash generiert. Bei einer Freigabe für einen einzelnen User z.B. den Windows-Usernamen oder oder oder... Trotzdem weiß ich noch nicht, wie ich mittels VB.Net die aktuelle AutoCAD Seriennummer auslese (ähnlich dem _PKSER Kommando). Grüße, Sebastian Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
oscarr Mitglied CAD-Manager
Beiträge: 198 Registriert: 02.10.2007 ACA 2012 - English Win 7/x64
|
erstellt am: 22. Nov. 2010 13:07 <-- editieren / zitieren --> Unities abgeben: Nur für sebastian.
Bei mir funktioniert folgendes: Code:
Debug.Print(My.Computer.Registry.GetValue("HKEY_LOCAL_MACHINE\SOFTWARE\Autodesk\AutoCAD\R17.1\ACAD-6004:409", "SerialNumber", Nothing))For Each DC As DirectoryServices.ActiveDirectory.DomainController In _ DirectoryServices.ActiveDirectory.Domain.GetCurrentDomain.DomainControllers Debug.Print(DC.Name) Next
An der Stelle der Registry findest Du auch anderes was du vieleicht verwenden möchtest, zB. Firmenamen o.ä. LG Holger Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 22. Nov. 2010 17:47 <-- editieren / zitieren -->
Hi, ich bin gespannt, denn ich sehe, dass sehr tief mit Verschlüsselung etc. gearbeitet werden soll. Aber irgendwo aussen um die Prüfroutine herum gibt's nun mal ein IF ELSE ENDIF und das zu finden, wird imho nicht sooo schwierig sein, solange es alles in dotNET geschrieben ist. Wenn Du möchtest, dann lass mir eine EXE zukommen, die geschützt ist (sollte es eine LIC-Datei oder andere Dinge zum Schutz geben, brauch ich nicht) und gib mir ein wenig Zeit (sollte aber dann per PM geschehen, ist nicht öffentlich zu machen ). - alfred - ------------------ www.hollaus.at |
sebastian. Mitglied
Beiträge: 90 Registriert: 03.09.2009 Windows XP Prof. SP3 AutoCAD 2010 Visual Studio 2008 / 2010 Prof.
|
erstellt am: 22. Nov. 2010 17:58 <-- editieren / zitieren --> Unities abgeben:
Hi Alfred, du liegst richtig, dass der Schutz auszuhebeln ist, wenn man die If-Abfrage manipuliert (wenn ich dich richtig verstehe). Aus dem Stegreif könnte ich das jetzt selbst zwar nicht, aber man kann sich da bestimmt einlesen und es sollte nicht zu schwierig sein. Ich werde jetzt vorerst die Checksummen/Hashes der Seriennummern vergleichen, d.h. Hash der gültigen Seriennummer ist hinterlegt und wird mit dem Hash der Seriennummer der aktuellen AutoCAD Installation verglichen. Diesen Abgleich möchte ich immer wieder mal bei mehrere Aktionen während des Programmablaufs (z.B. Buttonklick) durchführen. Hierzu sollte ich dann wohl nicht immer auf genau die selbe "Check-Funktion" zurückgreifen?! Meiner Ansicht nach ist das ganze ein sehr einfach zu implementierender und für den Laien doch schwierig zu umgehender Kopierschutz, welcher eine Beschränkung auf die interne Firmennutzung erlaubt und dazu nicht Rechner-, sondern AutoCAD-Lizenz gebunden ist. Weitere Anregungen gerne erwünscht! Grüße, Sebastian Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |