Entwickler-Ecke

Sonstiges (Delphi) - Exemanipulation durch Hacker


Poolspieler - Di 13.07.04 17:19
Titel: Exemanipulation durch Hacker
Hallo,
ich möchte ein Bild hart in meine Exedatei einfügen (also in ein TImage ein Bild zur Entwurfszeit laden...)

Wie einfach ist es nun für einen Hacker, dieses Bild durch ein anderes zu ersetzen?
Was kann ich dagegen tun? --> muss ich ein dongle verwenden, oder gibt es eine vernünftige Softwarelösung??? :roll:

Gruß

Poolspieler


Anonymous - Di 13.07.04 17:28

Ein Hacker wird da wohl nicht viel machen können ;-)

Wenn es in einer Ressource ist, ist es leicht.
Wenn es sich auf dem Formular befindet auch.
Wenn es sich in einer externen Datei befindet nur wenn das Format bekannt ist.

Du könntest eine Prüfsumme des Bildes berechnen um zu überprüfen ob es das Richtige ist. Das lässt sich aber auch ganz schnel ausnopen oder die Prüfsumme die du speicherst kann geändert werden.


Poolspieler - Di 13.07.04 17:51

Sorry,
wenn ich mich jetzt dumm stelle, aber was ist die Botschaft Deiner Antwort??? :?

Kann ich nun etwas dagegen tun - und zwar so viel, dass ein Hacker mehrere Wochen/Monate bräuchte um ein eigenes Bild ein meiner Exe zu platzieren...???

Ich weiß schon, dass es KEINE Software gibt, die vor Hackern sicher ist - aber man kann so ein Ziel ja zumindest mal anpeilen... :wink:

Bis jetzt befindet sich das Bild (ein Firmenlogo) einfach auf dem Formular selbst...
Das mit der Prüfsumme ist nicht schlecht - wie viel Aufwand ist es denn, diese Abfrage aus zu knocken???

Oder sollte ich doch über Dongles nachdenken - hat da jemand Erfahrungen???


Gruß und danke

Poolspieler


MSCH - Di 13.07.04 17:58

Such dir einen richtig schönen Verschlüsselungsalgo - verrödel damit dein Bild und nimm als Key die Prüfsumme deiner Exe. Mit jeder Änderung der Exe (und der darin enthaltenen Resourcen) kann das Bild nicht mehr aufgelöst werden.
Nimm dazu einen 1024 Bit Schlüssel und DES oder RSA oder oder oder und der Hacker - wozu auch immer - kann es nicht mehr in vernüftiger Zeit decodieren.

Allerdings, warum sollte er das tun? Ist deine Software mehrere tausend Euronen werd?

grez
msch

***SATIRE*** ?


Anonymous - Di 13.07.04 18:09

Poolspieler hat folgendes geschrieben:
wenn ich mich jetzt dumm stelle, aber was ist die Botschaft Deiner Antwort???


Dass das einzige was mit einfällt eine Prüfsumme ist, die sich aber dummerweise auch recht leicht umgehen lässt. Es kommt immer drauf an wie kompliziert Du es machst. Ansatzpunkte um es möglichst schwer zu machen wäre dass Du den Code deiner EXE zur Laufzeit modifizierst und wieder mit dem korrekten Code überschreibst - das würde schonmal alle disassemblisierer abhalten und vielleicht auch den ein oder anderen Debugger in den Wahnsinn treiben. Dann gibts noch eine API-Funktion (IsDebuggerPresent) die bringt aber in der Praxis auch so gut wie nichts, weil man sie hooken kann und schon gibt sie immer false zurück. (Ich meine aber irgendwann mal eine Version davon gesehen zu haben die ohne eine DLL arbeitet)

