ubuntuusers.de

Versteckte Flashdateien speichern

Archivierte Anleitung

Dieser Artikel wurde archiviert. Das bedeutet, dass er nicht mehr auf Richtigkeit überprüft oder anderweitig gepflegt wird. Der Inhalt wurde für keine aktuell unterstützte Ubuntu-Version getestet. Wenn du Gründe für eine Wiederherstellung siehst, melde dich bitte in der Diskussion zum Artikel. Bis dahin bleibt die Seite für weitere Änderungen gesperrt.

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

Adobe_Flash/adobeflash_logo.jpg Mit der Flashplayer-Version 10.2 hat Adobe dafür gesorgt, dass Flash-Filme, die man sich beispielsweise auf Videoportalen im Internet anschaut, nicht mehr im „Klarformat“ im Cache des Browsers gespeichert werden. Bis Version 10.1 wurden Flash-Dateien im Ordner /tmp oder im Verzeichnis ~/.mozilla im Homeverzeichnis gespeichert, von wo aus man sich selbige sehr einfach in ein anderes Verzeichnis kopieren und anschließend in eine MP3 oder OGG umwandeln konnte.

Ab Version 10.2 werden die Flash-Dateien als gelöscht (deleted) markiert, so dass diese nicht auf einfachem Wege gesichert werden können. Dennoch gibt es Möglichkeiten, diese Sperre zu umgehen. Dafür nutzt man das Terminal [1] und drei Befehle – danach hat man die Flash-Datei als .flv-Datei auf der Festplatte.

Hinweis:

Das in diesem Artikel beschriebene Vorgehen funktioniert nur in den Fällen, in denen es sich um eine originäre Flash-Datei handelt. Wird hingegen der Flashplayer zum Abspielen von Stream-Inhalten in anderen Formaten verwendet, so wird man im Terminal keine einschlägigen Ausgaben bekommen. Abhilfe bieten Werkzeuge wie youtube-dl, die im Artikel Streams speichern erläutert sind.

Experten-Info:

Google hat ein neues Verfahren zum Abspielen der Videos implementiert, so dass das unten beschriebene Verfahren mit Flash-Filmen von Youtube nicht mehr funktioniert. Man erhält zwar eine Ausgabe über die Flash-Dateien, jedoch handelt es sich dabei nicht um die gewünschten Dateien. Hintergrund: Youtube teilt die zwischengespeicherte Datei, die man bisher speichern konnte, in viele kleine Segmente von etwa 1,5 Megabyte auf, was es zurzeit unmöglich macht, diese zu speichern. Um dies zu umgehen, kann man überprüfen, ob das Video evtl. im Format HTML5 vorliegt. Ist dies der Fall, steht auf How to download html5 videos?, wie man vorgehen muss.

Vorbereitungen

Um die Flash-Datei überhaupt in den Cache zu bekommen, muss man sich selbige anschauen. Um beim Videoportal-Beispiel zu bleiben, ruft man das Video im Browser auf. Dabei ist es unerheblich, ob es sich dabei um Firefox oder Chromium handelt. Auch ist es egal, ob man sich das Video anschaut/anhört oder gleich auf Pause klickt. Wichtig ist nur, dass man den Ladebalken bis zum Ende durchlaufen lässt, so dass die Flash-Datei komplett im Cache hinterlegt ist.

Hinweis:

Das in diesem Artikel beschriebene Vorgehen funktioniert unabhängig von der angesurften Seite – ergo auch bei Videos, die über einen Web-Proxy angeschaut werden, mit Hilfe dessen man die vielen aus Deutschland nicht zu erreichenden Videos in den einschlägigen Videoportalen („Video in deinem Land nicht verfügbar“) trotzdem anschauen und speichern kann.

Prozess-ID des Flashplayers

Man lässt sich mit dem Befehl ps die Prozess-ID des Flashplayers (libflashplayer.so) anzeigen:

ps x | awk '/libflashplayer.so\ /{print $1}' 

Die Ausgabe sieht in etwa wie folgt aus (die Nummern bzw. Prozess-IDs können abweichen):

