![]() |
"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 |
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: ![]() |
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 |
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. |
Re: "Verschlüsselte" Bilddateien "entschlüsse
Hi richard,
weil diese Dateien in dem Fremdprogramm ja angezeigt werden. Keine Möglichkeit also da ranzukommen? Greets |
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". |
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; |
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 |
Re: "Verschlüsselte" Bilddateien "entschlüsse
Zitat:
|
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?
|
Re: "Verschlüsselte" Bilddateien "entschlüsse
Delphi-Quellcode:
const
FileName = 'D:\Temp\karten.decoded.png'; var Source: TFileStream; Header: array [0..3] of AnsiChar; Stream: TMemoryStream; Buffer: PByte; Index: Integer; begin Source := TFileStream.Create(FileName, fmOpenRead); try Stream := TMemoryStream.Create(); try Header := 'CF10'; Stream.WriteBuffer(Header, SizeOf(Header)); if Source.Size > 0 then begin Source.Position := 0; Stream.CopyFrom(Source, Source.Size); Buffer := Stream.Memory; Inc(Buffer, SizeOf(Header)); for Index := 1 to Stream.Size - SizeOf(Header) do begin Buffer^ := Buffer^ xor $8D; Inc(Buffer); end; end; Stream.SaveToFile(ExtractFilePath(FileName) + ChangeFileExt( StringReplace(ExtractFileName(FileName), '.decoded', '', [rfReplaceAll, rfIgnoreCase]), '.encoded') + ExtractFileExt(FileName)); finally Stream.Free(); end; finally Source.Free(); end; end; |
Re: "Verschlüsselte" Bilddateien "entschlüsse
Ok danke, dass funktioniert soweit. Leider jedoch, akzeptiert das Fremdprogramm meine verschlüsselten Bilder noch nicht. Ich halte eine Fehlermeldung, obwohl die ersten Bytes meiner und der Original-Dateien gleich sind: 43 46 31 30 04 DD C3 CA 80 87 97 87 8D 8D 8D 80 C4 C5 C9 DF 8D 8D
Leider habe ich keine Ahnung wieso das Programm meine nicht als originale erkennt. :? |
Re: "Verschlüsselte" Bilddateien "entschlüsse
Dekodiere eine Originaldatei, kodiere sie wieder und mache dann einen Binärvergleich (fc /b a.dat b.dat).
Wenn das funktioniert, dann liegt das Geheimnis woanders (in den Daten selbst). |
Re: "Verschlüsselte" Bilddateien "entschlüsse
Zitat:
|
Re: "Verschlüsselte" Bilddateien "entschlüsse
Du hast doch bestimmt mehrere Bilddateien die "verschlüsselt" sind.
Haben alle die Bytefolge CF10 am Anfang der Datei stehen, oder variert die Bytefolge. Könnte es eine Größenangabe sein: CF10 -> 53008 Bytes ?(nur eine Vermutung) Grüße Klaus |
Re: "Verschlüsselte" Bilddateien "entschlüsse
Ja alle verschlüsselten haben CF10 am Anfang, denn sonst könnte ich ja die anderen Dateien mittels Nicos Code nicht dekodieren. Ich hoffe nur nicht, dass Dateigrößen o.a. abgefragt werden. :?
|
Re: "Verschlüsselte" Bilddateien "entschlüsse
Zitat:
|
Re: "Verschlüsselte" Bilddateien "entschlüsse
Hi,
ich habe mal Filemon angeschmissen und geguckt, worauf das Programm so alles zugreift. Und siehe da, es kam eine Datei zum Vorschein, filedat.dat. Diese Datei mit dem Editor angeguckt, zeigt mir "CF10" und wirres Zeug an. Ok denke ich mir, jagst du es mal durch Nicos Algorithmus. Und tatsächlich, war auch diese Datei so verschlüsselt. In diesem entschlüsselten Text finden sich alle Dateinamen und vermutlich Informationen, wodurch mein Austauschen anscheinend schief läuft. Die Dateinamen stehen im Klartext drin, die weiteren Infos sind allerdings weiterhin wirres Zeug. Auszug: Zitat:
Kann damit jemand etwas anfangen? |
Re: "Verschlüsselte" Bilddateien "entschlüsse
Es könnte ne MD% Checksumme sein. Die hat 128 bit/16 Bytes das könnte hinkommen. (Du hättest dann 16 Buchstaben bei 1Byte/Buchstabe)
Oder evtl. ne Größenangabe ... ist das ein genauer Auszug oder hast du da zwischendrin was gekürzt? |
Re: "Verschlüsselte" Bilddateien "entschlüsse
Genauer kurzer Auszug aus der Datei.
|
Re: "Verschlüsselte" Bilddateien "entschlüsse
Falls es irgendwie hilft: Es gibt ein kostenpflichtiges Programm, dass ebenfalls das macht was ich möchte. Mit diesem konnte ich die eine PNG Datei mal ersetzen. In der *.dat-Datei wurden durch das Programm nun folgende Änderungen gemacht. Was genau das ist bzw. wie ich die *.dat so ändern kann das meine Dateien geschluckt werden weiß ich leider noch nicht.
Zitat:
|
Re: "Verschlüsselte" Bilddateien "entschlüsse
Das sind einfach zu wenig Daten/Informationen, um irgendetwas damit anzufangen (außer zu raten).
Da dein Diff 16 aufeinanderfolgende Bytes Unterschied liefert, könnte jfheins recht haben (MD5). |
Re: "Verschlüsselte" Bilddateien "entschlüsse
Liste der Anhänge anzeigen (Anzahl: 1)
Und jfheins hatte Recht! Der MD5 String des Bildes steht in der *.dat Datei drin, siehe Anhang. Vielen Dank.
Nun gibt es eigentlich kein großes Problem mehr, jedenfalls von theoretischer Sicht aus für mich. Mein Programm holt sich den MD5 Hash der Original-Datei, holt sich dann den MD5 Hash meiner neuen Datei. *.dat Datei öffnen und alten Hash durch neuen Hash ersetzen. Speichern und fertig, oder? Nur leider... hakts an der Umsetzung. Strings in Dateien könnt ich ja vlt. noch grad so ersetzen, ob wie soll ich Hex-Werte ersetzen? :gruebel: |
Re: "Verschlüsselte" Bilddateien "entschlüsse
Hallo,
wie öffnest Du die Datei? ..mit eine StringList sollte es Probleme geben "binäre" Werte einzutragen. Bei einem TFileStream würde ich da keine Probleme sehen. Womit generierst Du Deinen MD5 Wert? Gibt es da auch eine Möglichkeit der Wert als 16 Byte zu bekommen oder wird der Wert nur in der Hexdarstellung angeboten? Grüße Klaus |
Re: "Verschlüsselte" Bilddateien "entschlüsse
Hallo Klaus,
im Moment öffne ich die Datei noch mit einem handelsüblichen HEX-Editor. Aus Delphi heraus dann sicherlich mit einem File- oder Memorystream. Gut das du gefragt hast, meine md5.pas ist weg und auf ![]() |
Re: "Verschlüsselte" Bilddateien "entschlüsse
Hallo, versuche doch mal diesen Code, um die MD5-Hashs zu ersetzen:
Delphi-Quellcode:
So ähnlich zumndest ;)
type
MD5Digest: Array [0..15] of byte type MD5Digest: Array [0..15] of byte procedure Replace(Stream: TStream; oldmd5, newmd5: MD5Digest) var i: Integer; pos: Int64; pattern: MD5Digest; begin for i = 0 to 15 do begin oldmd5[i] := oldmd5[i] xor $8D; newmd5[i] := newmd5[i] xor $8D; end; Stream.Position := 0; while (Stream.size - Stream.Position) >= sizeof(MD5Digest) do begin pos := Stream.Position; Stream.readbuffer(pattern, sizeof(MD5Digest)); Stream.position = pos + 1; // Wir müssen byteweise vorgehen if (comparemem(@pattern[0], @oldmd5[0], sizeof(MD5Digest)) = 0) then begin Stream.position = pos; Stream.writeBuffer(newmd5, sizeof(MD5Digest)); break; end; end; end; procedure ReplaceFile(FileName: String; old, new: Array of MD5Digest) var fs: TFileStream; mem: TmemoryStream; i: Integer; begin mem := TMemoryStream.Create(); fs := TFileStream.Create(FileName, fmOpenReadWrite or fmShareExclusive); try mem.CopyFrom(fs, 0); for i = low(old) to high(old) do begin Replace(mem, old[i], new[i]); end; fs.CopyFrom(mem, 0); finally fs.Free; mem.Free; end; end; |
Re: "Verschlüsselte" Bilddateien "entschlüsse
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
anbei die md5.pas die ich ab und an verwende. Den binären MD5 Wert erhälst Du wenn Du diese Funktion
Delphi-Quellcode:
aufrufst.
function MD5File(N: string): MD5Digest;
MD5Digest ist ein Array[0..15] of Byte; Grüße Klaus |
Re: "Verschlüsselte" Bilddateien "entschlüsse
Danke Klaus, genau die hatte ich schon per Google gefunden. :-)
Aber mein ganzer Dank geht an jfheins, durch dessen Hilfe es jetzt geht (+ ICQ Hilfen)! :party: Du bist mein Held des Monats. :) P.S.: Meld dich mal vor Weihnachten bei mir, ich schenk dir 25€ zu Weihnachten. Nicht das noch jemand auf die Idee kommt das hier wäre Schwarzarbeit. :mrgreen: |
AW: "Verschlüsselte" Bilddateien "entschlüsseln"
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Leute,
Ich hole mal diesen alten Thread nach oben, weil good old Google ihn bei mir gefunden hat und ich anders nicht weiterkomme. Das Problem hat nix mit Delphi zu tun, aber ihr scheint mir alle tolle Experten zu sein! Ich habe von einer Freeware Designsoftware ein Hintergrundbild, das ich dringend für ein anderes Projekt benötige. Allerdings hat der Hersteller wohl ein paar Bytes in der Datei verändert, sie verschlüsselt oder irgendwie gepackt. Wenn man sich das im HEX-Editor anschaut sieht man neben kryptischen Zeichen (wohl den Bildinformationen) nur einen Abschnitt über Adobe XMP Core 4.1, Tiff-Datei und Dimensionen des Bildes. Kommt ihr darauf, was mit der Datei los is? Das wäre gigantisch! Hab sie hier hochgeladen: ![]() Und hier is der Abschnitt mit Hex-Code: ![]() Herzlichsten Dank! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:55 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