AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Zugriff auf Speicher meines Programms verhindern
Thema durchsuchen
Ansicht
Themen-Optionen

Zugriff auf Speicher meines Programms verhindern

Ein Thema von Cybersurfer · begonnen am 20. Jan 2004 · letzter Beitrag vom 21. Jan 2004
Antwort Antwort
Seite 2 von 3     12 3      
Mikko

Registriert seit: 23. Jan 2003
Ort: Baden
65 Beiträge
 
#11

Re: Zugriff auf Speicher meines Programms verhindern

  Alt 20. Jan 2004, 11:41
Zitat von Luckie:
Im Prinzip würde ich mir für ein Free- / Shareware Game nicht so eine Mühe machen und selbst für ein teures Spiel würde ich es wohl nicht machen. Sollen sie sich doch selber besch**ßen.
Auf dem gleichen Standpunkt stehe ich auch. Man entwickelt für ein Haufen Geld einen Kopierschutz, bei dem man denkt, daß es das Nonplusultra ist, und nach 14 Tagen hat es ein 10-Jähriger gecrackt.
Beispiel: Wenn ich mir Musik-CDs anschaue, die 'nen Kopierschutz haben, können nur noch eingeschränkt auf manchen Player abgespielt werden. Aber kopiert werden sie trotzdem. Wo liegt da also die Relation???? Das Gleiche gilt auch für Software.
  Mit Zitat antworten Zitat
Tyrael Y.

Registriert seit: 28. Jul 2003
Ort: Stuttgart
1.093 Beiträge
 
Delphi 2007 Professional
 
#12

Re: Zugriff auf Speicher meines Programms verhindern

  Alt 20. Jan 2004, 11:41
Zitat:
Tyrael Y. hat folgendes geschrieben:
und erhält die zu schützenden Speicherbereiche deines Programms....
..und überprüft bei jedem Speicherzugriff, ob es zu den zu schützenden Speicherbereichen gehört..

Wie stellst du dir das bitte vor?
Das waren nur allgemeine Überlegungen, alleine der Programmteil, um jeglichen Speicherzugriff zu registrieren ist nicht trivial und nicht in zwei Zeilen erzählt.

Zitat:
Tyrael Y. hat folgendes geschrieben:
... also ich kenne keine Methode dafür, aber prinzipiell könnte man ein zweites
Programm schreiben,...
..dieses Programm wird immer mit deinem Programm zusammen gestartet und erhält die zu schützenden
Speicherbereiche deines Programms....
..und überprüft bei jedem Speicherzugriff, ob es zu den zu schützenden Speicherbereichen gehört..

Dann crackt man halt das zweite Programm. Alles kein Problem.
..sag ich ja auch so ein Programm wäre in null komma nix ausgeschaltet..
Levent Yildirim
Erzeugung von Icons aus Bildern:IconLev
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#13

Re: Zugriff auf Speicher meines Programms verhindern

  Alt 20. Jan 2004, 11:42
Äh, vorsicht. Dies sollte hier keine große Diskussion über Sinn und Unsinn seines Vorhabens werden.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Mikko

Registriert seit: 23. Jan 2003
Ort: Baden
65 Beiträge
 
#14

Re: Zugriff auf Speicher meines Programms verhindern

  Alt 20. Jan 2004, 12:19
Wenn man unbedingt seine Variablen bei Spielen schützen will, sollte man mehrere Schutzmöglichkeiten einbauen und immer wieder abfragen (wie z.B. Isdebuggerpresent; haben sich Speicherbereiche, in denen meine Variablen stehen, geändert; eventuell Variablen packen/verschlüsseln usw.). Dabei sollte man aber keine Prozedur schreiben, die aufgerufen wird, sondern den Code immer wiederholen, sodaß viele Stellen gecrackt werden müssen. Man muß eine Kombination von verschiedenen Sachen coden. Aber die absolute Sicherheit gibt es nicht. Außerdem sollte man den Aufwand beachten. Lieber mehr Zeit in die Funktionalität des Spiels selbst stecken als in solche "Schutzmaßnahmen", die meist nur gegen Anfänger Schutz bieten.

Edit: Die Überprüfung sollte aber 100% bugfrei sein und man sollte das Spiel nur abbrechen, wenn man einwandfrei weiß, daß geschummelt wurde. Ansonsten wird man sich keine Freunde machen.
  Mit Zitat antworten Zitat
Benutzerbild von Spezi1980
Spezi1980

Registriert seit: 11. Aug 2003
Ort: Dresden OT Cossebaude
71 Beiträge
 
Delphi 2005 Personal
 
#15

Re: Zugriff auf Speicher meines Programms verhindern

  Alt 20. Jan 2004, 13:25
Ich würde die Spielstäde einfach codiert (mittels einfacher xor Verschlüsselung) in 2 verschiedenen Variablen mit unterschiedlichem Schlüssel codiert speichern und dann kurz vor dem arbeiten mit dem Inhalt der Variablen diese decodieren und vergleichen.

