assignments/Assignment_002/solution/readme.md

4.1 KiB
Raw Blame History

Lösung: Dateien mit file untersuchen (files.zip)

Nach dem Auspacken des Archivs kann man durch den Aufruf von file * die entsprechenden Dateien analysieren.

Datei Ausgabe von file Werkzeug Inhalt
a PNG image data, 100 x 100, 8-bit gray+alpha, non-interlaced Bildbetrachter Rick Astley
b JPEG image data, ... , 250x157, components 3 Bildbetrachter JPG-Bild eines Egg Mac Muffins
c PE32 executable (DLL) (console) Intel 80386 (stripped to external PDB), for MS Windows rabin2 Shared Library für Windows mit nur zwei Exports: GetDiskKey und GetDiskKey_Version
d PE32 executable (GUI) Intel 80386, for MS Windows rabin2 Ausführbare Datei für Windows. Symbole und Strings können mit rabin2 ausgegeben werden. Ausführen der Datei ist zu riskant.
e ELF 64-bit LSB shared object, ... , not stripped rabin2 Bibliothek (shared object) für Linux x86, nicht gestrippt
f ELF 64-bit LSB pie executable, ... , not stripped rabin2 Ausführbares Programm für Linux. Ausführen der Datei ist zu riskant.
g ELF 64-bit LSB shared object, ... , stripped rabin2 Bibliothek (shared object) für Linux x86, gestrippt
h ELF 64-bit LSB pie executable, ... , stripped rabin2 Ausführbares Programm für Linux. Ausführen der Datei ist zu riskant.
i ELF 64-bit LSB relocatable, ... , not stripped rabin2 Objekt-Datei mit der Main-Funktion eines Programms.
j Compiled Java class data, version 61.0 javap Java-Klasse mit dem Namen FlagPrinter, die nur eine main-Methode enthält.
k ASCII text less Rick Astley Song
l data hexyl Binärdaten: ff ff 00 00 ca fe ba be 00 00 00
m Atari ST M68K contiguous executable strings Teil des Softwarepaketes Degas
n gzip compressed data, was "n" ... gzip, less Komprimierte Version von k

zu e, f, g, h

Betrachtet man die Build-IDs, die von file ausgegeben werden sieht man:

e: ELF ... BuildID[sha1]=82d337f3906e7639b404001a5c501e9308848c80
f: ELF ... BuildID[sha1]=94fbda07657d2a358c1844e7682632621affde92
g: ELF ... BuildID[sha1]=82d337f3906e7639b404001a5c501e9308848c80
h: ELF ... BuildID[sha1]=94fbda07657d2a358c1844e7682632621affde92

e + g und f + h haben jeweils dieselben Build-IDs. Dies deutet darauf hin, dass es auch dieselben Programme bzw. Bibliotheken sind -- nur einmal jeweils gestrippt.

Zu j

javap braucht den Namen der Java-Klasse, um sie zu laden und auszugeben. Den Namen kann leicht mit dem strings-Kommando finden, weil der Namen der Quelldatei ebenfalls in der Klasse gespeichert ist.

$ strings j
...
SourceFile
FlagPrinter.java
...

Damit kann man die Datei umbenennen und javap verwenden:

$ cp j FlagPrinter.class
$ javap -cp . FlagPrinter
Compiled from "FlagPrinter.java"
public class FlagPrinter {
  public FlagPrinter();
  public static void main(java.lang.String[]) throws java.lang.Exception;
  static {};
}

zu l

Der Inhalt der Datei kann einfach mit einem Hexeditor, z.B. hexyl oder hexedit angesehen werden:

$ hexyl l
┌────────┬─────────────────────────┬─────────────────────────┬────────┬────────┐
│00000000│ ff ff 00 00 ca fe ba be ┊ 00 00 00                │××00××××┊000     │
└────────┴─────────────────────────┴─────────────────────────┴────────┴────────┘

zu m

Da es sich um ein sehr altes Format handelt (1980er Jahre), kommen die normalen Werkzeuge damit nicht klar. Man kann allerdings zumindest die enthaltenen Strings ausgeben lassen.

$ strings -n 10
...
D:\DEGASART\ART1.SCPD:\DEGASART\PICS\D:\DEGASART\DEGASART.RSCTITLE.PC1
...

zu n

Nach dem Auspacken sieht man, dass n nur eine komprimierte Version von k ist.