| Autor |
Beitrag |
P@u1
      
Beiträge: 117
|
Verfasst: Fr 26.02.10 16:23
Ich habe mir als Schutz für ein Programm, dass zum Funktionieren ein paar ganz bestimmte Bilder benötigt folgendes überlegt:
Wenn jemand das Programm haben will, dann startet er zu erst eine Anwendung, die seine Computer-ID oder sowas in der Art generiert - sollte eine ID sein, die sich nicht ändert.
Dann schickt er mir die ID z.B. per Email.
Aufgrund dieser ID verschlüssel ich dann die Bilder (ein paar Pixel ändern würde bereits reichen) und generiere aufgrund der Computer-ID einen Entschlüsselungscode, der nur für genau diese Bilder und diese ID funktioniert.
Dann verschicke an ihn das Programm inkl. der verschlüsselten Bilder und dem Entschlüsselungscode.
Das Programm läd sich dann bei jedem Start die Bilder rein und entschlüsselt sie intern.
Jetzt fragt ihr euch: Warum der Umweg über die Bilder?
Ein Schutz ohne Bilder kann soweit ich weiß leicht umgangen werden (z.B. dekompilieren und Abfragen rausnehmen), das geht bei den Bildern nicht, weil ohne diese die Funktion des Programms nutzlos wird.
So soll dann verhindert werden, dass das Programm einfach so weiter gegeben werden kann.
Also ein paar Fragen dazu:
1. Was haltet ihr generell von diesem Vorgehen, könnt ihr euch vll bessere Möglichkeiten denken?
Eine Schwachstelle ist vermutlich, dass man die entschlüsstelten Bilder, die während der Laufzeit im Arbeitsspeicher sind bestimmt irgendwie rauskriegt, aber dieses Risiko ist nicht so schlimm.
2. Welche ID nimmt man dafür am besten und wie wird diese bestimmt?
3. Wie ver-/entschlüssele ich Bilder am besten? (liegen im bmp Format vor)
Hinweis dazu: Soweit ich weiß, muss die Verschlüsselung nicht besonders gut sein, da wenn jemand versucht sie per Bruteforce zu knacken er für jede Möglichkeit erst das Programm starten und die Funktion testen muss.
|
|
glotzer
      
Beiträge: 393
Erhaltene Danke: 49
Win 7
Lazarus
|
Verfasst: Fr 26.02.10 16:40
zu 2 hätt ich ne idee: schnapp dir die seriennummer vom cpu oder so und verschlüssel die mit md5 das gibt normalerweise schöne ids
|
|
P@u1 
      
Beiträge: 117
|
Verfasst: Fr 26.02.10 16:47
gut, sowas in der art hatte ich mir gedacht. Ich werd dann mall bischen suchen, wie das geht.
Ihr könnt es aber auch gerne hier reinschreiben, wenn ihrs wisst^^
Hat noch wer was gutes für die anderen Fragen plz?
|
|
platzwart
      
Beiträge: 1054
Erhaltene Danke: 78
Win 7, Ubuntu 9.10
Delphi 2007 Pro, C++, Qt
|
Verfasst: Fr 26.02.10 16:48
Du machst einen riesen Denkfehler! Auch dein Programm ist innerhalb einer Minute dank Decompilierung geknackt. Das Bild und die Funktion zum Entschlüsseln sind vollkommen egal! Man muss im Code nur die Stelle finden, wo die Funktion sagt "JA, Schlüssel/ID/Bild/WasAuchImmer ist OK" und diese Stelle springt man dann einfach immer an...
_________________ Wissenschaft schafft Wissenschaft, denn Wissenschaft ist Wissenschaft, die mit Wissen und Schaffen Wissen schafft. (myself)
|
|
Xentar
      
Beiträge: 2077
Erhaltene Danke: 2
Win XP
Delphi 5 Ent., Delphi 2007 Prof
|
Verfasst: Fr 26.02.10 16:51
MD5 ist keine Verschlüsselung, sondern ein Hashwert. Ginge aber damit.
Versteh ich dich richtig: Dein Programm ist darauf angewiesen, dass die Bilder auf den Pixel korrekt sein müssen?
Rein aus Interesse: Was ist das für ein Programm, bzw. was hat es mit den Bildern auf sich?
Wenn ich das richtig verstehe, wäre es wohl ne Möglichkeit.. wobei solche Hardware IDs immer den Nachteil haben, dass man einen neuen Schlüssel braucht, sobald man seinen Rechner aufrüstet.
Wie wäre es einfach mit einem USB Dongle?
_________________ PROGRAMMER: A device for converting coffee into software.
|
|
P@u1 
      