Das ist zwar ein sehr einfacher Schutz, sollte aber vielleicht den Aufwand für einen der das cheaten will etwas heraufsetzen. Die Passwörter selbst sollten natürlich auch nur codiert gespichert werden.
Robert
Codito, ergo sum.
>>I code, therefore I am<<
  Mit Zitat antworten Zitat
Mikko

Registriert seit: 23. Jan 2003
Ort: Baden
65 Beiträge
 
#16

Re: Zugriff auf Speicher meines Programms verhindern

  Alt 20. Jan 2004, 14:51
Zitat von Spezi1980:
Ich würde die Spielstäde einfach codiert (mittels einfacher xor Verschlüsselung) in 2 verschiedenen Variablen mit unterschiedlichem Schlüssel codiert speichern und dann kurz vor dem arbeiten mit dem Inhalt der Variablen diese decodieren und vergleichen.

Das ist zwar ein sehr einfacher Schutz, sollte aber vielleicht den Aufwand für einen der das cheaten will etwas heraufsetzen. Die Passwörter selbst sollten natürlich auch nur codiert gespichert werden.
Sorry, aber den "Aufwand" kann man sich sparen. Ist wirklich nicht böse gemeint, aber wer einen Trainer proggen will, für den ist das absolut keine Hürde. Außer das man eine Zeile mehr hat.
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#17

Re: Zugriff auf Speicher meines Programms verhindern

  Alt 20. Jan 2004, 15:24
Zitat:
Musste wohl auf TCPA warten, hrhr...
Mit TCPA kann man da auch nichts absichern. TCPA definiert nur einen Cryptochip Onboard. Die zu schützenden Daten müssen dann aber immer noch per ungeschützeter Spiele-Softare gelesen und geschrieben werden. Man kann also immer noch dieses Lesen + Schreiben hacken.

Eher trifft dann schon Microsofts Palladium ins Schwarze. Dort wird TCPA + Geschützer Speicher + ein zusätzlicher Nexus in der CPU dafür sorgen das man vollständig geschützte Programm hat. Ein Program das durch den Nexus im geschützten Bereich des Palladiums ausgeführt wird kann NICHT ohne entsprechnende Rechte abgeschert durch die TCPA Kryptographie debuggt werden. Da der benutzte Speicher in physikalischen Krypto-Speicher-Chips residiert sind sogar alle Informationen bei Lesen und Schreiben in diesen Speicherchip kryptographisch verschlüsselt. D.h. auch ein Hardware-Debugger hat keine Chance mehr. Nur derjenige der die korrekten Schlüssel besitzt kann solche Aktionen durchführen.

Auch ich würde die Spielstände in mehreren verschiedenen Variablen im Programm speichern, eventuell leicht verschlüsselt. Wichtig ist aber nur das die Aktualisierung der einzelnen Variablen in einem unterschiedlichen Intervall erfolgt. An verschiedenen Stellen im Program werden nun diese Variablen auf "Gleichheit" abgefragt. Ein Cracker wird mit Sicherheit erstmal nur eine dieser Variablen finden und die Schattenvariablen übersehen. Im Verlaufe einer Zeitspanne selektiert dein Program aber eine dieser Schattenvariablen als neue Hauptvariable. Wurde in der Zwischenzeit gepatcht so läuft nun das Programm mit dieser Schattenvariable weiter. Also, angenommen ein Lebenszähler. Wir benutzten an verschiedenen Stellen zB. 5 solcher Lebenszähler. Die Synchronisation erfolgt indem man eine Schattenvariable per Zufall auswählt, ein Leben davon abzieht und den Wert in den aktuellen Lebenszähler reinschreibt. Im Hintergrund werden über den Messagequeue nun die Schattenvariablen geupdatet. Wird nun der aktuelle Lebenszähler gepatcht so hat das eigentlich keine Auswirkungen wenn nicht auch alle Schattenvariablen gleichzeitigt gepatcht werden.

Eine Benutzung von IsDebuggerPresent() würde ich allehöchstens als Mittel zur Irritation benutzen. Der Cracker sucht als allererstes im Binary nach dem String "IsDebuggerPresent". Findet er diesen lösst er diese Konstantenadresse zum Code indem diese Funktion aufgerufen wird auf. Nun hat er mit hoher Sicherheit sofort einen Schutzcode deinerseits gefunden. D.h. solche primitiven Funktionen würde ich strikt vermeiden da sie nur die Arbeit des Crackers beschleunigen.

Gruß Hagen
  Mit Zitat antworten Zitat
Mikko

Registriert seit: 23. Jan 2003
Ort: Baden
65 Beiträge
 
#18

Re: Zugriff auf Speicher meines Programms verhindern

  Alt 20. Jan 2004, 15:59
