Wie komprimiertes Grafikformat entschlüsseln?

Gast #655575
Lesenswert?

Eine monochrome 240x240 Grafik wird irgendwie komprimiert. Aus 57600 
Pixeln bzw. 7200 Bytes werden dadurch 3500-5500 Bytes, je nach Anzahl 
der schwarzen Pixel.
Ob die Daten verschlüsselt sind, weiß ich nicht.


Ich kann von verschiedenen Bildern komprimierte und unkomprimierte Daten 
erhalten.
Die Software zum Dekomprimieren könnte mit 'falschen' Daten gefüttert 
werden. Automatisieren aber schwierig.



Wie geht man bei sowas vor?
#655592
Lesenswert?

Hallo "Bitte einen Namen eingeben oder einloggen.",
wie die Daten komprimiert sind, hängt schlicht vom verwendeten 
Bildformat ab. Normalerweise ist das an der Fileendung zu erkennen, 
notfalls mit einem Hex-Editor angucken. Z.B. bei .gif steht auch "GIF" 
als ASCII im File. Die Dekompressionssoftware prüft normalerweise die 
erwarteten Formate auf Integrität, und bricht bei Nichteinhaltung ab. 
Ein JPEG-Dekompressor kann kein GIF verarbeiten, usw.
#655596
Lesenswert?

Bitte einen Namen eingeben oder einloggen. wrote:
> Eine monochrome 240x240 Grafik wird irgendwie komprimiert. Aus 57600
> Pixeln bzw. 7200 Bytes werden dadurch 3500-5500 Bytes, je nach Anzahl
> der schwarzen Pixel.
> Ob die Daten verschlüsselt sind, weiß ich nicht.
>
>
> Ich kann von verschiedenen Bildern komprimierte und unkomprimierte Daten
> erhalten.
> Die Software zum Dekomprimieren könnte mit 'falschen' Daten gefüttert
> werden. Automatisieren aber schwierig.
>
>
>
> Wie geht man bei sowas vor?

Es geht also darum, dass du rauskriegen musst, wie das
Bildformat aufgebaut ist. Da du eine unterschiedliche
Anzahl Bytes kriegst, ja nachdem wie das Bild aufgebaut
ist, liegt der Gedanke an eine Run Length Encoding nahe.
Kurz gesagt ist eine Run Length Encoding: Anstatt die
Pixel direkt darzustellen, steht im File: Jetzt kommen
25 schwarze Pixel gefolgt von 12 weissen Pixel, gefolgt
von 200 schwarzen Pixel, etc. Im File sind dann im Prinzip
die Zahlen  25 00 12 255 200 00  enthalten. Die Details
mögen variieren, kann auch sein, dass es überhaupt keine
Run Length encoding ist.

Wie geht man vor: Als erstes besorgst du dir mal einen
Hex Editor um in ein File auf Byte Ebene hinschauen zu
können.
Dann lässt du dir mal das allereinfachste Bild erzeugen:
Alle Pixel schwarz.
Das nächst einfache Bild: In der linken oberen Ecke (oder
rechts oben, oder links unten, oder rechts unten) ein
einzelnes weisses Pixel.
Wieder in den Hex Editor damit und mal mit dem 'Alles schwarz'
Bild vergleichen. Irgendetwas hat sich verändert. Aus den
Veränderungen kann man dann versuchen eine Hypothese zu bilden,
wie die Codierung aussieht. Mit der Hypothese verschiebt man
den weissen Punkt um ein Pixel, überlegt sich vorher welche
Erwartungen man hat, wie das ganze im File aussehen könnte
und sieht nach ob man recht hat. Und so gehts weiter, bis
man von jedem Byte im File erklären kann was es macht und
wie es zu seinem Wert kommt.

Viel Spass dabei. Das kann durchaus ein paar Tage (oder
Wochen) dauern, bis man alle Details herausgefunden hat.
Gast #655630
Lesenswert?

Wenn es sich um ein allgemein bekanntes Dateiformat handelt, kann der
Typ mit hoher Wahrscheinlichkeit mit Unix-/Linux-Befehl 'file'
ermittelt werden. Wenn nicht, würde ich es so versuchen, wie Karl
heinz vorgeschlagen hat. Sind die Daten (gut) verschlüsselt, hast du
wohl kaum eine Chance, sie zu entschlüsseln.

PS: Falls du kein 'file'-Tool zu Hand hast kann ich das gerne für dich
ausprobieren, wenn du hier eine Beispieldatei postest.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren