ReadSwf() public method

Read swf (header and tags), this is the only public method of SwfReader with Close and ReadSwfHeader methods. The returned Swf object contains swf headers informations and the tags list.
public ReadSwf ( ) : Swf
return Swf
Example #1
0
 public SwfConverter(Stream stream)
 {
     SwfReader reader = new SwfReader(stream);
     swf = reader.ReadSwf();
     reader.Close();
     Convert();
 }
Example #2
0
        public string GetBytesCode()
        {
            StringBuilder code = new StringBuilder();
            SwfReader Reader = new SwfReader(this.File);
            Swf swf = null;
            try
            {
                swf = Reader.ReadSwf();
            }
            catch (Exception Ex){ throw new Exception(Ex.ToString()); }

            IEnumerator enumerator = swf.Tags.GetEnumerator();
            while (enumerator.MoveNext())
            {
                BaseTag current = (BaseTag)enumerator.Current;
                if (current.ActionRecCount != 0)
                {
                    IEnumerator currentenumerator = current.GetEnumerator();
                    while (currentenumerator.MoveNext())
                    {
                        Decompiler decompiler = new Decompiler(swf.Version);
                        foreach (BaseAction action in decompiler.Decompile((byte[])currentenumerator.Current))
                        {
                            code.AppendLine(action.ToString());
                        }
                    }
                }
            }

            return code.ToString();
        }
Example #3
0
 public SwfConverter(string file)
 {
     SwfReader reader = new SwfReader(file);
     swf = reader.ReadSwf();
     reader.Close();
     Convert();
 }
Example #4
0
        protected override byte[] OnData(byte[] data, object userData)
        {
            dynamic o = userData;
            decrypt(data, o.id, o.cid, o.pid);
            data[3] = 7;

            using (var stream = new MemoryStream(data))
            {
                var swfreader = new SwfReader(stream);
                var swf = swfreader.ReadSwf();
                var j = swf.Tags.OfType<DefineBitsJpeg2Tag>().First();
                return j.JpegData;
            }
        }
