Hallo,
zum Programmabsichern:
Habe mir mal eine Routine gebaut, die eine CRC-Prüfsumme berechnet und an die Exe hängt. Diese Summe wird beim Programmstart überprüft und wenn sie nicht mit der gespeicherten übereinstimmt, startet das Programm nicht, bzw. gibt eine Fehlermeldung aus und beendet sich dann. Bei der Prüfung der CRC-Summe muss halt die Stelle ausgespart bleiben, an der sich die gespeicherte CRC-Summe befindet, da sich die CRC-Summe des Programmes ja (theoretisch) durch das Einfügen ihrer selbst in das Programm wieder verändern würde. Wenn Du das Ganze mit einem Programm machst, das mit UPX gepackt wurde, dann kann auch keiner die in der kompilierten Exe gespeicherten Strings (in Deinem Fall
SQL-Statements) ändern ohne das Programm zu entpacken. Das entpackte Programm läuft aber bereits, wegen der nicht mehr stimmenden CRC-Summe nicht mehr. Es muss also eine neue CRC-Summe für das veränderte und wieder gepackte Programm an die entsprechende Stelle der Exe gepackt werden, damit das Programm mit dem geänderten
SQL wieder läuft. Ist theoretisch möglich, der Aufwand ist aber nicht unerheblich, da nicht nur die Stelle der CRC-Summe "gefunden" werden muss, sondern auch der Alghorhythmus, mit der die CRC-Summen berechnet wird.
Alternative:
SQL's in eine Datenbanktabelle schreiben und erst bei Bedarf daraus lesen, die Parameter mit den entsprechenden Werten versehen und dann ausführen. Im Kompilat des Programmes sind dann keine
SQL's zu finden, die ggfls. manipuliert werden könnten.
Nebeneffekt: Beim Ändern/Wechseln der Datenbank müssen nur die
SQL's in der Datenbanktabelle geändert werden und nicht das Programm. Das Programm kann ggfls. sogar ohne Änderung gegen unterschiedliche Datenbanken laufen, bei denen sich die
SQL-Syntax in mehr oder weniger großem Umfang unterscheidet (soll ja zuweilen schon mal vorkommen
).