S
SusanZheng
Hi, I saw an artical about how to extract .swf from PPT files and thin
it's quite useful, hope it helps.
---------------------------------------------
We had a Power Point Presentation file given us a few days ago with a
embedded flash file which we needed to extract to use on the website.
We couldn't find any way to do this. We could drag and drop the swf
onto another presentation, we could even drag the object onto the
desktop. This created a scrap file which was rather annoying.
However, this led me to the discovery of the NeverShowExt registry key
I managed to rename the scrap to a have a .swf extension, but still n
cookie.
So I started digging around the scrap to see if I could find the swf
object inside and after reading an introduction to SWF I found what I
was looking for.
Now I just wanted to extract this binary data from the scrap file, an
I wanted to do it the hard way!
So I wrote a small amount of code to look through a file and extract
the goodies. The main part of the code was to take a byte array and
copy that into my SWF struct - using the
System.Runtime.InteropServices.Marshal class.
After a bit of messing around the code runs like a dream. The final
executable takes 2 parameters the first is the file containing the SW
and the second is the file to write the SWF.
using System;
using System.IO;
using System.Runtime.InteropServices;
namespace FlashExtractor
{
/// <summary>
/// Summary description for Class1.
/// </summary>
class Class1
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main(string[] args)
{
//assume param 1 is the location of th
shockwave file
byte[] file = ne
byte[Marshal.SizeOf(typeof(swf))];
FileStream fs = File.Open(args[0]
FileMode.Open,
FileAccess.Read,FileShare.Read);
int i=0;
//go through the file byte by byte
//could I have seeked this?
while (i<fs.Length-8)
{
//set the position in the file
fs.Position = i;
//read off 8 bytes worth of data to pu
into the swf
struct
fs.Read(file,0, 8);
IntPtr ptr
Marshal.AllocHGlobal(file.Length);
Marshal.Copy(file, 0x0, ptr
file.Length);
swf s = (swf
Marshal.PtrToStructure(ptr, typeof(swf));
// if the struct header is FWS then w
may have a flash
file
if (s.header1==0x46 && s.header2==0x5
&&
s.header3==0x53)
{
//we have the identity of
flash file
Console.WriteLine("Found th
header of a flash
file");
Console.WriteLine("Version
{0}", s.version);
Console.WriteLine("Size: {0}"
s.size);
//if the size of the fws is
length of the file
if (s.size + i<=fs.Length)
{
Console.WriteLine("Attempting to write
the file to {0}",
args[1]);
FileStream fw
File.OpenWrite(args[1]);
Console.WriteLine("Allocation byte array
of {0} length", s.size);
byte[] b=ne
byte[s.size];
Console.WriteLine("Reseting the file
back to position: {0}", i);
fs.Position = i;
Console.WriteLine("Reading from {0} to
{1}", i, s.size);
fs.Read(b,0,(int)s.size);
Console.WriteLine("Writing byte array
back to disk");
fw.Write(b, 0
b.Length);
fw.Close();
break;
}
else
{
Console.WriteLine("Th
file is not of
the correct size file: {0},
{1}", s.size, fs.Length);
}
}
i++;
}
fs.Close();
}
}
[StructLayout (LayoutKind.Sequential, Pack = 0x1)]
struct swf
{
public byte header1;
public byte header2;
public byte header3;
public byte version;
public UInt32 size;
}
}
In theory this could be used to extract many forms of embedded binar
data.
---------------------------------------
http://www.sameshow.com
A practical yet easy-to-use software to convert PowerPoint to Flash fo
publishing on
Web or emailing to other
it's quite useful, hope it helps.
---------------------------------------------
We had a Power Point Presentation file given us a few days ago with a
embedded flash file which we needed to extract to use on the website.
We couldn't find any way to do this. We could drag and drop the swf
onto another presentation, we could even drag the object onto the
desktop. This created a scrap file which was rather annoying.
However, this led me to the discovery of the NeverShowExt registry key
I managed to rename the scrap to a have a .swf extension, but still n
cookie.
So I started digging around the scrap to see if I could find the swf
object inside and after reading an introduction to SWF I found what I
was looking for.
Now I just wanted to extract this binary data from the scrap file, an
I wanted to do it the hard way!
So I wrote a small amount of code to look through a file and extract
the goodies. The main part of the code was to take a byte array and
copy that into my SWF struct - using the
System.Runtime.InteropServices.Marshal class.
After a bit of messing around the code runs like a dream. The final
executable takes 2 parameters the first is the file containing the SW
and the second is the file to write the SWF.
using System;
using System.IO;
using System.Runtime.InteropServices;
namespace FlashExtractor
{
/// <summary>
/// Summary description for Class1.
/// </summary>
class Class1
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main(string[] args)
{
//assume param 1 is the location of th
shockwave file
byte[] file = ne
byte[Marshal.SizeOf(typeof(swf))];
FileStream fs = File.Open(args[0]
FileMode.Open,
FileAccess.Read,FileShare.Read);
int i=0;
//go through the file byte by byte
//could I have seeked this?
while (i<fs.Length-8)
{
//set the position in the file
fs.Position = i;
//read off 8 bytes worth of data to pu
into the swf
struct
fs.Read(file,0, 8);
IntPtr ptr
Marshal.AllocHGlobal(file.Length);
Marshal.Copy(file, 0x0, ptr
file.Length);
swf s = (swf
Marshal.PtrToStructure(ptr, typeof(swf));
// if the struct header is FWS then w
may have a flash
file
if (s.header1==0x46 && s.header2==0x5
&&
s.header3==0x53)
{
//we have the identity of
flash file
Console.WriteLine("Found th
header of a flash
file");
Console.WriteLine("Version
{0}", s.version);
Console.WriteLine("Size: {0}"
s.size);
//if the size of the fws is
length of the file
if (s.size + i<=fs.Length)
{
Console.WriteLine("Attempting to write
the file to {0}",
args[1]);
FileStream fw
File.OpenWrite(args[1]);
Console.WriteLine("Allocation byte array
of {0} length", s.size);
byte[] b=ne
byte[s.size];
Console.WriteLine("Reseting the file
back to position: {0}", i);
fs.Position = i;
Console.WriteLine("Reading from {0} to
{1}", i, s.size);
fs.Read(b,0,(int)s.size);
Console.WriteLine("Writing byte array
back to disk");
fw.Write(b, 0
b.Length);
fw.Close();
break;
}
else
{
Console.WriteLine("Th
file is not of
the correct size file: {0},
{1}", s.size, fs.Length);
}
}
i++;
}
fs.Close();
}
}
[StructLayout (LayoutKind.Sequential, Pack = 0x1)]
struct swf
{
public byte header1;
public byte header2;
public byte header3;
public byte version;
public UInt32 size;
}
}
In theory this could be used to extract many forms of embedded binar
data.
---------------------------------------
http://www.sameshow.com
A practical yet easy-to-use software to convert PowerPoint to Flash fo
publishing on
Web or emailing to other