Zum Thema: Du könntest zum Beispiel Suche in: Delphi-Forum, Delphi-Library MD5 nehmen und den ein bissl modifizieren, damit es nicht ganz so leicht wird, dann aus den Daten deines Bildes eine Prüfsumme bilden und das dann mit einem festen Wert vergleichen. Die Prüfsumme Deiner EXE da rein zu bringen ist aber auch keine gute Idee, weil sich die sobald du die Prüfsumme in Deiner EXE änderst auch wieder ändert. Wenn Du sie extern ablegst hat das ganze keinen Sinn mehr, weil sie total einfach geändert werden kann. (Du hast also prinzipiell das selbe Problem wie der Cracker)

MSCH hat folgendes geschrieben:
... und der Hacker - wozu auch immer - kann es nicht mehr in vernüftiger Zeit decodieren.


IMHO könnte er immernoch die Verschlüsselung komplett entfernen und die Daten direkt unverschlüsselt in deine EXE verpflanzen.


neojones - Di 13.07.04 18:29

http://www.s-a-ve.com/faq/Anti-Cracking-Tips-1.txt
http://www.s-a-ve.com/faq/EXE-Packer_ASPACK.txt
http://www.s-a-ve.com/faq/Anti-Cracking-Tips-2.htm

Ich empfehle diese Links als Lektüre.

Merke: Wer teure Software ohne Dongle anbietet ist selbst schuld.


Poolspieler - Di 13.07.04 19:23

Vielen Dank für eure Antworten.
Um so länger ich über dieses Problem nachdenke, umso mehr komme ich zu dem Schluss, dass neojones Recht hat!!!

Kannst Du und jemand anderes mir sagen, wo man gute Dongles (Preis vs. Leistung) herbekommt - auch erstmal in recht kleinen Stückzahlen?
Funktion Dongle:
Wenn ich das noch richtig weis, dann wird doch die Exe von einem speziellem Programm verschlüsselt (lokal auf dem Entwicklungs-PC).
Diese verschlüsselte Exe wird mit dem Dongle ausgeliefert.
Wenn man dann diese Exe auf dem Userrechner ausführt, wird diese verschlüsselte Exe an das Dongle gesendet, DORT entschlüsselt und ausgeführt.
--> So, oder so ähnlich funktioniert doch ein aktuelles Dongle - oder?

Gruß

Poolspieler (der wenig Ahnung von Dongles hat :shock: )


raziel - Di 13.07.04 19:38

MSCH hat folgendes geschrieben:
Such dir einen richtig schönen Verschlüsselungsalgo - verrödel damit dein Bild und nimm als Key die Prüfsumme deiner Exe. Mit jeder Änderung der Exe (und der darin enthaltenen Resourcen) kann das Bild nicht mehr aufgelöst werden.

Wenn ein Cracker genügend Ahnung von der Sach hat, guckt er in die Exe, macht ne Prüfsumme davon und entschlüsselt das Bild und verschlüsselt sein Eigenes damit..., denn das Bild kann imho nicht in die Prüfsumme mit einbezogen werden!
Wieso ist eigentlich das Bild so wichtig??
Das mit dem Dongle: Ich kenn mich damit auch nich wirklich aus, aber wenn der wirklich so funktioniert, dann kann man theoretisch aus dem Speicher eine dekodierte Fassung der Exe ziehen (irgendwann müssen ALLE Exen dekodiert im Speicher vorhanden sein, um ausgeführt werden zu können - es sei denn sie werden interpretiert - aber das is was anderes).
Der beste Schutz gegen Raubkopien: Machs Freeware oder OpenSource ;-)

raziel


Anonymous - Di 13.07.04 19:42

