Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi RC4 Verschlüsslung für Delphi (https://www.delphipraxis.net/134666-rc4-verschluesslung-fuer-delphi.html)

Berlinermauer 26. Mai 2009 19:01


RC4 Verschlüsslung für Delphi
 
Hi Leute,
um den Code meines Programmes zu schützen, wollte ich es gerne RC4 verschlüsseln.

Zum Verschlüsseln nutze ich den Code aus der CL, ich habe den link gerade nicht parrat.

Mit der folgenden Funktion lese ich ersteinmal das Binär-File ein :

Delphi-Quellcode:
function FileToString(const AFilename: string; StartPos: Integer=0; EndPos: Integer=0): string;
var
  FileStream : TFileStream;
  wlCount: Integer;
begin
  if FileExists(AFilename) then
  begin
    if StartPos < 0 then
      StartPos := 0;

    FileStream := TFileStream.Create(AFilename, fmOpenRead or fmShareDenyWrite);
    try
      if (EndPos <= StartPos) or (EndPos > FileStream.Size) then
        EndPos := FileStream.Size;
      wlCount := EndPos - StartPos;
      if FileStream.Size > StartPos then
      begin
        SetLength(Result, wlCount);
        FileStream.Seek(StartPos, soFromBeginning);
        FileStream.Read(Result[1], wlCount);
      end;
    finally
      FileStream.Free;
    end;
  end
  else
    Result := '';
end;
Der Author hat darauf hingewiesen, dass es zu Fehlern kommen kann, joar und das ist aufgetreten.

MyCode := FileToString(MeineBinärDateiDa);
RC4Init(MyContext,'MeinPasswort'); // Passwort
RC4Code(MyContext,MyCode, MyCryptCode,Length(MyCode)); // Verschlüsseln
RC4Done(MyContext);

So nun bekomme ich eine AccessViolation. Und zwar beim RC4Code.

Lasse ich mir "MyCode" ShowMessagen kommt auch nur "LMZ"

Wie gehe ich das besser an?

hadschi92 26. Mai 2009 19:33

Re: RC4 Verschlüsslung für Delphi
 
Mich interessiert das Ganze auch. Und zwar verwende ich den Code von hier: http://www.delphipraxis.net/internal...&highlight=rc4

Wenn man binäre Dateien also verschlüsseln will, kann man dann direkt TMemoryStream verwenden? Ich denke nicht, aber bis jetzt sieht mein Code so aus:
Delphi-Quellcode:
var FileToEncrypt, EncyptedFile: TMemoryStream;
    EncryptingFile: TRC4Context;
begin
  RC4Init(EncryptingFile,'Passwort');
  RC4Code(EncryptingFile, FileToEncrypt, EncyptedFile, FileToEncrypt.Size);
  Rc4Done(EncryptingFile);
end;
Ich werde auch nicht ganz schlau aus dem Verschlüsselungsalgorithmus, wird nur ein Zeichen von Source verschlüsselt oder die ganze Datei? Und die Datei mit oben genannter Funktion in einen String umzuwandeln wird auch nicht das wahre sein, dabei treten bestimmt Fehler auf...

Edit: Wir arbeiten an dem gleichen Problem, deshalb wird es wohl ok sein wenn wir im gleichen Thread schreiben.

jaenicke 26. Mai 2009 19:52

Re: RC4 Verschlüsslung für Delphi
 
Zum Thema Datei verschlüsseln:
http://www.delphi-forum.de/viewtopic...=563921#563921
Da wurde gerade vor ein paar Minuten eine entsprechende Unit gepostet, die direkt mit Streams arbeitet. ;-)

Berlinermauer 26. Mai 2009 20:19

Re: RC4 Verschlüsslung für Delphi
 
Danke bei mir funktioniert es jetzt.

Richtig toll dass ihr immer helft :D
:dp:

Edit: Sorry, beim decrypten nen kleiner Fehler :

Delphi-Quellcode:
  RC4Init(MyContext, ProgramKey);
  RC4Code(MyContext, ProgramCode, ProgramOrginalCode, Length(ProgramCode));
  RC4Done(MyContext);
Code:
  [DCC Fehler] Project1.dpr(23): E2033 Die Typen der tatsächlichen und formalen Var-Parameter müssen übereinstimmen

Berlinermauer 26. Mai 2009 21:18

Re: RC4 Verschlüsslung für Delphi
 
oder kann es daran liegen dass ich versuche es mit ExeMod als String reinzuschreiben?

Wäre es klüger "Add2Exe" oder so zu benutzen? also kein String sondern das File?

jaenicke 26. Mai 2009 22:01

Re: RC4 Verschlüsslung für Delphi
 
Für Dateien siehe dieses Beispiel:
http://www.delphi-forum.de/viewtopic...=563952#563952

Und wie meinst du das zuletzt? An die Exe anhängen?

Berlinermauer 26. Mai 2009 23:33

Re: RC4 Verschlüsslung für Delphi
 
ok habs rausgefunden.

Nur noch ein Problem :

Exemod!
Ich möchte die Daten anhängen,
und das funktioniert auch recht gut,
nur wenn ich AddFile2Exe mache, dann fügt er sie zu dem jetztigen hinzu.
D.H. Er modifiziert nicht file b, sondern file a.

Leider habe ich aber auch keinen einfluss darauf, welches File genommen wird.

Ich habe versucht ReadExe nen parameter zu verpassen, aber das gibt das totale chaos
DH gibt es ne Möglichkeit ReadExe und AlterExe auf eine Andere Datei anzupassen als Application.Exename

Oder Stream2Exe, dies modifiziert nur wieder sich selbst.

Das möchte ich aber nicht.

Berlinermauer 27. Mai 2009 08:51

Re: RC4 Verschlüsslung für Delphi
 
ohje wenn ich jetzt lese was ich da gestern noch zusammengeschrieben hab ^^:

Also das Problem ist das folgende, dass ExeMod manche Methoden nur auf sich selbst (also die Anwendung die gerade läuft), ausführt.

Diese heißen dann immer "XXXXXXX2Exe", bsp. "AddFile2Exe", so nun wollte ich aber sowas wie "AddFile2File",da ich dort angeben kann,
in welche Datei das rein soll. Technisch dürfte das kein Problem sein, denn wenn man strings in andere exen schreiben kann warum nich dateien?

Dann habe ich noch gesehen es gibt ein "Stream2Exe", das wäre mir am liebsten, wenn ich damit "fremde" Dateien modifizieren könnte

jaenicke 27. Mai 2009 10:36

Re: RC4 Verschlüsslung für Delphi
 
Nimm doch einfach zwei FileStreams und kopiere es selbst (zusammen mit anderen Daten ggf.) rein (CopyFrom), bei einer fremden Exe ist das doch sowieso kein Problem.

Berlinermauer 27. Mai 2009 10:39

Re: RC4 Verschlüsslung für Delphi
 
naja ich hätte schon gerne den ExeMod weil ich es damit wieder gut auslesen kann


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:00 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