AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein C# nach Delphi aber keine Ahnung wie?
Thema durchsuchen
Ansicht
Themen-Optionen

C# nach Delphi aber keine Ahnung wie?

Ein Thema von DieDolly · begonnen am 16. Jun 2019 · letzter Beitrag vom 16. Jun 2019
Antwort Antwort
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#1

AW: C# nach Delphi aber keine Ahnung wie?

  Alt 16. Jun 2019, 16:01
 Res: TBytes; Hier mal alles

Kann das vielleicht daran liegen, weil ich Res auf Länge 4096 setze? Ich hab das einfach mal so groß gesetzt weil ich nicht weiß wieviel da rein muss.

Delphi-Quellcode:
procedure TFormMain.Button4Click(Sender: TObject);
const
 keyBytes: array [0 .. 31] of Byte = ($2A, $5F, $CB, $17, $91, 210, $2F, $B6, 2, $45, $B3, $D8, $36, $9E, $D0, $B2, $C2, $73, $71, $56, $3F, $BF, $1F, 60, $9E, $DF, $6B, $11, 130,
  90, $5D, 10);

var
 FS: TFileStream;
 Key, EncryptedData: TBytes;
 DecompressionStream, ZLibStream: TZDecompressionStream;
 OutputStream: TFileStream;
 ctx: TAESContext;
 aesblck: TAESBlock;
 i: Integer;
 Res: TBytes;
 BytesStream: TBytesStream;
 MemoryStream: TMemoryStream;

var
 fileContent, initVector: TArray<Byte>;
begin
 {*
  fileContent := TFile.ReadAllBytes('enc.txt');
  SetLength(EncryptedData, length(fileContent) - $38);
  SetLength(initVector, $10);
  TArray.Copy<Byte>(fileContent, EncryptedData, $38, 0, length(EncryptedData));
  TArray.Copy<Byte>(fileContent, initVector, $24, 0, $10);

  for i := 1 to 16 do
  aesblck[i - 1] := Byte(initVector[i]);
  ctx.IV := aesblck;
  AES_CBC_Init_Decr(keyBytes, 128, aesblck, ctx);
  SetLength(Res, 4096);
  AES_CBC_Decrypt(@EncryptedData[1], @Res[1], length(EncryptedData), ctx);

  Exit;
  *}


 FS := TFileStream.Create('enc.txt', fmOpenRead);
 try
  FS.Seek($24, soBeginning);
  SetLength(Key, 16);
  FS.Read(Key[0], length(Key));

  FS.Seek($38, soBeginning);
  SetLength(EncryptedData, FS.Size - $38);
  FS.Read(EncryptedData[0], length(EncryptedData));

  for i := 1 to 16 do
   aesblck[i - 1] := Byte(Key[i]);
  ctx.IV := aesblck;
  AES_CBC_Init_Decr(keyBytes, 128, aesblck, ctx);
  SetLength(Res, 4096);
  AES_CBC_Decrypt(@EncryptedData[1], @Res[1], length(EncryptedData), ctx);
 finally
  FS.Free;
 end;
 // Die Resultate beider Codeblöcke (oben der kommentierte und der danach) sind gleich

 BytesStream := TBytesStream.Create(Res);
 try
  ShowMessage(BytesStream.Size.ToString);

  ZLibStream := TZDecompressionStream.Create(BytesStream);
  try
   ShowMessage(ZLibStream.Size.ToString);

   OutputStream := TFileStream.Create('dec.txt', fmCreate);
   try
    OutputStream.CopyFrom(ZLibStream, 0);
   finally
    OutputStream.Free;
   end;
  finally
   ZLibStream.Free;
  end;
 finally
  BytesStream.Free;
 end;

end;
Hier etwas sauberer und die Ausgabedatei ist trotzdem 0 byte groß. Das Problem scheint TZDecompressionStream zu sein. Oder meine 4096 feste Arraygröße.
Aber selbst wenn ich Res auf FS.Size setze ist die Ausgabedatei leer.
Delphi-Quellcode:
 MemoryStream := TMemoryStream.Create;
 try
  MemoryStream.Write(Res[1], Length(Res));

  ZLibStream := TZDecompressionStream.Create(MemoryStream);
  try
   OutputStream := TFileStream.Create('dec.txt', fmCreate);
   try
    OutputStream.CopyFrom(ZLibStream, 0);
   finally
    OutputStream.Free;
   end;
  finally
   ZLibStream.Free;
  end;
 finally
  MemoryStream.Free;
 end;

Geändert von DieDolly (16. Jun 2019 um 16:22 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#2

AW: C# nach Delphi aber keine Ahnung wie?

  Alt 16. Jun 2019, 16:31
Wenn du jetzt TBytes verwendest, muss hier AES_CBC_Decrypt(@EncryptedData[1], @Res[1], length(EncryptedData), ctx); auf jeden Fall der Index schonmal jetzt 0 sein - sowohl bei EncryptedData , als auch bei Res .

Die Zuweisung ctx.IV := aesblck ist überflüssig.

An dieser Stelle steht nicht der Key, sondern der IV!
Delphi-Quellcode:
FS.Seek($24, soBeginning);
SetLength(Key, 16);
FS.Read(Key[0], length(Key));
Auch würde ich Res definitiv nicht hardcoded auf 4096 Bytes festlegen. Vorher hattest du doch bereits einmal korrekt die Länge mit FS.Size - $38 festgelegt. Wenn am Ende noch zufällige Daten stehen kann hier auch später die Dekompression evtl. fehlschlagen.

Wenn es danach immer noch nicht klappt, kann es natürlich durchaus sein, dass das Entschlüsseln bereits fehlschlägt (es werden zwar Daten entschlüsselt, aber ob die Blöcke später korrekt sind weißt du nicht - könnte man aber prüfen, indem man dem C# Programm beibringt mal einen Zwischenstand zu printen).
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#3

AW: C# nach Delphi aber keine Ahnung wie?

  Alt 16. Jun 2019, 16:33
Kannst du mal deine Testdatei hochladen?
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#4

AW: C# nach Delphi aber keine Ahnung wie?

  Alt 16. Jun 2019, 16:34
Ich bekomme jetzt zwar eine Ausgabe aber die sieht in etwa so aus
Code:
¶•tø–ÙØçèØ¡ŠœÀ!xéâ¬*†W³`Y´ÞÎüX™©é¾NÞ–ˆÕ*ºµàrC¶'bJTEÂ
usw.

Das Ur-alt-Originalprogramm ist übrigens in Delphi geschrieben. Dummerweise wurde das Repo gelöscht!
Die Exe habe ich noch.

Eine sekunde bitte ich muss mir gerade die Edits durchlesen.
Zitat:
An dieser Stelle steht nicht der Key, sondern der IV!
In "Key" stand der IV drin. Nur der Variablenname ist falsch.

- Anhang gelöscht

Geändert von DieDolly (17. Jun 2019 um 07:39 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


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 13:16 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz