Zitat von
Apollonius:
Das ist jetzt mit meiner ursprünglichen Methode tatsächlich schwierig. Es geht aber auf andere Weise recht einfach: Über den Haltepunkt bei TControl.DefaultHandler erhält man alle möglichen Adressen des Labels. Diese notiert man sich. Dann wartet man, bis man am Ende der OnClick-Routine des Buttons ist (Hast du diese eigentlich von Hand verändert? Dieses einfach call direkt gefolgt von einem ret sieht nicht nach dem Delphi-Compiler aus.) und schaut dort nach, ob an den notierten Adressen tatsächlich ein Label steht. Falls ja, ändert man einfach die Zeichenkette, auf die FText zeigt. An dieser Stelle sind alle deine Überprüfungen bereits abgelaufen.
Also die Exe an sich hab ich nachträglich nicht mehr geändert, nur noch zwei Resourcen gelöscht, sonst nichts. Also das was am Ende an Code rauskommt ist wirklich vom Delphi-Compiler. Im Quelltext gibt es kaum direkte Assembler-Anweisen. Die Exe ist ja relativ groß und das hat auch einen Grund.
Da ich ja Labels verwende, ist die Anwendung trotzdem relativ einfach zu knacken, da man ja - wie du schon sagst, einfach WM_GETTEXT und WM_SETTEXT abfangen und weiterverarbeiten kann. Wenn ich das ganze aber z.B. per
OpenGL alles selbst zeichne und die Windows-Botschaften nichts mehr mit der Anzeige zu tun haben, wirds wahrscheinlich noch schwerer. Ich hab die Anwendung innerhalb von ca. 20 Minuten zusammengestrickt, das wäre mit OGL ohne entsprechendes Framework nicht so schnell gegangen.
Das mit Pointer auf Label überprüfen ist eine sehr gute Idee, da diese Methode bei mir im Moment noch funktioniert. Ich erstelle zwar bei jedem Button-Click jeweils ein neues Label und lösche die alten, jedoch bekommen die neuen Labels natürlich auch noch die WM_SETTEXT-Anweisungen.
Jetzt ist natürlich noch die Frage ob man durch Modifizieren des Assembler-Codes relativ einfach das Knacken kann, also sozusagen wirklich als Crack. Also wenn interesse daran besteht, kann ich meine Methode auch verraten.
[Edit]Ach noch was: wenn du den Label-Text im Nachhinein drückst änderst und nochmal auf "Anzeigen" klickst, sollte es einen Fehler ausgeben[/Edit]