1828
1841

Erster Prozess kennzeichnet die Datei /usr/lib/flashplugin-installer/libflashplayer.so, zweiter die Datei /var/lib/flashplugin-installer/npwrapper.libflashplayer.so.

Hinweis:

Es werden nur bei einem 64-bit-Betriebssystem zwei Flash-Prozesse gezeigt. Hat man ein 32-bit-System (i386/i686), so wird man nur einen Flash-Prozess finden.

Experten-Info:

Exkurs - Details zu den Flashplayern:

  • /var/lib/flashplugin-installer/npwrapper.libflashplayer.so beinhaltet die Datei npviewer.bin (nspluginwrapper) und ist ein Wrapper, so dass ein 32-bit Adobe Flash-Player auf einem 64-bit-Linux laufen kann (nur bei 64-bit Systemen)

  • /usr/lib/flashplugin-installer/libflashplayer.so ist der eigentliche Flashplayer in einem Plugin-Container

Suche der Flash-Datei

Mit der Ausgabe der Prozess-ID kann man sich nun auf die Suche nach der Flash-Datei machen. Dazu nutzt man den folgenden Befehl, der aus den Elementen cd, ls und grep besteht:

cd /proc/zweite_Prozess_ID/fd/ && ls -l | grep deleted 

Um beim obigen Beispiel zu bleiben, würde der Befehl wie folgt lauten:

cd /proc/1841/fd/ && ls -l | grep deleted 

Die Ausgabe sieht dann in etwa wie folgt aus:

lrwx------ 1 flo flo 64 2011-03-25 13:14 11 -> /tmp/FlashXX3HzKCN (deleted)

Der Zusatz (deleted) zeigt an, dass, wie oben genannt, die Flash-Datei im Ordner /tmp als gelöscht markiert wurde und das Betriebssystem über normale Wege keinen Zugriff auf selbige hat, da diesem vorgegaukelt wird, dass diese Datei gelöscht sei.

Viel wichtiger ist jedoch der markierte Teil 11. Dies ist der interne „Name“ der Flash-Datei im .flv-Format im Cache.

Kombinierter Befehl

Natürlich kann man die beiden obigen Befehle auch in einem einzigen zusammenfassen. Dieser sähe dann wie folgt aus:

cd /proc/$(ps x | awk '/libflashplayer.so\ /{print $1}')/fd && ls -l | grep deleted 

Kopieren der Flash-Datei

Genau diese Datei kann man nun an einen beliebigen Ort kopieren. Mit nachfolgendem Befehl die Flash-Datei ins Homeverzeichnis kopiert:

cp 11 $HOME 

Dort liegt nun die Flash-Datei (in gezeigten Falle mit Namen 11). Diese kann man nun umbenennen und weiter bearbeiten. Dazu empfiehlt sich der Artikel Audiodateien umwandeln.

Alternativen

Nachfolgend sind zwei Alternativen zu oben aufgeführtem Weg beschrieben:

Mittels Skript

Das folgende Skript ermittelt mittels pgrep die PID der Browser-plugins, durchsucht das Verzeichnis /proc/<PID>/fd nach Audio-/Video-Dateien und kopiert sie in das Verzeichnis /tmp/flash:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#!/bin/bash
# FlashFinder:
#############################################################################################################################
#############################################################################################################################
# Downloading copyrighted material may well be extremely illegal where you live, so make sure you only use this technique   #
# to download videos which contain your work entirely.                                                                      #
#############################################################################################################################
#############################################################################################################################
# Simple Collector of flash-files                     -  Einfaches einsammeln von flash-Dateien
# 1. Scan running process for pluginname              -  System nach Player-plugins durchsuchen
# 2. Search directory /proc/<PID>/fd for the process  -  Verzeichnis /proc/<PID>/fd/ nach den Mime-Typen "audio|video" absuchen
# 3. Extract ectension of the Mime-Typ                -  Extension aus Mime-Typ ermitteln (siehe Mime-Typen bei Tante Wiki)
# 4. Copy file to TARGET with new name                -  Kopieren dieser Dateien nach $TARGET.YYYY-MM-DD_hhmm_PID.$EXT  (Zeitstempel + ProzessID + Mime-Type)
# 5. Licens: Do what you want to do                   -  Lizenz: Mach domit wat de wills
#
################################################################################################
## Conditions                                - Voraussetzungen:                               ##
## - Vid has to be downloaded at all         - Video muss komplett gestreamt sein             ##
## - Don't close the browser                 - Browserfenster ist noch geöffnet               ##
## - No check for existing files             - generelles überschreiben vorhandener Dateien   ##
##    timestamp with hours+min+PID           - Zeitstempel nur auf Min. abgestellt            ##
################################################################################################

