Ich hab mir mal die Mühe gemacht, den "Schutz" aus der orginal .exe, die du mitgelieferst hast rauszupatchen.
Die Zeile das der Panel grün werden soll sieht übrigens so aus, wenn deine Überprüfungen fehl schlagen wird die einfach übersprungen.
Code:
00451644 BA 00800000 MOV EDX,8000
Änderung in Blau:
Code:
00451644 BA 0000FF00 MOV EDX,0FF0000
Code fürs Überspringen:
Code:
0045162B 75 27 JNZ SHORT Serial.00451654 //springen wenn nicht gleich
geändert in:
Code:
0045162B EB 17 JMP SHORT Serial.00451644 //immer zur Farbänderung springen (außer es tritt vorher eine Exeption auf, weil nicht auf Buchstaben u. ä. geprüft wird)
womit das ganze immer grün (jetzt blau) wird.
Und deswegen macht eine solche Art von Schutz keinen Sinn, sollte man ihn dennoch unbedingt wollen, so sollte man das die Prozeduren zumindest nicht ins published (wo sie ohnehin nicht hingehören) oder public schreiben, weil sie dort besonders leicht auszulesen sind und die .exe mit UPX oder ähnlichem komprimieren (sehr leicht wieder dekomprimierbar), um wenigstens sehr dumme Versuche des Patchens zu verhindern.
Außerdem lassen sich anhand des Codesschnipsels (oder des zugehörigen Assemblercodes):
Delphi-Quellcode:
res := PartA and Safekey;
If Res<>PartB then exit;
res := PartA xor PartB;
If Res<>PartC then exit;
res := PartA xor Safekey xor PartC;
If Res<>PartD then exit;
Panel1.Color := clGreen;
in Kombination mit einem richtigen Key gute Rückschlüsse auf den im Programm verwendeten Safekey ziehen, abgesehen davon dass er in diesem Fall hardcoded im Programm ist.
[Edit]kleiner Rechtschreibfehler