Wenn die Software wirklich teuer ist, (und du sowieso erstmal nur kleine Stückzahlen verkaufen willst) dann würde ich dir empfehlen jeder Software ein eigenes Wasserzeichen zu verpassen. (Irgendwo im Code wird sich schon ein kleines Stück Code reservieren lassen, das nie ausgeführt wird und wo du irgendwelche Daten reinschreiben kannst. Dann weißt du wenigstens wer für eine eventuelle Raubkopie verantwortlich ist.


Poolspieler - Di 13.07.04 19:45

Nun,
das Bild hat einen wichtigen Hintergrund:
Es soll das Firmenlogo der Firma sein, die mein Programm kauft. Wenn mein Programm dann eine Rechnung oder einen Lieferschein druckt, dann erscheint IMMER das Firmenlogo auf dem Ausdruck.

--> Folglicher weise hilft es einer anderen Firma wenig, wenn sie das Programm raubkopiert, da ja auf den Ausdrucken das Logo einer anderen Firma erscheint...
(Ob ich das Programm jemals verkaufen werde/kann, weiß ich noch nicht, aber ich möchte mir diese Option auf jeden Fall jetzt schon offen halten...)

Ich glaube aber nicht, dass es sooo einfach ist, ein kommerzielles, proffessionelles Dongle zu knacken - von einem Cracker :wink: --> diese Dongles sind, so weit ich weiß auch nicht ganz billig...

Gruß

Poolplayer


Poolspieler - Di 13.07.04 19:48

Moment, das mit dem Wasserzeichen verstehe ich auch nicht ganz - das ist dann doch der selbe Ansatz wie mit der Prüfsumme...

Und irgendwo im Code steht doch auch


Quelltext
1:
2:
3:
4:
if wasserzeichen='schießmichtot' then
  begin
    ...
  end;


Oder verstehe ich Dich jetzt falsch?

Poolspieler

P.s.: Ja, die Software soll schon recht umfangreich werden (mehrere hundert stunden sind geplant...)


Poolspieler - Di 13.07.04 20:04

Hi,
was haltet ihr von folgendem Dongle:
http://www.aladdin.de/produkte/softwaresicherheit/hardlock_hardware.html

Sind fast 400€ (--> 10 Dongles und Starterkit) zu viel, oder sollte man das Geld ausgeben???

:?: Ratlos :cry:

Gruß

Poolspieler


Anonymous - Di 13.07.04 20:27

Wasserzeichen in dieser Form:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
var
 dummy: boolean;
begin
 dummy := false;
 if dummy then
 asm
  db 23412653463323756385342634237217451544, ...
 end;
end;


Natürlich noch etwas komplizierter Verpackt, damit es nicht so leicht bemerkt wird. Außerdem wäre es noch ratsam statt so einem unsinn sinnvolle (Assembler-)Befehle zu nehmen, weil das sonst dem disassembler auffällt. Alternativ könntest du auch ein paar $90s hinten anfügen, dann wird die Wahrscheinlichkeit dass am Ende dadurch der Restliche Code durcheinandergeworfen wird geringer. Vermeiden solltest du dann allerdings die 102 ($66), da könnten ein paar mehr Befehle nicht belegt sein, hab ich aber nicht im Kopf. Gegebenenfalls einfach mal einen Brakepoint auf "if dummy then" setzen und STRG + SHIFT + C drücken.


UGrohne - Di 13.07.04 23:20

Poolspieler hat folgendes geschrieben:
Hi,
was haltet ihr von folgendem Dongle:
http://www.aladdin.de/produkte/softwaresicherheit/hardlock_hardware.html

Sind fast 400? (--> 10 Dongles und Starterkit) zu viel, oder sollte man das Geld ausgeben???

:?: Ratlos :cry:

Gruß

Poolspieler


Von denen bekommst Du auch Test-Kits. Hab auf der Systems damals bei denen nachgefrat und ne Woche später stand das Paket vor meiner Tür. Da ist ein Dongle (Eval-Version, kommtn Popup) drin und die komplette Software. Konnte es aber noch nicht ausführlich testen. Frag einfach mal an, da kriegste bestimmt was. Die sind sehr penetrant, was auch den Kontakt angeht, also mit Anrufen alle paar Monate musste rechnen, is aber auch in Ordnung ;-)


MartinPb - Di 13.07.04 23:25

Einige Fragen:


