Programm vor MemoryEdit schützen
-
Hallo com,
ich habe ein Programm geschrieben was immer eine Internet Verbindung braucht, deswegen habe ich auch viele brauchbare Strings Server-side gelagert und auf dem Server wird auch die Lizenz geprüft und eine ein md5-hash zurückgeschickt der vorher auf einer zufälligen zahl des Clients basiert hat und dem Lizenzkey und ein paar statischen sSachen. Und wenn der Lizenzkey ungültig ist, schließt der Server die Verbindung und das Programm schließt dann sofort.Das Proplem ist allerdings, das alles mit NOP´s (0x90) Bytes ja einfach überschrieben werden kann wenn man die Adresse hat. Ich protecte trozdem meine Anwendung mit Obsidium, was einige abhält allerdings nicht alle.
So jetzt habe ich mir gedacht gegen das disassemblen kannst du eh nicht viel machen und gegen einen Memorydump schon garnicht, aber wie wärs wenn du die Adressen versuchst bei jedem Start zu ändern, das eine Dll-Injection nicht die richtigen Adressen trifft. ALso habe ich mir gedacht machst du am Anfang ein random Zahl die zufällig viel Speicher mit malloc oder new reserviert (der natürlich nicht benutzt wird)
aber würde die Idee überhaupt aufgehen? Oder kennt ihr noch gute Protecting Programme? Oder andere Simple Ideen Adressen zu verändern oder Irgentwas was es schwieriger machen würde ?
-
Das klingt nach ASLR und das macht dein System hoffentlich schon automatisch.
-
~Edit: Ups! Naja, doppelt hält besser.~
-
ASLR bringt aber nix bei einer Dll-Injektion. Wenn du als Client die volle Kontrolle über dein Programm hast kannst du das ja auch dynamisch lösen.
Beispiel:
Wenn die Validierungsfunktion an Stelle 0x44444444 liegt und die Exe bei 0x40000000 beginnt überschreibe ich nicht immer den Code an Stelle 0x44444444 sondern suche dynamisch die Addresse des Moduls (0x40000000) und addiere 0x04444444.
Funktioniert solange die exe entpackt ist. Und irgendwie entpacken kannst du sie immer.Alternativ kannst du auch den Speicher nach einer entsprechenden Signatur durchsuchen und deine Validierungsfunktion so finden.
Das einzige was mit zum Schutz einfällt wäre anfangs eine Validierung und dabei gibt der Server eine Zufallszurück zurück und merkt sie sich. Und dann bei jeder weiteren Verbindung schickst du dem Server diese Zahl und nur wenn der Server sie kennt gibt er die Antwort.
Ist natürlich nur sinnig wenn wirklich wichtige Daten auf dem Server liegen. Sonst kann man immer hergehen und das Programm einmal Lizenziert laufen lassen, die Daten abfangen und in das Programm einbetten.
-
Danke schonmal für die Antworten, das mit dem Server ist bereits gut auf dem Server gesichert, wenn die Leizenz dem Server nicht bekannt ist sofort disconnect.
Aber wie gesagt muss ich halt irgentetwas gegen Adressen Manipulation machen bei einer Dll-Injection oder allgemein einer Injection...
-
Alexanderus schrieb:
Danke schonmal für die Antworten, das mit dem Server ist bereits gut auf dem Server gesichert, wenn die Leizenz dem Server nicht bekannt ist sofort disconnect.
Aber wie gesagt muss ich halt irgentetwas gegen Adressen Manipulation machen bei einer Dll-Injection oder allgemein einer Injection...Moment, verstehe ich das richtig? Du baust hier eine Art Kopierschutz, der zwar eine Internetverbindung benutzt, aber über diese Verbindung wird vom lokalen Client bloß ein Merkmal geprüft, sie ist nicht notwendig zum Ausführen des eigentlichen Programms? In dem Fall hättest du das gleiche Problem wie alle anderen klassischen Kopierschütze. Der lokale Nutzer hat prinzipiell volle Kontrolle über seinen Rechner und kann das zu prüfende Merkmal künstlich vorgaukeln oder die Prüffunktion einfach vollständig umgehen. Davor kannst du den Client unmöglich vollständig schützen, du kannst es bloß erschweren.
Die Sicherheit von always-online Kopierschutzverfahren beruht eigentlich da drauf, dass der lokale Client nicht funktionsfähig ist ohne diese Verbindung, da ein essentieller Teil der Anwendung auf dem Server läuft und niemals in die Hand des Anwenders kommt.
-
das stimmt, man kann sie zwar starten, aber es wird direkt als erstes die lizenz geprüft auf dem server und wenn keine internetverbindung da ist, dann schließt er sich... und halt ein paar strings die umbedingt benötigt werden damit das programm genutzt werden kann sind auf dem server, werden allerdings rübergeschickt

