AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

DFM-Dateien verschlüsseln?

Ein Thema von a.def · begonnen am 30. Apr 2017 · letzter Beitrag vom 1. Mai 2017
Antwort Antwort
Seite 3 von 4     123 4      
a.def
(Gast)

n/a Beiträge
 
#21

AW: DFM-Dateien verschlüsseln?

  Alt 1. Mai 2017, 02:06
Klingt kompliziert. Ich habe das jetzt anders aber schlechter gemacht. Funktioniert trotzdem.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#22

AW: DFM-Dateien verschlüsseln?

  Alt 1. Mai 2017, 02:39
Und wie hast du es gemacht?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#23

AW: DFM-Dateien verschlüsseln?

  Alt 1. Mai 2017, 02:56
Meine Methode ist überhauptnicht kompliziert.

Man nehme:

'nen FileStream und lese in den die EXE ein.
Lasse die MD5-Checksumme erstellen.

Gehe ans Ende des FileStreams.

Schreibe die MD5-Checksumme.
Die EXE wird dadurch um die 16 Byte der MD5-Checksumme "länger".

Zum Prüfen:

Man nehme:

'nen FileStream und lese in den die EXE ein.
Lasse die MD5-Checksumme über den FileStream, abzüglich der letzten 16 Byte, erstellen.

Lese die 16 Byte der EXE.

Vergleiche diese 16 Byte mit der MD5-Checksumme.

Bei Übereinstimmung ist alles ok, ansonsten halt beliebige Reaktion auf die Veränderung durchführen.
  Mit Zitat antworten Zitat
Benutzerbild von mschaefer
mschaefer

Registriert seit: 4. Feb 2003
Ort: Hannover
2.032 Beiträge
 
Delphi 12 Athens
 
#24

AW: DFM-Dateien verschlüsseln?

  Alt 1. Mai 2017, 05:35
Dfm2Pas kann Ressourcen aus EXE auslesen.
Martin Schaefer
Phaeno
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#25

AW: DFM-Dateien verschlüsseln?

  Alt 1. Mai 2017, 06:40
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?
Delphi-Referenz durchsuchenTestStreamFormat
ObjectTextToResource
Delphi-Referenz durchsuchenObjectResourceToText
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)
MSDN-Library durchsuchenUpdateResource 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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu ( 1. Mai 2017 um 06:49 Uhr)
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.611 Beiträge
 
Delphi 10.3 Rio
 
#26

AW: DFM-Dateien verschlüsseln?

  Alt 1. Mai 2017, 11:18
Es ist ja schön, dass sich da so viele Leute Gedanken darüber machen. Ok, einen MD5-Hash für die Exe zu erstellen um zu prüfen ob nichts verändert wurde (Lizenzumgehung oder was weiß ich) ist ja ok.

Aber @a.def: Schreibst du wirklich ein so tolles und einzigartiges Programm als das es sich lohnt das zu klauen und zu kopieren? Ich meine ich habe damit keine Erfahrung weil ich bisher immer nur Software für mich privat oder für unsere Firma entwickelt habe. Verkauft oder öffentlich zur Verfügung gestellt wurde da aber noch nichts.

Aber muss man sich da wirklich Gedanken drum machen? Wenn jemand dein Programm wirklich knacken will und den Aufwand betreibt, die Ressourcen zu ändern, dann wird er bestimmt auch noch die MD5 Prüfung außer Betrieb nehmen (können).

Nur meine Meinung. Kann natürlich alles ganz anders sein.
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#27

AW: DFM-Dateien verschlüsseln?

  Alt 1. Mai 2017, 11:28
Aus meiner Sicht ist das 'ne interessante Spielerei.
Ernsthaft benötigen tue ich das nicht.
  Mit Zitat antworten Zitat
Benutzerbild von mschaefer
mschaefer

Registriert seit: 4. Feb 2003
Ort: Hannover
2.032 Beiträge
 
Delphi 12 Athens
 
#28

AW: DFM-Dateien verschlüsseln?

  Alt 1. Mai 2017, 11:43
Es sei denn, die IDE verabschiedet sich weil sie die DFM Datei nicht mehr lesen kann. Dann wäre es vielleicht interessant wenn man das Formular direkt aus Quellcode erstellen koennte, dann eventuell auch mit Verschlüsselung
Martin Schaefer
Phaeno
  Mit Zitat antworten Zitat
Michael II

Registriert seit: 1. Dez 2012
Ort: CH BE Eriswil
760 Beiträge
 
Delphi 11 Alexandria
 
#29

AW: DFM-Dateien verschlüsseln?

  Alt 1. Mai 2017, 12:10
Zitat:
Es sei denn, die IDE verabschiedet sich weil sie die DFM Datei nicht mehr lesen kann. Dann wäre es vielleicht interessant wenn man das Formular direkt aus Quellcode erstellen koennte, dann eventuell auch mit Verschlüsselung
Phantastische Idee - bisher habe ich mich immer gefragt, wie ich Backups meiner Formulardateien erstellen soll, damit ich sie allenfalls bei IDE Ladeproblemen wiederherstellen kann. Jetzt sehe ich endlich einen Weg.
Michael Gasser
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#30