Wenn du Indy Komponenten in deiner Delphi Version hast, dann wirst du unter anderem den Base64 Encoder als Komponente finden. Mit dieser Komponente kannst du zuerst ein Decoder Programm bauen, das das Bild in Buchstaben-Strings zerlegt und daraus eine Unit erstellt. Das Bild hättest du somit als Buchstaben-Salat. Nach dem Start des Programms müßtest du die Buchstaben nur noch in die Binärform bringen und hättest das Bild zurück. Das kriegt keiner ausgetauscht und schwer ist das auch nicht.


MAlsleben - Mi 14.07.04 10:38

Hi,

also ich halte gar nichts von Dongles. Bei uns haben wir mit den Anwendungen bzw. Rechner, die diesen unbedingt benötigen, nur Probleme; egal was für ein Dongle. Eine Softwarelösung halte ich für besser. Beim Dongle's an der Parallel- Schnittstelle ständig Probleme beim Drucken, bei USB- eventl. nicht zertifizierte Treiber -> bzw. bei uns werden externen Schnittstellen ( außer NW- Karte) gesperrt. Also passt der USB-Dongle auch nicht ins Firmensicherheitskonzept. Also wären für solche Sachen Ausnahmen notwendig, dann macht aber kein Sicherheitskonzept sind. Wenn USB-offen, wird der Rechner mit irgendwelchen Mist von Zuhause , nach den Motto mal ausprobieren, geschossen. Also bei mir hinterläßt eine angebote Software mit Dongle als Schutz immer schon einen Scheiß-Beigeschmack. Es gibt immer ein Produkt, was es ohne kann, dann nehmen wir das.

Gruß Micha.


neojones - Mi 14.07.04 11:18

@MAlsleben: Das ist die Sicht des Käufers einer Software. Der Verkäufer muss sich aber schützen und wenn der Käufer die Software mit Dongle nicht will: Pech gehabt, dann bekommt er die Software halt nicht. Ein Dongle ist ein wichtiger Investitionsschutz für den Hersteller... Denn eine Raubkopie kann über Leben und Tod eines Unternehmens entscheiden, wenn der Hersteller ein kleines Unternehmen ist und z.B. nur 3 oder 4 Kunden hat (Was z.B. bei branchenspezifischen Lösungen durchaus schon eine größe sein kann)

@Poolspieler: Ein Dongle ist auch hackbar, denn man braucht immer ein Software-Segment, das den Dongle anspricht und das kann ein guter Cracker auch lösen. Nichts desto trotz ist es derzeit der sicherste Investitionsschutz. Die Dongles von Aladdin hab ich mir mal angeschaut, sind gut zu konfigurieren, unterstützen Netzwerk-Lizenzmanagement auf Client-Basis, Nachkonfiguration und Paketsteuerung, etc.

Die Dongles von Wibu Systems sind auch nicht schlecht. http://www.wibu.de


Poolspieler - Mi 14.07.04 12:08

Hallo,
vielen Dank erstmal für eure ausführlichen Antworten... :lol:

:arrow: Ich benutze Delphi 5 Professional
:arrow: Das Bild würde wohl so ca. 100 bis 500 kB haben und ein .jpg sein (ein Firmenlogo) halt