# the folder into which the found files should be copied
TARGET="/tmp/flash/"                      # Wohin mit den Dateien

# the Flashplayer's here
VIEWER=(nspluginviewer gnash flash)             # Player-Plugins z.Zt.: nspluginviewer + gnash + flash

# search for Player
for LOOK in ${VIEWER[@]}; do              # Alle Plugins abgrasen
# Look for PID' s
  for PID in $(pgrep -f $LOOK);do         # Je Plugin Prozesse suchen
    while read -a FILE; do
      mkdir -p "$TARGET"                  # erzeuge immer Verzeichnis
      # strip Mime-type
      EXT=${FILE[1]##audio/x-}            # nur den letzten Teil (z.B. flv/mp3 ...)
      EXT=${EXT##audio/}
      EXT=${EXT##video/x-}
      EXT=${EXT##video/}
# copy each file to TARGET, assigning a unique name with: date/time/PID/Extension found in Mime-Type
      cp -L "${FILE[0]%%:*}" "$TARGET$(date '+%Y-%m-%d_%H%M')_$PID.$EXT"
# search files for Mime-Type and select audio/video
    done < <(file -L --mime-type /proc/$PID/fd/* |egrep ": +audio/|: +video/")    # Mime-Type ermitteln und selektieren
  done
done

Mittels lsof

Die Anzeige der als deleted markierten Flash-Dateien mittels lsof ist ebenso möglich und geschieht ähnlich wie oben beschrieben. Mittels lsof wird nach offenen Dateien gesucht, die noch im Browser geöffnet sind.

lsof -a +L1 / 

Die Ausgabe sieht dann beispielsweise so aus:

COMMAND    PID   USER    FD   TYPE DEVICE SIZE/OFF NLINK NODE NAME
plugin-co 3192 ubuntu    11u  REG  8,3    35539888 0     68548 /tmp/FlashXY0or2k (deleted)

Ist die Ausgabe lang und unübersichtlich, können mit Hilfe des Zusatzes grep Flash die Ergebnisse auf die für diesen Fall relevanten eingeschränkt werden. Der Befehl dazu sähe dann wie folgt aus:

lsof -a +L1 / | grep Flash 

In der Ausgabe sind die PID (hier: 3192) und die FD (hier: 11u) relevant. Diese Informationen werden genutzt, um die Dateien im Verzeichnis /proc mit einem cat-Befehl zu sichern. Beachten sollte man, dass nur die Zahl nicht aber der Buchstabe der Ausgabe von FD benutzt wird. Nachfolgender Befehl kopiert die Datei ins Homeverzeichnis:

cat /proc/3192/fd/11 > $HOME/GEWÜNSCHTER_NAME_DER_DATEI.flv 

Der Grundbefehl für eine Kopie sähe wie folgt aus:

cat /proc/PID/fd/FD > $HOME/GEWÜNSCHTER_NAME_DER_DATEI.flv 

Die beiden vorstehend beschriebenen cat-Befehle funktionieren als „normaler“ Nutzer (also ohne die für das Verzeichnis /proc eigentlich obligatorischen Root-Rechte [2]), da die betreffenden Datei(en) lediglich kopiert und nicht etwa verschoben werden.

Diese Revision wurde am 24. Februar 2021 09:48 von Heinrich_Schwietering erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Multimedia, Videoplayer, Internet, Audio, Streams sichern, Video, Netzwerk, YouTube, Streaming