Beiträge: 117
|
Verfasst: Fr 26.02.10 19:39
platzwart hat folgendes geschrieben : | | Du machst einen riesen Denkfehler! Auch dein Programm ist innerhalb einer Minute dank Decompilierung geknackt. Das Bild und die Funktion zum Entschlüsseln sind vollkommen egal! Man muss im Code nur die Stelle finden, wo die Funktion sagt "JA, Schlüssel/ID/Bild/WasAuchImmer ist OK" und diese Stelle springt man dann einfach immer an... |
ich dachte an eine entschlüsselung, die nicht kontrolliert, ob der code richtig ist, sondern je nach code ein anderes bild rauskommt und (fast) nur beim richtigen code dann das richtige bild rauskommt. Hoffe mal, dass das so möglich ist, sollte doch eigentlich gehen, oder?
Xentar hat folgendes geschrieben : | MD5 ist keine Verschlüsselung, sondern ein Hashwert. Ginge aber damit.
Versteh ich dich richtig: Dein Programm ist darauf angewiesen, dass die Bilder auf den Pixel korrekt sein müssen?
Rein aus Interesse: Was ist das für ein Programm, bzw. was hat es mit den Bildern auf sich?
Wenn ich das richtig verstehe, wäre es wohl ne Möglichkeit.. wobei solche Hardware IDs immer den Nachteil haben, dass man einen neuen Schlüssel braucht, sobald man seinen Rechner aufrüstet.
Wie wäre es einfach mit einem USB Dongle? |
Also das Programm vergleicht Bilder einer Flashanwendung, so kann es z.B. bei einer Poker Anwendung die Karten analysieren und die Wahrscheinlichkeiten berechnen.
Die Bilder müssen nicht ganz genau auf den Pixel korrekt sein, aber schon sehr wenige falsche Pixel bewirken, dass es nicht mehr funktioniert
Und zum USB-Dongle - wie genau funktioniert das? Also wenn dann jeder der das benutzen will von mir vorher ein USB-Stick kriegen muss, fänd ich nicht gut und zuviel Aufwand, ich bevorzuge eine Softwarelösung.
Also wenn jemand noch ne Idee zur ID hat oder weiß, mit welchem Befehl man die ausliest - bitte melden!
Und wenn jemand ne gute Idee hat für die Verschlüsselung der Bider - ich dachte an was wie z.B. Bild in 4 oder mehr Bereiche teilen, und im ersten Bereich dann z.B. jeden r Wert von den Pixel um einen bestimmten wert, der evtl aus der ID generiert wird ändern, g und b wert um einen anderen wert und in den anderen bereichen um andere werte und dann soll das originalbild nur wiederkommen, wenn man den richtigen code hat und die richtige ID erkannt wird.
|
|
Sirke
      
Beiträge: 208
Erhaltene Danke: 2
|
Verfasst: Fr 26.02.10 20:07
Habe ich das richtig verstanden: Du möchtest mit deinem Programm Bilder in einer anderen Anwendung vergleichen, wobei die Referezbilder in verschlüsselter Form vorliegen, sodass für einen korrekten Vergleich die Referenzbilder entschlüsselt sein müssen?
Dabei hat du das Problem, dass deine Bilder iwann im Arbeitsspeicher in unverschlüsselter Form vorliegen müssen, sodass die Entschlüsselung relativ leicht umgangen werden kann. Diese Möglichkeit besteht IMMER, wenn du mit Daten in unverschlüsselter Form arbeitest, weil du einer Funktion unverschlüsselte Daten übergibst und unverschlüsselte Daten ausgegeben werden! Wenndu jedoch eine Funktion findest, welcher du zwei verschlüsselte Daten übergibst, dh die zu vergleichenden Bilder verschlüsselst du vor dem Eingeben in die Funktion, und die einen verschlüsselten Wert ausgibt, dann kannst du das Problem beheben...  Es gibt Lösungen für solche Probleme, aber die sind sehr rechenintensiv und erlauben nur wenige Operationen!
Du benötigst um es sicher zu halten eine Blackbox für einen gewissen Teil des Programmes oder einen Teil, welcher bekannt ist, aber wo die Eingaben unbekannt sind!
|
|
P@u1 
      