Das mit diesen Indykompenten hört sich aber auch sehr "crackbar" an - leider habe ich kein Gefühl dafür, wie einfach es ist, so eine Exe zu disasemblieren - weil ich sowas noch nie gemacht habe :(
Gibts da im Netz der Netze auch ein paar Infos drüber - mit welchen Werkzeugen man sowas macht, wie man vorgeht... etc.
--> Denn wenn man weis, wie diese Leute vorgehen, dann weis man auch, wogegen man sich schützen muss...
( :wink: Die Seiten von neojones werde ich mir mal ausdrucken und in Ruhe durchlesen - am Wochenende :wink: )

Das mit dem Testkit hört sich sehr gut an - da werde ich bei den genannten Firmen mal anfragen...

Dass auch ein Dongle Crackbar ist, ist mir schon klar --> was auf der Computerwelt ist nicht crackbar... :x
Aber die Frage ist, welchen Aufwand muss da jemand reinstecken...
Des weiteren steckt hinter so einem Dongle ja auch eine große Firma, die wohl alles daran setzen wird, dass ihre Dongles "sicher" sind. Alles andere würde den Ruin dieser Firma bedeuten - oder sehe ich da was falsch? Und diesen Service lassen sich die Donglefirmen ja auch gut bezahlen.

Gruß

Poolspieler


Anonymous - Mi 14.07.04 14:22

Also das was MartinPb vorgeschlagen hat ist ganz schnell ersetzt.

In der Regel wird wohl ein Debugger benutzt (was zum Austauschen eines Bildes benutzt wird kann ich dir nicht sagen, ich glaube nicht dass das irgendjemand macht :roll: )

Ein ziemlich guter heißt OllyDbg, kannst ihn Dir ja mal ansehen. Hauptproblem wird wohl sein herauszufinden wo das Bild abgelegt ist. Wie leicht das zu finden ist wird wohl von der Kodierung abhängen (Base64 ist wahrscheinlich so ziemlich das einfachste, weil der Debugger das als refernezierten Textstring erkennt und in einer Liste anzeigen kann)


MartinPb - Mi 14.07.04 21:41

obbschtkuche hat folgendes geschrieben:
Also das was MartinPb vorgeschlagen hat ist ganz schnell ersetzt.


Glaube ich nicht. Erstens ist es kein Bild das du einfach austauschen kannst, sondern ein 700KByte großer String. Zerleg mal den String in viele Teilstrings und verteil diese auf mehrere Funktionen, die du irgendwann wieder zu einem String zusammenfügst. Versuch das zu ersetzten.

Man sollte nicht immer die einfachste Lösung annehmen.


Anonymous - Mi 14.07.04 21:51

Na gut, dann lokalisiere ich eben zuerst die Strings, wenn ich wirklich was ersetzen will dann nehme ich mir auch die Zeit dafür. Als alleiniger Schutz ist das auf jeden Fall ziemlich unsinnig. (Es könnte höchstens sein dass dem einen oder anderen die Lust vergeht)


MartinPb - Mi 14.07.04 23:25

@obbschtkuche

Ich bezweifele, daß du Ahnung vom Thema hast. Du hast ein wenig zugehört, wenn über Hacken und Debugger gesprochen wurde und machst jetzt eine vernünftige Diskusion unmöglich, weil du dich immer dazwischenmischst. Bei dir geht das ruck zuck und das ist ersetzt. Du redest mit obwohl du leider keine Ahnung hast. Und wenn du es nicht glaubst, daß du keine Ahnung hast, dann kann ich dir ein Programm liefern und du kannst mal gucken wie du die Daten austauscht. Ich mach es sogar einfach und schick dir sogar den Quellcode mit, damit du siehst wie ich es gemacht habe. Ich möchte dann sehen wie du die Daten austauscht. Das es geht, bestreite ich nicht, aber es gibt irgendwo ein Punkt wo es sich nicht lohnt. Poolspieler will einfach nur sein Bild so im Programm hinterlassen, daß es nicht einfach ausgetauscht wird. Entweder du machst selbst einen brauchbaren Vorschlag oder du hällst dich zurück. Es geht hier nicht um meinen Vorschlag, aber man sollte Ahnung haben wenn man dazwischen redet.


MAlsleben - Do 15.07.04 10:45

Hi,

also ich würde den Aufwand echt auch von dem Projekt - Umfang, Art der Software und Anzahl der zu erwartenden Verkäufe/Kunden/Interessenten/Installationen abhängig machen. Aufwand /Nutzen müssen immer in einem Verhältnis stehen. Ist eine Software, nur als ein Beispiel, sehr speziell auf einen Kunden zugeschnitten, würde ich da nur sehr wenig Zeit reinstecken, sie gegen Raubkopien zu schützen, wird es ein Massenprodukt, für jedermann interessant, eben mehr.

Gruß Micha.


Anonymous - Do 15.07.04 13:55

MartinPb hat folgendes geschrieben:
Ich bezweifele, daß du Ahnung vom Thema hast.


Na wenn DU das sagst...

MartinPb hat folgendes geschrieben:
Du hast ein wenig zugehört, wenn über Hacken und Debugger gesprochen wurde und machst jetzt eine vernünftige Diskusion unmöglich, weil du dich immer dazwischenmischst.


Ach ja? Ich habe gesagt dass es keinen Großen unterschied macht ob Du jetzt string1 + string2 + string3 + string4 ... machst oder gleich stringXYZ nimmst, weil der einzige Unterschied ist dass ich an 4 verschiedenen Stellen rumfummeln muss und nicht nur an einer...

MartinPb hat folgendes geschrieben:
Bei dir geht das ruck zuck und das ist ersetzt.


Das sagst du jetzt. Ich habe gesagt dass das für jemanden mit Erfahrung kein Großes Hindernis sein wird. (Was bei mir wirklich nicht der Fall ist, aber ich habe immernoch genug um die Situation beurteilen zu können)

MartinPb hat folgendes geschrieben:
Das es geht, bestreite ich nicht, aber es gibt irgendwo ein Punkt wo es sich nicht lohnt.


Wenn DU meine Beiträge gelesen hättest, hättest du auch festgestellt dass ich im Prinzip genau das Selbe gesagt habe. Nur eben dass der Cracker einfach die Lust verliert wenn er haufenweise Stellen patchen muss.

MartinPb hat folgendes geschrieben:
Poolspieler will einfach nur sein Bild so im Programm hinterlassen, daß es nicht einfach ausgetauscht wird. Entweder du machst selbst einen brauchbaren Vorschlag oder du hällst dich zurück. Es geht hier nicht um meinen Vorschlag, aber man sollte Ahnung haben wenn man dazwischen redet.


Zum Glück hast Du so viel Ahnung. Was würden wir nur ohne Dich machen? Wenn du willst wiederhole ich meine Vorschläge nocheinmal:



Du hast genau einen Vorschlag gemacht: Base64. Ich habe gesagt dass ich das für nicht sonderlich sicher halte. Was machst du? Du sagst einfach man sollte es auf mehrere Funktionen verteilen und ich hätte keine Ahnung und sollte nicht "dazwischenreden".

Abgesehen davon: Wenn man Base64 nimmt, kann man das Bild genausogut auch gleich unverschlüsselt lassen und hat sogar 8 bits pro Byte statt nur 6.


Poolspieler - Do 15.07.04 14:27

Hallo,
steitet euch doch nicht... :roll:

Zur kurzen Info:
Ich habe bei aladdin ein Testkit angefordert. Heute hat mich schon ein netter Herr dieser Firma angerufen, da im September eine neue Generation von den Teilen auf den Markt kommt - von der er mir dann den aktuellen Testkit schicken wird. :P
Am Telefon hat man mir gesagt, dass Aladdin ein nettes Tool anbietet, wo man vorne sein Projekt "reinsteckt" und hinten kommt es "verschlüsselt" wieder raus... Naja, so ähnlich :wink:
Ausserdem gibt es noch verschiedene API-Funktionen mit denen man schauen kann, ob das Dongle noch vorhanden ist... etc.

Es klingt echt interessant (und wenn es so funktioniert, ist es das Geld auch wert!)

Wegen dem Bild:
Das war halt auch eine Idee von mir, wie man einen "Kopierschutz" realisieren könnte, doch das Dongle scheint mir dann doch die professionellere Lösung zu sein...

Wegen Aufwand/Nutzen:
Es soll schon einen gewissen Absatz erzielen / zwar ist es kein richtiges Massenprodukt, doch eine gecrackte Version im Netz wäre naütrlich fatal... :evil:


Gruß und danke für die tollen Antworten

Poolspieler