ein kleiner Test lädt zwar meine
DFM-Resource aber ich bekomme nur 2 Zeilen ausgegeben und die noch mit falschen Zeichen:
Warum hatte ich vorher schon geschrieben dass die
DFM-Ressourcen in der EXE binär sind?
TestStreamFormat
ObjectTextToResource
ObjectResourceToText
ObjectBinaryToText
ObjectTextToBinary
Delphi-Quellcode:
Stream := TResourceStream.Create(...);
Form := TXyzForm.Create;
Form.ReadComponent(Stream);
Vorher aber natürlich das Laden der
DFM unterbinden, siehe TCustomForm.Create .
Bzw. durch eine leere Dummy-Ressource ersetzen, dann darf aber nichts in OnCreate auf die Form zugeifen.
Oder beim Create der TForm vorgaukeln es wäre im FormDesigner.
Delphi-Quellcode:
Form := TXyzForm(TXyzForm.NewInstance);
// csDesigned in Form setzen
Form.Create(Self);
// csDesigned in Form entfernen
Form.ReadComponent(Stream);
Form.OnCreate(Form); // OnCreate wurde vorher aber auch schon einmal im Create aufgerufen
Ich weiß, Instance.Create ist eigentlich "falsch" und es müsste Class.Create heißen, aaaaaaaaaber ... siehe NewInstance
Und das Verschlüssen dann natürlich von außen. (eine zweite EXE im AfterBuild aufrufen, die das macht)
UpdateResource usw.
Statt die Form selber zu laden/entschlüsseln, könnte man auch die Resource-APIs hooken, dort entschlüsseln und das Laden der
DFM weiterhin ganz normal TForm erledigen lassen welches dabei die entschlüsselte Ressource bekommt.
Weniger Aufwändiger ist nur das Hashen, statt dem Verschlüsseln.