Beiträge: 117
|
Verfasst: Fr 26.02.10 20:31
Das mit ausm Arbeitsspeicher auslesen werde ich ignorieren, soviel Aufwand wird sich bestimmmt keiner dafür machen.
Aber eine einfache Überprüfung nimmt man halt zu schnell raus, deswegen denke ich mal, dass ich das mit den bildern wie oben beschrieben machen werde.
Problem ist nur noch die Umsetzung, ich kenn mich mit der Bestimmung der ID und mit ver-/entschlüsseln leider überhaupt nicht aus.
|
|
Astat
      
Beiträge: 75
Erhaltene Danke: 1
Windows 2000
D6, D7, D2007, Lazarus
|
Verfasst: Fr 26.02.10 21:36
Hallo P@u, eine Machine ID erzeugen, findest du hier.
www.delphipraxis.net/post438444.html
lg. Astat
|
|
P@u1 
      
Beiträge: 117
|
Verfasst: Mi 03.03.10 22:08
vielen dank für den link, ich hab mir das mal angeguckt.
Nun aber zum verschlüsseln von Bildern - hat wer ne idee, wie das geht? Es muss kein besonders guter Schutz sein. Am besten wäre es, dass das nicht so funktioniert, dass man nen passwort eingbit und dann nur etwas passiert, wenn es richtig ist, sondern, dass immer was passiert, aber nur beim richtigen passwort (oder bei ein paar kollidierenden, was nicht so schlimm wäre) das richtige bild rauskommt.
|
|
uall@ogc
      
Beiträge: 1826
Erhaltene Danke: 11
Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
|
Verfasst: Mi 03.03.10 22:17
Du kannst die einzelnenFarben des Bildes mit dem Password verknüpfen (siehe Scanline und z.B. xor).
Aber auch dann muss man nur einmal ein Passwort haben für eine Machine ID haben und man kann dieimmer wieder entschlüsseln. bzw entschlüsselt die einmal und verwendet dann diese Bilder...
_________________ wer andern eine grube gräbt hat ein grubengrabgerät
- oder einfach zu viel zeit
|
|
P@u1 
      
Beiträge: 117
|
Verfasst: Mi 03.03.10 22:23
diese risiken sind nicht so schlimm.
Scanline habe ich bereits benutzt.
Ich weiß nur noch nicht wie das mit dem Xor geht, aber ich gucks mir mal an
|
|
platzwart
      
Beiträge: 1054
Erhaltene Danke: 78
Win 7, Ubuntu 9.10
Delphi 2007 Pro, C++, Qt
|
Verfasst: Mi 03.03.10 22:38
Irre ich mich, oder ist es eigentlich egal, wie das Passwort gespeichert wird (Bild, Text, was auch immer)?!? Entscheidend sind doch ganz andere Stellen, wie z.B. Dekompilierung des Sourcecodes... oder denke ich grad völlig falsch?
_________________ Wissenschaft schafft Wissenschaft, denn Wissenschaft ist Wissenschaft, die mit Wissen und Schaffen Wissen schafft. (myself)
|
|
uall@ogc
      