Example #5
0
        private void TestFile(string file)
        {
            if (log.IsInfoEnabled)
                log.Info("--- " + file + " (READING)");

            this.Cursor = Cursors.WaitCursor;

            Swf swf = null;

            DateTime readStart = DateTime.Now;
            DateTime readEnd;
            try
            {
                SwfReader reader = new SwfReader(file, true);
                swf = reader.ReadSwf();
                reader.Close();

                readEnd = DateTime.Now;
                TimeSpan duration = new TimeSpan(readEnd.Ticks - readStart.Ticks);
                string min = duration.Minutes.ToString();
                if (min.Length == 1)
                    min = "0" + min;
                string sec = duration.Seconds.ToString();
                if (sec.Length == 1)
                    sec = "0" + sec;
                string msec = duration.Milliseconds.ToString();
                if (msec.Length == 1)
                    msec = "0" + msec;
                string dur = min + ":" + sec + ":" + msec;

                System.Windows.Forms.ListViewItem listViewItem1 = new System.Windows.Forms.ListViewItem(new string[] {"READ: " + file,"OK",dur}, -1);
                listViewItem1.ForeColor = Color.Black;
                this.listView1.Items.Add(listViewItem1);
                this.listView1.Refresh();
                succeded++;

                swfList.Add(swf);
            }
            catch (Exception e)
            {
                readEnd = DateTime.Now;
                TimeSpan duration = new TimeSpan(readEnd.Ticks - readStart.Ticks);
                string min = duration.Minutes.ToString();
                if (min.Length == 1)
                    min = "0" + min;
                string sec = duration.Seconds.ToString();
                if (sec.Length == 1)
                    sec = "0" + sec;
                string msec = duration.Milliseconds.ToString();
                if (msec.Length == 1)
                    msec = "0" + msec;
                string dur = min + ":" + sec + ":" + msec;

                System.Windows.Forms.ListViewItem listViewItem1 = new System.Windows.Forms.ListViewItem(new string[] {"READ: " + file,"KO",dur}, -1);
                listViewItem1.ForeColor = Color.Red;
                this.listView1.Items.Add(listViewItem1);
                this.listView1.Refresh();
                if (log.IsErrorEnabled)
                    log.Error("READING KO", e);
                swfList.Add(null);
            }

            if (log.IsInfoEnabled)
                log.Info("--- " + file + " (WRITING)");

            readStart = DateTime.Now;
            try
            {
                string fileName = System.IO.Path.GetFileName(file);
                string path = this.textBoxOutput.Text + fileName;

                SwfWriter writer = new SwfWriter(path);
                writer.Write(swf);
                writer.Close();

                readEnd = DateTime.Now;
                TimeSpan duration = new TimeSpan(readEnd.Ticks - readStart.Ticks);
                string min = duration.Minutes.ToString();
                if (min.Length == 1)
                    min = "0" + min;
                string sec = duration.Seconds.ToString();
                if (sec.Length == 1)
                    sec = "0" + sec;
                string msec = duration.Milliseconds.ToString();
                if (msec.Length == 1)
                    msec = "0" + msec;
                string dur = min + ":" + sec + ":" + msec;

                System.Windows.Forms.ListViewItem listViewItem1 = new System.Windows.Forms.ListViewItem(new string[] {"WRITE: " + path, "OK",dur}, -1);
                listViewItem1.ForeColor = Color.Black;
                this.listView1.Items.Add(listViewItem1);
                this.listView1.Refresh();

                succededWrite++;
            }
            catch (Exception ee)
            {
                readEnd = DateTime.Now;
                TimeSpan duration = new TimeSpan(readEnd.Ticks - readStart.Ticks);
                string min = duration.Minutes.ToString();
                if (min.Length == 1)
                    min = "0" + min;
                string sec = duration.Seconds.ToString();
                if (sec.Length == 1)
                    sec = "0" + sec;
                string msec = duration.Milliseconds.ToString();
                if (msec.Length == 1)
                    msec = "0" + msec;
                string dur = min + ":" + sec + ":" + msec;

                if (log.IsErrorEnabled)
                    log.Error("WRITING KO", ee);

                System.Windows.Forms.ListViewItem listViewItem1 = new System.Windows.Forms.ListViewItem(new string[] {"WRITE: " + file,"KO",dur}, -1);
                listViewItem1.ForeColor = Color.Red;
                this.listView1.Items.Add(listViewItem1);
                this.listView1.Refresh();
            }

            totalParsed++;
            this.Cursor = Cursors.Default;
            Result.Text = succeded.ToString() + "/" + totalParsed.ToString();
            Result.Refresh();
            WriteResult.Text = succededWrite.ToString() + "/" + totalParsed.ToString();
            WriteResult.Refresh();
        }
Example #6
0
        private void buttSerialize_Click(object sender, System.EventArgs e)
        {
            if (txtPath.Text == string.Empty)
                return;

            string swfPath = txtPath.Text;
            string xmlPath = txtPath.Text + ".xml";

            SwfReader reader = new SwfReader(swfPath);
            Swf swf = reader.ReadSwf();
            reader.Close();

            XmlTextWriter writer = new XmlTextWriter(xmlPath, Encoding.UTF8);
            swf.Serialize(writer);
            writer.Close();

            object o = null;
            this.axWebBrowser1.Navigate("file://" + xmlPath, ref o, ref o, ref o, ref o);
        }
