Esempio n. 1
0
        private void CheckAllDirectoryContents(DirectoryEntry dir)
        {
            IEnumerator <Entry> it = dir.Entries;

            //foreach (Entry entry in dir)
            while (it.MoveNext())
            {
                Entry entry = it.Current;
                if (entry is DirectoryEntry)
                {
                    CheckAllDirectoryContents((DirectoryEntry)entry);
                }
                else
                {
                    DocumentNode        doc = (DocumentNode)entry;
                    DocumentInputStream dis = new DocumentInputStream(doc);
                    try
                    {
                        int    numBytes = dis.Available();
                        byte[] data     = new byte[numBytes];
                        dis.Read(data);
                    }
                    finally
                    {
                        dis.Close();
                    }
                }
            }
        }
Esempio n. 2
0
        public EncryptionInfo(DirectoryNode dir)
        {
            DocumentInputStream dis = dir.CreateDocumentInputStream("EncryptionInfo");
            versionMajor = dis.ReadShort();
            versionMinor = dis.ReadShort();

            encryptionFlags = dis.ReadInt();

            if (versionMajor == 4 && versionMinor == 4 && encryptionFlags == 0x40)
            {
                StringBuilder builder = new StringBuilder();
                byte[] xmlDescriptor = new byte[dis.Available()];
                dis.Read(xmlDescriptor);
                foreach (byte b in xmlDescriptor)
                    builder.Append((char)b);
                string descriptor = builder.ToString();
                header = new EncryptionHeader(descriptor);
                verifier = new EncryptionVerifier(descriptor);
            }
            else
            {
                int hSize = dis.ReadInt();
                header = new EncryptionHeader(dis);
                if (header.Algorithm == EncryptionHeader.ALGORITHM_RC4)
                {
                    verifier = new EncryptionVerifier(dis, 20);
                }
                else
                {
                    verifier = new EncryptionVerifier(dis, 32);
                }
            }
        }
Esempio n. 3
0
        static void Main(string[] args)
        {
            FileStream      stream  = new FileStream("thumbs.db", FileMode.Open, FileAccess.Read);
            POIFSFileSystem poifs   = new POIFSFileSystem(stream);
            var             entries = poifs.Root.Entries;

            //POIFSDocumentReader catalogdr = poifs.CreatePOIFSDocumentReader("Catalog");
            //byte[] b1=new byte[catalogdr.Length-4];
            //catalogdr.Read(b1,4,b1.Length);
            //Dictionary<string, string> indexList = new Dictionary<string, string>();
            //for (int j = 0; j < b1.Length; j++)
            //{
            //    if(b1[0]
            //}

            while (entries.MoveNext())
            {
                DocumentNode        entry = entries.Current as DocumentNode;
                DocumentInputStream dr    = poifs.CreateDocumentInputStream(entry.Name);

                if (entry.Name.ToLower() == "catalog")
                {
                    continue;
                }

                byte[] buffer = new byte[dr.Length];
                dr.Read(buffer);
                int startpos = 0;

                //detect jfif header
                for (int i = 3; i < buffer.Length; i++)
                {
                    if (buffer[i - 3] == 0xFF &&
                        buffer[i - 2] == 0xD8 &&
                        buffer[i - 1] == 0xFF &&
                        buffer[i] == 0xE0)
                    {
                        startpos = i - 3;
                        break;
                    }
                }
                if (startpos == 0)
                {
                    continue;
                }

                FileStream jpeg = File.Create(entry.Name + ".jpeg");
                jpeg.Write(buffer, startpos, buffer.Length - startpos);
                jpeg.Close();
            }

            stream.Close();
        }
Esempio n. 4
0
        /* ********** START implementation of POIFSReaderListener ********** */

        /**
         * Process a POIFSReaderEvent that this listener had registered
         * for
         *
         * @param evt the POIFSReaderEvent
         */

        public void ProcessPOIFSReaderEvent(POIFSReaderEvent evt)
        {
            DocumentInputStream istream = evt.Stream;
            POIFSDocumentPath   path    = evt.Path;
            String name = evt.Name;

            try
            {
                int    size = (int)(istream.Length - istream.Position);
                byte[] data = new byte[size];

                istream.Read(data);
                DocumentDescriptor descriptor = new DocumentDescriptor(path,
                                                                       name);

                Console.WriteLine("Adding document: " + descriptor + " (" + size
                                  + " bytes)");
                dataMap[descriptor] = data;
                int            pathLength = path.Length;
                DirectoryEntry entry      = root;

                for (int k = 0; k < path.Length; k++)
                {
                    String componentName = path.GetComponent(k);
                    Entry  nextEntry     = null;

                    try
                    {
                        nextEntry = entry.GetEntry(componentName);
                    }
                    catch (FileNotFoundException ignored)
                    {
                        try
                        {
                            nextEntry = entry.CreateDirectory(componentName);
                        }
                        catch (IOException e)
                        {
                            Console.WriteLine("Unable to Create directory");
                            //e.printStackTrace();
                            throw;
                        }
                    }
                    entry = (DirectoryEntry)nextEntry;
                }
                entry.CreateDocument(name, size, this);
            }
            catch (IOException ignored)
            {
            }
        }