Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   "Verschlüsselte" Bilddateien "entschlüsseln" (https://www.delphipraxis.net/122856-verschluesselte-bilddateien-entschluesseln.html)

The Riddler 23. Okt 2008 09:26


"Verschlüsselte" Bilddateien "entschlüsseln&q
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

ich stehe vor einem kleinen aber feinen Problem: Ich habe hier diverse PNG und JPG Dateien, welche zu einem bestimmten Programm gehören. Da die Ersteller des Programmes allerdings nicht sonderlich gut darin waren, schöne Grafiken zu machen, möchte ich diese Bilddateien durch von mir erstelle Bilder austauschen.

Das Problem: Die Original-Bilddateien sind anscheinend "verschlüsselt", jedenfalls kann ich sie mit keinem anderen Bildbetrachter öffnen. Vermutlich wurden einfach ein paar Bytes entfernt sodass jedes Bildprogramm scheitert diese Grafiken zu laden.

Nun wäre es nicht unbedingt erforderlich das ich die Originaldateien sozusagen "entschlüssele", es wäre schon sinnvoller für mich wenn ich wüsste was die Programmautoren mit den Bildern gemacht haben um sie so hinzubekommen. Und natürlich wäre es perfekt wenn ich wissen würde, wie ich meine eigenen Bilder so verändere das das fremde Programm sie frisst.

Wäre super wenn einer von euch Experten sich das einmal angucken könnte, da mir einfach das nötige Wissen für so etwas fehlt. Eine Beispiel-Grafik habe ich einmal angehangen.

Danke & Grüße

Daniel 23. Okt 2008 09:32

Re: "Verschlüsselte" Bilddateien "entschlüsse
 
Moin,

erste Analysen sind gar nicht so schwer. Besorge Dir einen Hex-Editor, oder wenigstens einen Hex-Viewer. Der erlaubt es Dir, die Datei als Byte-Strom aufzufassen und Dir mal anszusehen, was da für Bytes in der Datei stehen. Diese müssen nämlich - wenn es denn eine PNG-Datei ist - einem bestimmten Format entsprechend, dem PNG-Format.

Falls es sich die Entwickler seeeeeeeeehr einfach gemacht haben, dann haben sie lediglich im Header ein paar Bytes verändert. Das kannst Du selbst kontrollieren, indem Du Dir mal die Spezifikationen für das PNG-Format ansiehst. keine Sorge: Du sollst keinen vollständigen Viewer schreiben, musst Du auch nicht. Nur ein paar Bytes im Header der Datei ansehen, das ist eine lösbare Aufgabe auch wenn man im Hinblick auf PNG-Dateien nur mäßige Vorkenntnisse hat.

Der Header einer PNG-Datei beispielsweise ist hier aufgelistet:
http://en.wikipedia.org/wiki/Portabl...cs#File_header

The Riddler 23. Okt 2008 09:42

Re: "Verschlüsselte" Bilddateien "entschlüsse
 
Hi,

danke erstmal. :)

Die ersten 8 Byte der PNG Datei sehen so aus: 80 87 97 87 8D 8D 8D 80, es scheint also in der Tat keinen Header zu geben oder er ist verschlüsselt.

Ich habe jetzt einfach mal den PNG-Header (89 50 4E 47 0D 0A 1A 0A) an den Anfang der Datei gesetzt, aber die Datei kann weiterhin nicht angezeigt werden. Wäre auch zu schön gewesen wenns so einfach gewesen wäre. :P

richard_boderich 23. Okt 2008 10:55

Re: "Verschlüsselte" Bilddateien "entschlüsse
 
Mahlzeit!

Dann gehe ich davon aus, das die Dateien binär verschlüsselt sind. Wenn du den Algorithmus nicht kennst ist jeder
Versuch Zeitverschwendung. Woher weist du eigentlich das es Bilder sind? Ich kann dir auch irgendein Binärformat hinklatschen
und hänge irgendeine Dateiendung dran.

The Riddler 23. Okt 2008 11:17

Re: "Verschlüsselte" Bilddateien "entschlüsse
 
Hi richard,

weil diese Dateien in dem Fremdprogramm ja angezeigt werden.

Keine Möglichkeit also da ranzukommen?

Greets

Daniel 23. Okt 2008 11:40

Re: "Verschlüsselte" Bilddateien "entschlüsse
 
Solange Du nicht weißt, welchen Prozess sie verwenden, um ihre Bilder zu "schützen", ist es halt schwierig, diesen umkehren zu wollen. Was Du machen müsstest, wäre eine Form von "Reverse-Engeneering". Das heißt, dass Du Dir beispielsweise in einem Debugger ansehen müsstest, was da zur Laufzeit passiert.

Das ist aber - vorsichtig formuliert - "nicht ganz trivial".

nicodex 23. Okt 2008 12:15

Re: "Verschlüsselte" Bilddateien "entschlüsse
 
Nimm mal die ersten vier Bytes ("CF10") weg und XOR die restlichen Bytes mit $8D.

edit:
Delphi-Quellcode:
const
  FileName = 'D:\Temp\karten.png';
var
  Source: TFileStream;
  Header: array [0..3] of AnsiChar;
  Stream: TMemoryStream;
  Buffer: PByte;
  Index: Integer;
begin
  Source := TFileStream.Create(FileName, fmOpenRead);
  try
    Source.Position := 0;
    Source.ReadBuffer(Header, SizeOf(Header));
    if Header = 'CF10' then
    begin
      Stream := TMemoryStream.Create();
      try
        Stream.CopyFrom(Source, Source.Size - Source.Position);
        Buffer := Stream.Memory;
        for Index := 1 to Stream.Size do
        begin
          Buffer^ := Buffer^ xor $8D;
          Inc(Buffer);
        end;
        Stream.SaveToFile(ChangeFileExt(FileName, '.decoded') +
          ExtractFileExt(FileName));
      finally
        Stream.Free();
      end;
    end;
  finally
    Source.Free();
  end;
end;

The Riddler 23. Okt 2008 13:09

Re: "Verschlüsselte" Bilddateien "entschlüsse
 
Wow Nico, vielen vielen Dank. Funktioniert perfekt, sogar mit den JPG-Bildern.

Ich habe nun versucht deinen Algorithmus umzukehren, um meine Bilder so zu verschlüsseln. Habe also umgekehrt versucht XOR auszuführen wenn der Header nicht CF10 ist. Leider klappt dies nicht. Kannst du mir da vlt. noch einmal aushelfen bitte?

Grüße

guidok 23. Okt 2008 13:12

Re: "Verschlüsselte" Bilddateien "entschlüsse
 
Zitat:

Zitat von The Riddler
Wow Nico, vielen vielen Dank. Funktioniert perfekt, sogar mit den JPG-Bildern.

Ich habe nun versucht deinen Algorithmus umzukehren, um meine Bilder so zu verschlüsseln. Habe also umgekehrt versucht XOR auszuführen wenn der Header nicht CF10 ist. Leider klappt dies nicht. Kannst du mir da vlt. noch einmal aushelfen bitte?

Du musst nach dem XOR auch den Header CF10 vorne anhängen.

The Riddler 23. Okt 2008 13:52

Re: "Verschlüsselte" Bilddateien "entschlüsse
 
Eben da hakts bei mir. Problem ist, dass ich ja Stream.CopyFrom nicht verwenden kann. Oder steh ich nur auf dem Schlauch?


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:46 Uhr.
Seite 1 von 3  1 23      

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