Zitat:
...An verschiedenen Stellen im Program werden nun diese Variablen auf "Gleichheit" abgefragt. Ein Cracker wird mit Sicherheit erstmal nur eine dieser Variablen finden und die Schattenvariablen übersehen. Im Verlaufe einer Zeitspanne selektiert dein Program aber eine dieser Schattenvariablen als neue Hauptvariable. ...
Aber: Wenn ich eine Variable habe, habe ich alle. Ich möchte hier niemanden eine Anleitung zum Cracken geben, aber wenn ich die erste Variable herausgefunden habe, bereitet es keine Mühe mehr, alle Zugriffe auf diese Variable zu überwachen. Somit sind z.B. tausend Vergleichsvariablen nur noch lästiges Beiwerk, was einem Cracker Zeit kostet. Mühe hat er aber keine mehr damit.
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#19

Re: Zugriff auf Speicher meines Programms verhindern

  Alt 20. Jan 2004, 16:18
Dies stimmt so nicht. Es ist entscheidend das die Addresse der Speicherung der Variable unabhänig von deren Aktualisierung erfolgt. D.h. man aktualisiert und schreibt diese Variablen zeitgesteuert, zufällig über längere Zeiträume. Somit wird der tatsächliche Aufwand für den Cracker zeitlich enorm erhöht. Angenommen 10 solcher Variablen wobei pro Tag ab nur 3 dieser Variablen tatsächlich benutzt werden. Somit müsste der Cracker schon 3 Tage lang cracken und immer die korrekten zweitlichen Abläufe finden. Bei der Aktualisierung der Schattenvariablen ist es wichtig das diese Aktualisierung durch schwer debugbare Ereignisse gesteuert wird. Das wären zB. separate Theads, geschummelte Exceptionsbehandlungen oder eben per PostMessage() gesendete Nachrichten. Vorstellbar wäre auch ein DDE Nachtichtendienst innerhalb der gleichen Anwendung. Dadurch wird ein enorm großer Teil des Betriebssystemes in die Ereigniskontrolle durch den Cracker einbezogen. Am Ende wird der Cracker aus lauter Frust aufgeben. Dies IST das einzigst praktikable ZIEL des Programmieres. D.h. das Program erzeugt in seinem Programfluß eine enorme Menge an sinnlosen Stör-Code der immer nur in sehr kleinen Teile wirklich relevante Aktionen ausführt. Für uns Programmier ist sowas mit ziemlich wenig Aufwand zu erledigen, der Cracker hingegen sieht Millionen von Assemblerzeilen die er alle debuggen muß. Er wartet also ein enorm lange Zeit auf das entscheidende Ereigniss das ihm weiterhilft. Nur dies ist unser Vorteil, denn der Cracker ist ein ungeduldiger, schlampiger und unexakter Mensch !

Gruß Hagen
  Mit Zitat antworten Zitat
Mikko

Registriert seit: 23. Jan 2003
Ort: Baden
65 Beiträge
 
#20

Re: Zugriff auf Speicher meines Programms verhindern

  Alt 20. Jan 2004, 17:00
Zitat von negaH:
Dies stimmt so nicht. Es ist entscheidend das die Addresse der Speicherung der Variable unabhänig von deren Aktualisierung erfolgt. D.h. man aktualisiert und schreibt diese Variablen zeitgesteuert, zufällig über längere Zeiträume. Somit wird der tatsächliche Aufwand für den Cracker zeitlich enorm erhöht. Angenommen 10 solcher Variablen wobei pro Tag ab nur 3 dieser Variablen tatsächlich benutzt werden. Somit müsste der Cracker schon 3 Tage lang cracken und immer die korrekten zweitlichen Abläufe finden.
Muß er nicht. Wenn er eine Variable hat, sucht er alle Stellen im Speicher (die mit dem Programmablauf zu tun haben), die dem Inhalt der Variable entsprechen. Danach sucht er im Programmablauf, wo auf diese Stellen zugegriffen wird und überprüft, ob sie tatsächlich eine Variable sein könnten. Wieso also 3 Tage warten, was in einem Abwasch geht?

Zitat von negaH:
Für uns Programmier ist sowas mit ziemlich wenig Aufwand zu erledigen, der Cracker hingegen sieht Millionen von Assemblerzeilen die er alle debuggen muß.
Muß er nicht, er kann die kommpletten Assemblerzeilen vor sich haben, ohne auch nur eine Zeile davon zu debuggen (auch mit Interpretation). Alles eine Frage des Debuggers.

Zitat von negaH:
Nur dies ist unser Vorteil, denn der Cracker ist ein ungeduldiger, schlampiger und unexakter Mensch !
Ich würde dem nicht so ohne weiteres bepflichten und alle über einen Kamm scheren. Genau das ist nämlich der Vorteil des Crackers!

Aber um es auf den Punkt zu bringen: Was ich sagen will und was ich oben schon gesagt habe, nicht so viel Zeit und Elan in Sachen stecken, die eh nicht den 100%igen Erfolg haben, sondern eher in die Funktionalität des Spiels. Was nützt es, wenn keiner einen Trainer proggen kann, aber das Spiel keiner spielt, weil es Sch...ße ist.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:09 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