Beiträge: 1826
Erhaltene Danke: 11
Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
|
Verfasst: Mi 03.03.10 22:49
Naja, wenn man kein gültiges Passwort hat dann weiß man ja auch nicht wie das Bild aussieht (jedenfalls wenn man nicht über irgendwelche Analysen das Passwort rausbekommt [z.B. wäre ja einfache XOR verknüofung bei schwarzen Pixel dann direkt das passwort]
Es ist halt so, als wenn du den Code verschlüsselst den du dannja nicht aufrufen kannst.
Sofern du aber einmal ein Passwort hast ist die verschlüsselung nicht mehr der Angriffspunkt, dann nimmt man die entschlüsselten Daten (Bilder) und lädt diese direkt in den Speicher und schmeisst die entschlüsselung komplett raus.
_________________ wer andern eine grube gräbt hat ein grubengrabgerät
- oder einfach zu viel zeit
|
|
P@u1 
      
Beiträge: 117
|
Verfasst: Mi 03.03.10 22:50
es geht nicht um eine speicherung des passworts.
Zum Programm gehören einige Bilder, die für die Funktion des Programms unerlässlich sind.
Wenn man jetzt die Bilder verschlüsselt, kann das Programm nur mit dem richtigen Code, der die Bilder richtig entschlüsselt verwendet werden.
Problem ist im Moment noch das erstellen einer guten ID, wo ich gerade noch dran arbeite und die verschlüsselung
|
|
uall@ogc
      
Beiträge: 1826
Erhaltene Danke: 11
Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
|
Verfasst: Mi 03.03.10 22:55
Ja hat auch keiner gesagt. Aber wenn du z.B. das Bild Pixel per Pixel mit XOR "verschlüsselt" dann istdas Passwort (welches du zum verschlüsseln verwendet hast) bei schwarzen Pixeln direkt auslesbar. Ob das nun ein generierter Code ist oder ein Passwort was eingegeben werden muss ist dafür ja egal.
Außerdem kann ma, wenn man weiß wie der Code erstellt wurde, diesen einfach selbst erzeugen.
Und wenn einmal die Bilder entschlüsselt sind, dann kann man diese eben auch kopieren und auf jedem PC verwenden.
_________________ wer andern eine grube gräbt hat ein grubengrabgerät
- oder einfach zu viel zeit
|
|
platzwart
      
Beiträge: 1054
Erhaltene Danke: 78
Win 7, Ubuntu 9.10
Delphi 2007 Pro, C++, Qt
|
Verfasst: Mi 03.03.10 23:13
P@u1 hat folgendes geschrieben : |
Zum Programm gehören einige Bilder, die für die Funktion des Programms unerlässlich sind.
Wenn man jetzt die Bilder verschlüsselt, kann das Programm nur mit dem richtigen Code, der die Bilder richtig entschlüsselt verwendet werden. |
Ja, ABER: Wenn ich die Exe einfach dekompiliere und deine Funktionsaufrufe a la "DecodePicture" einfach ausheble... Ist ja exakt das gleiche, als ob ich nach einem Passwort im Quelltext suche...
_________________ Wissenschaft schafft Wissenschaft, denn Wissenschaft ist Wissenschaft, die mit Wissen und Schaffen Wissen schafft. (myself)
|
|
P@u1 
      
Beiträge: 117
|
Verfasst: Mi 03.03.10 23:15
platzwart hat folgendes geschrieben : | P@u1 hat folgendes geschrieben : |
Zum Programm gehören einige Bilder, die für die Funktion des Programms unerlässlich sind.
Wenn man jetzt die Bilder verschlüsselt, kann das Programm nur mit dem richtigen Code, der die Bilder richtig entschlüsselt verwendet werden. |
Ja, ABER: Wenn ich die Exe einfach dekompiliere und deine Funktionsaufrufe a la "DecodePicture" einfach ausheble... Ist ja exakt das gleiche, als ob ich nach einem Passwort im Quelltext suche... |
Eben nicht, es wird ja nicht geprüft, ob das passwort richtig oder falsch ist, sondern je nach passwort sieht das endbild nur anders aus. Das programm funktioniert aber nur wenn die bilder richtig aussehen.
Ich hab das mal getestet, bei mir wechselt das zwischen 2 verschiedenen ergebnissen wenn ich mehrmals auf den button drücke, das ist irgendwie komisch.
Edit: Mir ist gerade folgendes aufgefallen:
Eine registrierte Version könnte weitergegeben werden und dann muss nur noch das programm dekompiliert werden und die funktion die die hardware id bestimmt so umzuschreiben, dass genau die hardwareid rauskommt, die die person verwendet hat, die die version registriert hat. dann kann er das programm mit dem selben passwort benutzen. Also ist die verwendung von hardwareid gar nicht so besonders sinnvoll, oder habe ich hier einen denkfehler?
|
|
platzwart
      
Beiträge: 1054
Erhaltene Danke: 78
Win 7, Ubuntu 9.10
Delphi 2007 Pro, C++, Qt
|
Verfasst: Mi 03.03.10 23:40
Naja, dann wird eben jemand die entschlüsselten Bilder verbreiten.
_________________ Wissenschaft schafft Wissenschaft, denn Wissenschaft ist Wissenschaft, die mit Wissen und Schaffen Wissen schafft. (myself)
|
|
Xentar
      
Beiträge: 2077
Erhaltene Danke: 2
Win XP
Delphi 5 Ent., Delphi 2007 Prof
|
Verfasst: Mi 03.03.10 23:41
Meinste nicht, du machst dir da etwas zuviel Mühe?
Über die Forensuche finden sich bestimmt genug Themen, warum es keinen "perfekten" Kopierschutz gibt..
Steck die Arbeit lieber darein, das eigentliche Programm zu verbessern.
_________________ PROGRAMMER: A device for converting coffee into software.
|
|
|