Example #7
0
        private void buttonGenerate_Click(object sender, EventArgs e)
        {
            int numImg = 0;
            int numSound = 0;
            int numActionScript = 0;

            string fileName = textBoxSwf.Text;
            string outputDir = textBoxDir.Text;
            TestPath(fileName, outputDir);

            if (log.IsDebugEnabled)
                log.Debug("**************** Start to decompile file " + fileName);

            listViewPix.Items.Clear();
            listViewSounds.Items.Clear();
            listViewActionScript.Items.Clear();

            SwfReader swfReader = null;
            try
            {
                Cursor.Current = Cursors.WaitCursor;
                //var flvReader = new FlvReader(fileName);
                //var flv = flvReader.ReadFlv();

                swfReader = new SwfReader(fileName); // Create a swf stream reader
                Swf swf = swfReader.ReadSwf(); // Read the completed swf file

                //Read headers infos
                labelSwfVersion.Text = swf.Version.ToString();
                labelSwfDim.Text = swf.Header.Width + "x" + swf.Header.Height;
                labelSwfFps.Text = swf.Header.Fps.ToString();
                labelSwfFrames.Text = swf.Header.Frames.ToString();
                labelSwfSize.Text = swf.Header.FileSize.ToString();
                labelSwfSign.Text = swf.Header.Signature;

                //Read tags info
                IEnumerator tagsEnu = swf.Tags.GetEnumerator(); //Browse swf tags list
                while (tagsEnu.MoveNext())
                {
                    var tag = (BaseTag) tagsEnu.Current;
                    if (tag is SetBackgroundColorTag)
                    {
                        Color bgColor = ((SetBackgroundColorTag) tag).RGB.ToWinColor();
                        labelSwfBgColor.Text = "R:" + bgColor.R + " G:" + bgColor.G + " B:" + bgColor.B;
                    }
                    else if (tag is DefineBitsJpeg2Tag)
                    {
                        numImg++;
                        string outfileName = outputDir + GetRandomName() + ".jpg";
                        ((DefineBitsJpeg2Tag) tag).DecompileToFile(outfileName);

                        string shortName = Path.GetFileName(outfileName);
                        var listViewItem1 = new ListViewItem(new[] {shortName, "jpg"}, -1);
                        listViewPix.Items.Add(listViewItem1);
                    }
                    else if (tag is DefineSoundTag) //Extract a sound file:
                    {
                        numSound++;
                        string outfileName = outputDir + GetRandomName();
                        var soundTag = (DefineSoundTag) tag;
                        if (soundTag.SoundFormat == SoundCodec.MP3)
                            outfileName += ".mp3";
                        else
                            outfileName += ".wav";
                        soundTag.DecompileToFile(outfileName);

                        string shortName = Path.GetFileName(outfileName);
                        var listViewItem1 = new ListViewItem(new[] {shortName, ""}, -1);
                        listViewSounds.Items.Add(listViewItem1);
                    }

                    //If tag contains action script...
                    if (tag.ActionRecCount != 0)
                    {
                        var sb = new StringBuilder();
                        IEnumerator enum2 = tag.GetEnumerator();
                        while (enum2.MoveNext())
                        {
                            var dc = new Decompiler(swf.Version);
                            ArrayList actions = dc.Decompile((byte[]) enum2.Current);
                            foreach (BaseAction obj in actions)
                            {
                                sb.AppendLine(obj.ToString());
                            }
                        }
                        string outfileName = outputDir + GetRandomName() + ".as";

                        var writer = new StreamWriter(outfileName);
                        writer.Write(sb.ToString());
                        writer.Close();
                        numActionScript++;

                        string shortName = Path.GetFileName(outfileName);
                        var listViewItem1 = new ListViewItem(new[] {shortName, ""}, -1);
                        listViewActionScript.Items.Add(listViewItem1);
                    }
                }

                Cursor.Current = Cursors.Default;
                string mssg = "Swf decompiler extracts:\n";
                mssg += numImg + " pictures files\n";
                mssg += numSound + " sound files\n";
                mssg += numActionScript + " action script blocks\n";

                MessageBox.Show(mssg, "Decompilation finished", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            finally
            {
                if (swfReader != null)
                    swfReader.Close(); // Closing stream reader
                Cursor.Current = Cursors.Default;
            }
        }