CWS -> SWF
Hallo,
gibt es zufällig ein Modul, mit dem man .cws (komprimierte
Macromedia Flash) Dateien in die ursprünglichen .swf
Dateien zurückwandeln kann?
Im CPAN habe ich zwar etliche Module zum Bearbeiten von
..swf-Dateien gefunden, aber nichts über .cws Dateien.
Danke für eure Antworten und schöne Grüße,
Ferry
--
Ing Ferry Bolhar
Magistrat der Stadt Wien - MA 14
A-1010 Wien
E-Mail: bol [at] adv.magwien.gv.at
Re: CWS -> SWF
Ferry Bolhar schrieb:
> gibt es zufällig ein Modul, mit dem man .cws (komprimierte
> Macromedia Flash) Dateien in die ursprünglichen .swf
> Dateien zurückwandeln kann?
>
> Im CPAN habe ich zwar etliche Module zum Bearbeiten von
> .swf-Dateien gefunden, aber nichts über .cws Dateien.
Keine Ahnung, aber wenn Du die ersten 8 Bytes wegzwackst
solltest Du den Rest mit Compress::Zlib entpacken können
(Bytes 1..3 = "CWS", Byte 4 = Version, Bytes 5..8 = Größe)
und nach dem Zusammenfügen (CWS durch SWF ersetzen) wieder
eine SWF-Datei haben.
Viele Grüße
-Christian
Re: CWS -> SWF
Christian Winter wrote:
> Keine Ahnung, aber wenn Du die ersten 8 Bytes wegzwackst
> solltest Du den Rest mit Compress::Zlib entpacken können
> (Bytes 1..3 = "CWS", Byte 4 = Version, Bytes 5..8 = Größe)
> und nach dem Zusammenfügen (CWS durch SWF ersetzen) wieder
> eine SWF-Datei haben.
Müsste man nicht CWS durch FWS ersetzen? Soweit ich weiß, ist das die
korrekte Signatur einer unkomprimierten SWF-Datei. Oder irre ich da?
Gruß
marc
--
http://low.audioattack.de
http://yacy.audioattack.de
Re: CWS -> SWF
Marc Nause:
> Müsste man nicht CWS durch FWS ersetzen? Soweit ich weiß, ist das die
> korrekte Signatur einer unkomprimierten SWF-Datei. Oder irre ich da?
Die fragliche Datei beginnt mit 'CWS', das vierte Byte ist 08.
Mit einem 'file' erhalte ich
Macromedia Flash data (compressed), version 8
als Ausgabe. Daher vermute ich, dass es sich um eine solche Datei
handelt, zumal sie auch mit <object> in eine HTML-Datei eingebunden
und im Browser dargestellt werden kann.
LG, Ferry
--
Ing Ferry Bolhar
Magistrat der Stadt Wien - MA 14
A-1010 Wien
E-Mail: bol [at] adv.magwien.gv.at
Re: CWS -> SWF
Ferry Bolhar wrote:
> Die fragliche Datei beginnt mit 'CWS', das vierte Byte ist 08.
> Mit einem 'file' erhalte ich
>
> Macromedia Flash data (compressed), version 8
Hallo,
ich habe mich wohl etwas missverständlich ausgedrückt. Ich meinte, dass nach
dem Entpacken die ersten 3 Byte nicht durch SWF (wie von Christian
geschrieben), sondern durch FWS zu ersetzen sein müssten.
Gruß
Marc
--
http://low.audioattack.de
http://yacy.audioattack.de
Re: CWS -> SWF
Marc Nause schrieb:
> Ferry Bolhar wrote:
>> Die fragliche Datei beginnt mit 'CWS', das vierte Byte ist 08.
>> Mit einem 'file' erhalte ich
>>
>> Macromedia Flash data (compressed), version 8
>
> ich habe mich wohl etwas missverständlich ausgedrückt. Ich meinte, dass nach
> dem Entpacken die ersten 3 Byte nicht durch SWF (wie von Christian
> geschrieben), sondern durch FWS zu ersetzen sein müssten.
Stimmt. Hatte ich nicht mehr im Kopf, aber das File muss mit
"FWS" anfangen.
-Christian
Re: CWS -> SWF
Hallo,
> Keine Ahnung, aber wenn Du die ersten 8 Bytes wegzwackst
> solltest Du den Rest mit Compress::Zlib entpacken können
> (Bytes 1..3 = "CWS", Byte 4 = Version, Bytes 5..8 = Größe)
> und nach dem Zusammenfügen (CWS durch SWF ersetzen) wieder
> eine SWF-Datei haben.
Ich habe das jetzt mal probiert:
tail -c+9 file.swf > file.gz
Da fehlen jetzt die ersten 8 Bytes (ja, fragt mich nicht, wieso man
9 angeben muss, mit 8 fehlen nur die sieben ersten!).
Jetzt habe ich folgendes Script (zlib.pl):
use strict;
use warnings;
use Compress::Zlib;
foreach my $file ( [at] ARGV) {
my $buffer;
my $gz = gzopen($file,"rb") or die "Failed to open $file: $gzerrno!\n";
print $buffer while $gz->gzread($buffer) > 0;
die "Error reading from $file: $gzerrno\n" if $gzerrno;
$gz->close();
}
Das lasse ich jetzt laufen:
perl zlib.pl file.gz >file.new
Das Ergebnis ist - dasselbe File. Es ist gleich groß und hat denselben
Inhalt.
Wenn ich ein
zcat file.gz
mache, bekomme ich:
zcat: file.gz: not in gzip format
Möglicherweise reicht das Entfernen des 8-Byte-Vorspanns
doch nicht? Oder mache ich etwas in dem Skript (das ansonsten
fehlerfrei läuft) falsch?
Schöne Grüße,
Ferry
--
Ing Ferry Bolhar
Magistrat der Stadt Wien - MA 14
A-1010 Wien
E-Mail: bol [at] adv.magwien.gv.at
Re: CWS -> SWF
Ferry Bolhar <bol [at] adv.magwien.gv.at> wrote:
> tail -c+9 file.swf > file.gz
>
> Da fehlen jetzt die ersten 8 Bytes (ja, fragt mich nicht, wieso man 9
> angeben muss, mit 8 fehlen nur die sieben ersten!).
Die Manpage ist diesbezüglich eigentlich recht eindeutig:
| -c, --bytes=N
| output the last N bytes
| [...]
| If the first character of N [...] is a `+', print beginning
| with the Nth item from the start of each file
Paul
Re: CWS -> SWF
Ferry Bolhar schrieb:
> Hallo,
>
>> Keine Ahnung, aber wenn Du die ersten 8 Bytes wegzwackst
>> solltest Du den Rest mit Compress::Zlib entpacken können
>> (Bytes 1..3 = "CWS", Byte 4 = Version, Bytes 5..8 = Größe)
>> und nach dem Zusammenfügen (CWS durch SWF ersetzen) wieder
>> eine SWF-Datei haben.
>
[...]
>
> use strict;
> use warnings;
> use Compress::Zlib;
> foreach my $file ( [at] ARGV) {
> my $buffer;
> my $gz = gzopen($file,"rb") or die "Failed to open $file: $gzerrno!\n";
> print $buffer while $gz->gzread($buffer) > 0;
> die "Error reading from $file: $gzerrno\n" if $gzerrno;
> $gz->close();
> }
>
Du musst compress()/uncompress() verwenden, nicht gzip.
Das folgende Script funktioniert bei mir, um komprimierte
Flash-Files auszupacken:
------------------------------------------------------------ ------
#!/usr/bin/perl
#
# cws2swf.pl INFILE OUTFILE
# Convert compressed flash file to uncompressed.
use strict;
use warnings;
use Compress::Zlib;
die "Wrong arguments!"
unless( 2 == scalar [at] ARGV && -f $ARGV[0] );
open(I, "<", $ARGV[0] ) or die $!;
open(O, ">", $ARGV[1] ) or die $!;
binmode I;
binmode O;
my $src;
read( I, $src, (stat $ARGV[0])[7] );
close I;
my $dest = uncompress( substr( $src, 8 ) );
print O "FWS" , chr(6) , pack('I', length($dest) + 8 );
print O $dest;
close O;
------------------------------------------------------------ ------
HTH
-Christian
Re: CWS -> SWF
Christian Winter schrieb:
> print O "FWS" , chr(6) , pack('I', length($dest) + 8 );
Muss natürlich
print O "FWS" , chr(6) , pack('L', length($dest) + 8 );
heissen, es gibt ja nicht nur 32Bit-Int-Systeme.