Esempio n. 1
0
        private void ProcessDirectories(SearchManager smgr, Scanner.ScanEngine s, string outFile, string errFile, bool imageScan, string[] files)
        {
            var starttime = DateTime.Now;

            // Print header
            PrintHeader(outFile, imageScan);

            // Process files
            var processedfiles = 0;

            foreach (var file in files)
            {
                try
                {
                    // If there is a file processor for a give file extension, process the file..
                    foreach (var fm in from fm in smgr.FileReaders where smgr.SupportFileExtension(fm, Path.GetExtension(file)) select fm)
                    {
                        // Only count if we have a file processor
                        ++processedfiles;

                        // Read the text
                        var fc = fm.ReadAllText(file, imageScan);

                        // Scan the text for patterns
                        s.Scan(fc.Text);

                        // Output start
                        PrintProcessingStart(outFile, s, file, fc, imageScan);

                        foreach (var match in s.PatternsFound.OrderBy(idx => idx.Index))
                        {
                            PrintMatch(outFile, match, imageScan);
                        }
                    }
                }
                catch (Exception err)
                {
                    File.AppendAllText(errFile, $"An error occured while processing: {file} => {err.Message}\n");
                }
            }
            if (processedfiles > 0)
            {
                PrintFooter(outFile, starttime, processedfiles, s.GetPatternNames());
            }
        }
Esempio n. 2
0
        /// <summary>
        /// Main processor
        /// </summary>
        /// <param name="args"></param>
        static void Main(string[] args)
        {
            // Parse command line
            cmdline = (Parsed <Options>)Parser.Default.ParseArguments <Options>(args)
                      .WithParsed <Options>(o =>
            {
                bool dir = string.IsNullOrEmpty(o.Directory);
                bool fil = string.IsNullOrEmpty(o.File);
                if (dir == true && fil == true)
                {
                    Console.Error.WriteLine("You must provide either a directory or file to process");
                    Console.WriteLine("Press any key to continue...");
                    Console.ReadKey();
                    Environment.Exit(-1);
                }
                // Make sure it is a valid directory before we do anything
                if (dir == false && Directory.Exists(o.Directory) == false)
                {
                    Console.Error.WriteLine($"Invalid directory: '{o.Directory}'");
                    Console.WriteLine("Press any key to continue...");
                    Console.ReadKey();
                    Environment.Exit(-1);
                }
                if (fil == false && File.Exists(o.File) == false)
                {
                    Console.Error.WriteLine($"Invalid file: '{o.File}'");
                    Console.WriteLine("Press any key to continue...");
                    Console.ReadKey();
                    Environment.Exit(-1);
                }
            })
                      .WithNotParsed <Options>(e =>
            {
                Console.WriteLine("Press any key to continue...");
                Console.ReadKey();
                Environment.Exit(-2);
            });

            if (cmdline.Value.Recursive == false)
            {
                CreateOutfiles();
            }
            else
            {
                CreateOutDir();
            }

            // Load the FileManagers
            smgr.ImportFileReaders();
            if (smgr.FileReaders.Count() == 0)
            {
                File.AppendAllText(GetFileName(false, cmdline.Value.Directory ?? cmdline.Value.File), "No file readers found\n");
                Environment.Exit(-3);
            }

            // Load the Scan engine and the patterns
            if (scanner.LoadPatterns() == 0)
            {
                File.AppendAllText(GetFileName(false, cmdline.Value.Directory ?? cmdline.Value.File), "No patterns found\n");
                Environment.Exit(-4);
            }
            timeoutValue = int.Parse(ConfigurationManager.AppSettings["Timeout"] ?? "60");

            //Process
            if (string.IsNullOrEmpty(cmdline.Value.Directory) == false)
            {
                Console.WriteLine($"Scanning {cmdline.Value.Directory} for files that contain sensitive information. Results will be stored in {cmdline.Value.OutFile}...");
                ProcessDir(cmdline.Value.Directory, cmdline.Value.Recursive);
            }
            if (string.IsNullOrEmpty(cmdline.Value.File) == false)
            {
                // Print header
                PrintHeader(DateTime.Now, cmdline.Value.OutFile);

                // Process single file
                int processedfiles = ProcessFiles(new string[] { cmdline.Value.File });

                // Print footer
                PrintFooter(DateTime.Now, cmdline.Value.OutFile, processedfiles, scanner.GetPatternNames());
            }
        }