Aqui está uma versão c # de descompactação de SWF que usei para verificação de SWF
private byte[] SwfDecompress(byte[] data, out size)
{
var stream = new MemoryStream(data);
var first = stream.ReadByte();
if (first != 0x43) // C
{
throw new ArgumentException("Not compressed", "data");
}
if (stream.ReadByte() != 0x57) // W
{
throw new ArgumentException("Not SWF", "data");
}
if (stream.ReadByte() != 0x53) // S
{
throw new ArgumentException("Not SWF", "data");
}
var version = (byte) stream.ReadByte();
var integer = new byte[4];
integer[0] = (byte) stream.ReadByte();
integer[1] = (byte) stream.ReadByte();
integer[2] = (byte) stream.ReadByte();
integer[3] = (byte) stream.ReadByte();
size = BitConverter.ToInt32(integer, 0);
var outStream = new MemoryStream();
outStream.WriteByte(0x46);
outStream.WriteByte(0x57);
outStream.WriteByte(0x53);
outStream.WriteByte(version);
outStream.Write(integer, 0, 4);
var uncompressedInput = new Ionic.Zlib.ZlibStream(stream, CompressionMode.Decompress);
byte[] buffer = new byte[4096];
int read;
while ((read = uncompressedInput.Read(buffer, 0, buffer.Length)) > 0)
{
outStream.Write(buffer, 0, read);
}
outStream.Seek(0, SeekOrigin.Begin);
return outStream.ToArray();
}
Para a descompressão de fluxo ZLIB DotNetZip.
Para obter detalhes de implementação, consulte aqui: http://wwwimages.adobe.com/www.adobe.com/content/dam/Adobe/en/devnet/swf/pdf/swf-file-format-spec.pdf
0x43, 0x57, 0x53 (“CWS”). Um CWS indica que todo o arquivo após os primeiros 8 bytes (ou seja,
após o campo FileLength) foi compactado usando o padrão aberto ZLIB. O formato de dados
que a biblioteca ZLIB usa é descrito pelos documentos de solicitação de comentários (RFCs) 1950 a
1952. A compactação de arquivo CWS é permitida em SWF 6 ou posterior apenas