AGB  ·  Datenschutz  ·  Impressum  







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

Resource entschlüsseln und laden

Ein Thema von Uncle Cracker · begonnen am 21. Jul 2004 · letzter Beitrag vom 22. Aug 2004
Antwort Antwort
Benutzerbild von Uncle Cracker
Uncle Cracker

Registriert seit: 30. Mär 2003
Ort: Freital
694 Beiträge
 
#1

Resource entschlüsseln und laden

  Alt 21. Jul 2004, 14:46
Ich habe folgenden Quelltext gefunden um eine WAV-Datei aus einer Resource zuladen und direkt abzuspielen ohne sie auf der Festplatte zwischen zuspeichern. Ich habe die WAV-Datei folgendermaßen verschlüsselt:

Delphi-Quellcode:
type
  TWordTriple = Array[0..2] of Word;

function MemoryEncrypt(Src: Pointer; SrcSize: Cardinal; Target: Pointer; TargetSize: Cardinal; Key: TWordTriple): boolean;
var
  pIn, pOut: ^byte;
  i : Cardinal;
begin
  if SrcSize = TargetSize then
  begin
    pIn := Src;
    pOut := Target;
    for i := 1 to SrcSize do
    begin
      pOut^ := pIn^ xor (Key[2] shr 8);
      Key[2] := Byte(pIn^ + Key[2]) * Key[0] + Key[1];
      inc(pIn);
      inc(pOut);
    end;
    Result := True;
  end else
    Result := False;
end;

function FileCrypt(InFile, OutFile: String; Key: TWordTriple): boolean;
var
  MIn, MOut: TMemoryStream;
begin
  MIn := TMemoryStream.Create;
  MOut := TMemoryStream.Create;
  Try
    MIn.LoadFromFile(InFile);
    MOut.SetSize(MIn.Size);
    Result := MemoryEncrypt(MIn.Memory, MIn.Size, MOut.Memory, MOut.Size, Key)
    MOut.SaveToFile(OutFile);
  finally
    MOut.Free;
    MIn.Free;
  end;
end;

function FileEncrypt(InFile, OutFile: String; Key: TWordTriple): boolean;
begin
  Result := FileCrypt(InFile, OutFile, Key);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
Key : TWordTriple;
begin
Key[0] := 25;
Key[1] := 11;
Key[2] := 1987;
FileEncrypt('C:\Test.wav','C:\Test.wav',Key)
end;
Das wäre die Funktion zum entschlüsseln:

Delphi-Quellcode:
function MemoryDecrypt(Src: Pointer; SrcSize: Cardinal; Target: Pointer; TargetSize: Cardinal; Key: TWordTriple): boolean;
var
  pIn, pOut: ^byte;
  i : Cardinal;
begin
  if SrcSize = TargetSize then
  begin
    pIn := Src;
    pOut := Target;
    for i := 1 to SrcSize do
    begin
      pOut^ := pIn^ xor (Key[2] shr 8);
      Key[2] := byte(pOut^ + Key[2]) * Key[0] + Key[1];
      inc(pIn);
      inc(pOut);
    end;
    Result := True;
  end else
    Result := False;
end;
Ich würde diese Funktion zum entschlüssen der Datei gern für diese Funktion zum laden und abspielen der WAV-Datei nutzten, aber irgendwie bekomme ich das nicht hin. Hier erstmal die Funktion zum laden und abspielen:

Delphi-Quellcode:
{$R wav.res}

var
  sample_wav: pointer;

function GetResourceAsPointer(ResName: pchar; ResType: pchar;
                              out Size: longword): pointer;
var
  InfoBlock: HRSRC;
  GlobalMemoryBlock: HGLOBAL;
begin
  InfoBlock := FindResource(hInstance, resname, restype);
  if InfoBlock = 0 then
    raise Exception.Create(SysErrorMessage(GetLastError));
  size := SizeofResource(hInstance, InfoBlock);
  if size = 0 then
    raise Exception.Create(SysErrorMessage(GetLastError));
  GlobalMemoryBlock := LoadResource(hInstance, InfoBlock);
  if GlobalMemoryBlock = 0 then
    raise Exception.Create(SysErrorMessage(GetLastError));
    Result := LockResource(GlobalMemoryBlock);
  if Result = nil then
    raise Exception.Create(SysErrorMessage(GetLastError));
end;

function GetResourceAsString(ResName: pchar; ResType: pchar): string;
var
  ResData: PChar;
  ResSize: Longword;
begin
  ResData := GetResourceAsPointer(resname, restype, ResSize);
  SetString(Result, ResData, ResSize);
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  size: longword;
begin
  sample_wav := GetResourceAsPointer('Datei', 'WAVE', size);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  sndPlaySound(sample_wav, SND_MEMORY or SND_NODEFAULT or SND_ASYNC);
end;
Ich bekomme es aber einfach nicht hin die Resource zuladen, zu entschlüsseln und dann weiter damit zuarbeiten (abspielen).

Hat vielleicht jemand eine Idee wie man das machen könnte? Muss ich die Datei in einem Stream entschlüsseln und dann den Pointer draufsetzten? Wenn JA, wie denn?


Danke UC
I wish it was legal to marry software because I'm madly in love with Delphi...
  Mit Zitat antworten Zitat
Blutiger Anfänger
(Gast)

n/a Beiträge
 
#2

Re: Resource entschlüsseln und laden

  Alt 22. Aug 2004, 00:18
1. Sind DLLs im Spiel? Dann kann der Zugriff auf hInstance schiefgehen ...
2. Dein Algo funktioniert hin und zurück und verändert nicht die Größe der Daten?
  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 19:35 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