aber danke mit dem tipp das ich auch arbeit serverside machen sollte .bzw die lizenz besteht aus sämtlichen Hardware ID´s die alle dann nochmal mit MD5 gehasht werden.
-
Alexanderus schrieb:
und halt ein paar strings die umbedingt benötigt werden damit das programm genutzt werden kann sind auf dem server, werden allerdings rübergeschickt

Siehe DarkShadow44s Beitrag: Das reicht nicht. Diese Daten können einmal abgefangen und dann wieder benutzt werden.
bzw die lizenz besteht aus sämtlichen Hardware ID´s die alle dann nochmal mit MD5 gehasht werden.
Die übrigens alle Software sind und somit ganz wunderbar gefälscht werden können, ohne dein Programm überhaupt anzugreifen.
-
richtig das stimmt aber das sehe ich ganz locker, da der angreifer ja garnicht weiß welche keys gültig sind und da es noch alles in md5 ist gibt es tausende möglichkeiten, ich glaub kaum das sich da jemand die mühe macht bei den 10-20 lizenzen die es gibt, ausserdem protokoliert der server auch falsche hwid´s und banned die ip nach der 3 falschen anmeldung
-
Öhm. Ich brauch das ganze doch nur einmal bei einem funktionierenden Programm mitzuschneiden und dann hab ich alles was ich brauch. Die Kommunikation mit deinem Server rauszunehmen ist doch wahrscheinlich das erste, was ein Interessent machen würde.
Meinst du wirklich dein Programm ist so heiß begehrt, dass es den Aufwand (und insbesondere die Zumutungen an deine ehrlichen Kunden!) wert ist, den du dir da machst? Meinst du nicht, du könntest die Arbeit sinnvoller für die Verbesserung deines Programms einsetzen?
-
Natürlich, finde ich auch shcon ein bisschen schade, allerdings ist das Programm geschrieben für eine Szene die sehr gute Entwickler hat und das Programm wurde schon einmal gecracked und halbwegs public gemacht ... Daraus habe ich gelernt, und naja leider muss ich jetzt es etwas besser schützen
aber ihr habt recht, ich muss irgentetwas serverside machen, was nicht statisch ist und die der client nicht selbst machen kannwas haltet ihr den so von Protection Programme wie z.b. Obsidium, Themida, VMProtect... ?
-
Alexanderus schrieb:
was haltet ihr den so von Protection Programme wie z.b. Obsidium, Themida, VMProtect... ?
Standardschutz -> Standardcrack
Außerdem teuer wenn man die guten Features will.
Je besser du es schützt desto größer der Anreiz.
Mach das Programm Open Source, dann crackts auch keiner.
Vor einigen Jahren hieß es mal 30% aller Windows-Lizenzen sind legal. Micro$ofts Haltung dazu: Legal oder nicht, Hauptsache Windows. Sollte sich etwas erhöht haben die Zahl. Du kannst auch sagen, dass 10% gecrackte Versionen vertretbar sind und es nicht darum geht jeden einzelnen unbezahlten Zugriff zu verweigern. Oder mach nen vernünftigen Preis, 5€ zum Beispiel. Den bezahlt man schon allein dafür, dass es automatische Updates gibt. Ich jedenfalls würde mich weigern so eine Totgeburt zu programmieren. DRM ist technisch unmöglich und reine Zeitverschwendung.