AW: DFM-Dateien verschlüsseln?

  Alt 1. Mai 2017, 12:16
Aktuelle Delphi-Versionen bieten eine interessante Schnittstelle, mit der man nach dem Lesen der DFM noch weitere DFM-Resourcen auf das Form loslassen kann. Das wird z.B. in FMX zur Verwaltung der platform-spezifischen Eigenschaften eines Forms verwendet, ist aber keineswegs auf FMX beschränkt.

Es gibt zwei Herangehensweisen:
  1. man überschreibt die Methode GetDeltaStreams
  2. man verdrahtet den (protected) Event OnGetDeltaStreams

In diesem Beispiel verwende ich den override-Mechanismus, um eine (hier in Textform vorliegende) DFM-Beschreibung beim Laden in das Form zu injizieren. Da es sich hier faktisch um ein geerbtes Form handelt, müssen die Instanzen alle inherited sein. Durch ein temporär erstelltes vererbtes Form, das nicht in die Exe eingelinkt wird, kann man den verändeten DFM-Inhalt auch recht einfach herleiten.

Delphi-Quellcode:
type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
  protected
    procedure GetDeltaStreams(Proc: TGetStreamProc); override;
  end;

const
  cDFM =
'inherited Form1: TForm1' + sLineBreak +
' Left = 0' + sLineBreak +
' Top = 0' + sLineBreak +
' Caption = ''Form1''' + sLineBreak +
' ClientHeight = 299' + sLineBreak +
' ClientWidth = 635' + sLineBreak +
' Color = clBtnFace' + sLineBreak +
' Font.Charset = DEFAULT_CHARSET' + sLineBreak +
' Font.Color = clWindowText' + sLineBreak +
' Font.Height = -11' + sLineBreak +
' Font.Name = ''Tahoma''' + sLineBreak +
' Font.Style = []' + sLineBreak +
' OldCreateOrder = False' + sLineBreak +
' PixelsPerInch = 96' + sLineBreak +
' TextHeight = 13' + sLineBreak +
' inherited Button1: TButton' + sLineBreak +
' Left = 392' + sLineBreak +
' Top = 48' + sLineBreak +
' Width = 75' + sLineBreak +
' Height = 25' + sLineBreak +
' Caption = ''Button1''' + sLineBreak +
' TabOrder = 0' + sLineBreak +
' OnClick = Button1Click' + sLineBreak +
' end' + sLineBreak +
' inherited Memo1: TMemo' + sLineBreak +
' Left = 392' + sLineBreak +
' Top = 168' + sLineBreak +
' Width = 185' + sLineBreak +
' Height = 89' + sLineBreak +
' Lines.Strings = (' + sLineBreak +
' ''Der Brite Richard Browning hat am ''' + sLineBreak +
' ''Rande der Technology, ''' + sLineBreak +
' ''Entertainment and Design ''' + sLineBreak +
' ''conference in Vancouver seinen ''' + sLineBreak +
' ''"Daedalus Suit" im Rahmen einer ''' + sLineBreak +
' ''Live-Demo vorgestellt. Der Anzug ''' + sLineBreak +
' ''besteht aus einem verst''#228''rkenden ''' + sLineBreak +
' ''Exoskelett, das mit sechs ''' + sLineBreak +
' ''D''#252''sentriebwerken best''#252''ckt ist. ''' + sLineBreak +
' ''Momentan taugt das Ganze f''#252''r eine ''' + sLineBreak +
' ''Flugdauer von bis zu 10 Minuten, ''' + sLineBreak +
' ''berichtet BBC online.'')' + sLineBreak +
' TabOrder = 1' + sLineBreak +
' end' + sLineBreak +
'end';

procedure TForm1.GetDeltaStreams(Proc: TGetStreamProc);
var
  stream: TMemoryStream;
  strS: TStringStream;
begin
  inherited;
  strS := TStringStream.Create(cDFM);
  try
    stream := TMemoryStream.Create;
    try
      ObjectTextToBinary(strS, stream);
      stream.Position := 0;
      Proc(stream);
    finally
      stream.Free;
    end;
  finally
    strS.Free;
  end;
end;
Hier noch die Original-DFM als Text:
Code:
object Form1: TForm1
  Left = 0
  Top = 0
  Caption = 'Form1'
  ClientHeight = 299
  ClientWidth = 635
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  OldCreateOrder = False
  PixelsPerInch = 96
  TextHeight = 13
  object Button1: TButton
    Left = 40
    Top = 24
    Width = 75
    Height = 25
    Caption = 'Button1'
    TabOrder = 0
    OnClick = Button1Click
  end
  object Memo1: TMemo
    Left = 40
    Top = 55
    Width = 185
    Height = 89
    TabOrder = 1
  end
end
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 4     123 4      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:29 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz