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
Schokohase
(Gast)

n/a Beiträge
 
#1

AW: C# nach Delphi aber keine Ahnung wie?

  Alt 16. Jun 2019, 14:20
Das ist doch gar nicht so schwer mit der Position.

Es gibt da eine Folge von Bytes (Stream) und ab der Position 24hex kommen 10hex Bytes und die repräsentieren den Initialisierungs-Vektor.

Und ab der Position 38hex fangen die echten Daten an.

Delphi-Quellcode:
var
  file_to_load: string;
  bytes, destinationArray, buffer: TArray<byte>;
begin
  bytes := TFile.ReadAllBytes(file_to_load);
  SetLength(buffer,Length(bytes)-$38);
  SetLength(destinationArray,$10);
  TArray.Copy<Byte>(bytes,buffer,$38,0,Length(buffer));
  TArray.Copy<Byte>(bytes,destinationArray,$24,0,$10);
end;

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

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

AW: C# nach Delphi aber keine Ahnung wie?

  Alt 16. Jun 2019, 14:32
Aufbauend auf beider eurer Beispiel habe ich das hier erweitert.
Delphi-Quellcode:
var
 ctx: TAESContext;
 aesblck: TAESBlock;
 i: Integer;
 Res: RawByteString;
begin
 // Das ist scheinbar notwendig ( https://www.delphipraxis.net/1208740-post21.html )
 for i := 1 to 16 do
  aesblck[i - 1] := Byte(initVector[i]);

 ctx.IV := aesblck;
 AES_CBC_Init_Decr(initVector, 256, aesblck, ctx);
 AES_CBC_Decrypt(@EncryptedData[1], @Res[1], Length(EncryptedData), ctx);
Irgendwas mache ich aber noch falsch denn Res ist 0 Zeichen lang.

Im original gibt es eine Key- und BlockSize sowie Padding. Was auch immer die bedeuten.
  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, 14:36
Im original gibt es eine Key- und BlockSize sowie Padding. Was auch immer die bedeuten.
Die befinden sich evtl. auch im Context? Ich kenne die Lib von Wolfgang Erhardt leider nicht.
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, 14:38
Der AESContext ist folgendermaßen deklariert
Delphi-Quellcode:
  TAESContext = packed record
                  RK : TKeyArray; {Key (encr. or decr.)   }
                  IV : TAESBlock; {IV or CTR              }
                  buf : TAESBlock; {Work buffer            }
                  bLen : word; {Bytes used in buf      }
                  Rounds : word; {Number of rounds       }
                  KeyBits : word; {Number of bits in key  }
                  Decrypt : byte; {<>0 if decrypting key  }
                  Flag : byte; {Bit 1: Short block     }
                  IncProc : TIncProc; {Increment proc CTR-Mode}
                end;
Die KeySize (0x80) sind vermutlich 128. Aber was auch immer die BlockSize ist und das Padding, das gibt es bei den WE's glaube ich nicht.
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

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

AW: C# nach Delphi aber keine Ahnung wie?

  Alt 16. Jun 2019, 14:44
function AES_CBC_Init_Decr(const Key; KeyBits: word; const IV: TAESBlock; var ctx: TAESContext): integer;

Hier musst du sowohl Key, KeyBits (= 128) und IV übergeben. Den Context solltest du meiner Meinung nach nicht per Hand modifizieren. BlockSize sollte normalerweise automatisch gleich der KeySize sein bei CBC. Müsstest du einfach mal probieren, ob was Sinnvolles als Resultat bei rauskommt.

Edit:
Auch wenn es egal sein sollte. Nimm bitte `TBytes` oder `TArray<Byte>` als Typ für Binärdaten anstelle von `RawByteString`.

Edit 2:
Die Rückgabe der AES Funktionen geben dir auch einen Fehlercode. Eventuell den mal prüfen, wenn im Output Buffer komplett gar nichts rauskommt.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)

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

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

AW: C# nach Delphi aber keine Ahnung wie?

  Alt 16. Jun 2019, 14:46
Zitat:
Den Context solltest du meiner Meinung nach nicht per Hand modifizieren.
Das muss man scheinbar. Wenn wenn ich den IV im Context nicht setze, dann ist der übergebene Context leer.

Delphi-Quellcode:
 for i := 1 to 16 do
  aesblck[i - 1] := Byte(initVector[i]);

 ctx.IV := aesblck;
 AES_CBC_Init_Decr(initVector, 128, aesblck, ctx);
 AES_CBC_Decrypt(@EncryptedData[1], @Res[1], Length(EncryptedData), ctx);
Zitat:
Müsstest du einfach mal probieren, ob was Sinnvolles als Resultat bei rauskommt.
Bisher bekomme ich gar keins
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

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

AW: C# nach Delphi aber keine Ahnung wie?

  Alt 16. Jun 2019, 14:49
Vergleiche mal deinen Aufruf:
AES_CBC_Init_Decr(initVector, 128, aesblck, ctx);

mit der Funktionsdefinition:
function AES_CBC_Init_Decr(const Key; KeyBits: word; const IV: TAESBlock; var ctx: TAESContext): integer;

Richtig wäre:
AES_CBC_Init_Decr(keyBytes, 128, aesblk, ctx);
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  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 08:39 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