示例#1
0
        private void DetectFiles(string[] files)
        {
            this.AllowDrop = false;

            _fileList.Clear();

            foreach (string f in files)
            {
                if (Directory.Exists(f))
                {
                    foreach (string x in Directory.GetFiles(f, "*", SearchOption.AllDirectories))
                    {
                        _fileList.Add(x);
                    }
                }
                if (File.Exists(f))
                {
                    _fileList.Add(f);
                }
            }

            // check if all files are JSON files
            _allFilesAreJson = true;

            foreach (string y in _fileList)
            {
                if (!y.EndsWith(".json"))
                {
                    _allFilesAreJson = false;
                    break;
                }
            }

            if (_allFilesAreJson)
            {
                if (TopMostMessageBox.Show("Hashing detected that all files are in JSON, do you wish to analyze them?\nThis will clear previously added files!", "Information", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                {
                    Clear();
                    _fileSummaries = AnalyzeJsonFiles();

                    if (_fileSummaries != null)
                    {
                        if (_fileSummaries.Count > 0)
                        {
                            CalculateSums(true);
                        }
                    }
                }
                else
                {
                    CalculateSums();
                }
            }
            else
            {
                CalculateSums();
            }

            this.AllowDrop = true;
        }
示例#2
0
        private List <FileSummary> AnalyzeJsonFiles()
        {
            List <FileSummary> fileSummaries = new List <FileSummary>();
            List <string>      incompatibles = new List <string>();

            foreach (string s in _fileList)
            {
                try
                {
                    fileSummaries.AddRange(JsonConvert.DeserializeObject <List <FileSummary> >(File.ReadAllText(s)));
                }
                catch //(Exception ex)
                {
                    incompatibles.Add(s);
                    continue;
                }
            }

            _fileList.RemoveAll(x => x.EndsWith(".json"));

            if (incompatibles.Count > 0)
            {
                TopMostMessageBox.Show("Unsupported JSON files detected:\n\n" + ListIncompatibles(incompatibles) + "\nThese files will not be analyzed!", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }

            foreach (FileSummary json in fileSummaries)
            {
                _fileList.Add(json.File);
            }

            return(fileSummaries);
        }
示例#3
0
        private void CalculateSums(bool analyzeJson = false)
        {
            Task.Factory.StartNew(() =>
            {
                lblCalculating.Invoke((MethodInvoker) delegate
                {
                    btnClear.Enabled          = false;
                    btnOptions.Enabled        = false;
                    btnSaveJson.Enabled       = false;
                    btnFindIdenticals.Enabled = false;
                    btnCompare.Enabled        = false;
                    btnBrowse.Enabled         = false;
                    btnCalculate.Enabled      = false;
                    txtPath.Enabled           = false;
                    lblCalculating.Text       = "Calculating...";
                    lblCalculating.Visible    = true;
                }
                                      );

                foreach (string f in _fileList)
                {
                    if (File.Exists(f))
                    {
                        SumResult.Sums.Add(Utilities.CalculateSums(f));
                    }
                }
            }
                                  )
            .ContinueWith((prevTask) =>
            {
                if ((SumResult.Sums != null) && (SumResult.Sums.Count > 0))
                {
                    SumView.Nodes.Clear();

                    TreeNode rootNode = null;
                    _analyzedFiles    = new List <string>();

                    if (analyzeJson)
                    {
                        for (int i = 0; i < SumResult.Sums.Count; i++)
                        {
                            rootNode = new TreeNode(SumResult.Sums[i].File);

                            rootNode.ForeColor = Options.ForegroundColor;
                            rootNode.Tag       = Options.ThemeFlag;

                            if (Options.CurrentOptions.HashOptions.MD5)
                            {
                                rootNode.Nodes.Add("MD5: " + SumResult.Sums[i].MD5);
                                if (SumResult.Sums[i].MD5 == _fileSummaries[i].MD5)
                                {
                                    _analyzedFiles.Add(_fileSummaries[i].File);
                                }
                            }

                            if (Options.CurrentOptions.HashOptions.SHA1)
                            {
                                rootNode.Nodes.Add("SHA1: " + SumResult.Sums[i].SHA1);
                                if (SumResult.Sums[i].SHA1 == _fileSummaries[i].SHA1)
                                {
                                    _analyzedFiles.Add(_fileSummaries[i].File);
                                }
                            }

                            if (Options.CurrentOptions.HashOptions.SHA256)
                            {
                                rootNode.Nodes.Add("SHA256: " + SumResult.Sums[i].SHA256);
                                if (SumResult.Sums[i].SHA256 == _fileSummaries[i].SHA256)
                                {
                                    _analyzedFiles.Add(_fileSummaries[i].File);
                                }
                            }

                            if (Options.CurrentOptions.HashOptions.SHA384)
                            {
                                rootNode.Nodes.Add("SHA384: " + SumResult.Sums[i].SHA384);
                                if (SumResult.Sums[i].SHA384 == _fileSummaries[i].SHA384)
                                {
                                    _analyzedFiles.Add(_fileSummaries[i].File);
                                }
                            }

                            if (Options.CurrentOptions.HashOptions.SHA512)
                            {
                                rootNode.Nodes.Add("SHA512: " + SumResult.Sums[i].SHA512);
                                if (SumResult.Sums[i].SHA512 == _fileSummaries[i].SHA512)
                                {
                                    _analyzedFiles.Add(_fileSummaries[i].File);
                                }
                            }

                            if (Options.CurrentOptions.HashOptions.CRC32)
                            {
                                rootNode.Nodes.Add("CRC32: " + SumResult.Sums[i].CRC32);
                                if (SumResult.Sums[i].CRC32 == _fileSummaries[i].CRC32)
                                {
                                    _analyzedFiles.Add(_fileSummaries[i].File);
                                }
                            }

                            if (Options.CurrentOptions.HashOptions.RIPEMD160)
                            {
                                rootNode.Nodes.Add("RIPEMD160: " + SumResult.Sums[i].RIPEMD160);
                                if (SumResult.Sums[i].RIPEMD160 == _fileSummaries[i].RIPEMD160)
                                {
                                    _analyzedFiles.Add(_fileSummaries[i].File);
                                }
                            }

                            SumView.Invoke((MethodInvoker) delegate
                            {
                                SumView.Nodes.Add(rootNode);
                            });
                        }
                    }
                    else
                    {
                        for (int i = 0; i < SumResult.Sums.Count; i++)
                        {
                            rootNode = new TreeNode(SumResult.Sums[i].File);

                            rootNode.ForeColor = Options.ForegroundColor;
                            rootNode.Tag       = Options.ThemeFlag;

                            if (Options.CurrentOptions.HashOptions.MD5)
                            {
                                rootNode.Nodes.Add("MD5: " + SumResult.Sums[i].MD5);
                            }
                            if (Options.CurrentOptions.HashOptions.SHA1)
                            {
                                rootNode.Nodes.Add("SHA1: " + SumResult.Sums[i].SHA1);
                            }
                            if (Options.CurrentOptions.HashOptions.SHA256)
                            {
                                rootNode.Nodes.Add("SHA256: " + SumResult.Sums[i].SHA256);
                            }
                            if (Options.CurrentOptions.HashOptions.SHA384)
                            {
                                rootNode.Nodes.Add("SHA384: " + SumResult.Sums[i].SHA384);
                            }
                            if (Options.CurrentOptions.HashOptions.SHA512)
                            {
                                rootNode.Nodes.Add("SHA512: " + SumResult.Sums[i].SHA512);
                            }
                            if (Options.CurrentOptions.HashOptions.CRC32)
                            {
                                rootNode.Nodes.Add("CRC32: " + SumResult.Sums[i].CRC32);
                            }
                            if (Options.CurrentOptions.HashOptions.RIPEMD160)
                            {
                                rootNode.Nodes.Add("RIPEMD160: " + SumResult.Sums[i].RIPEMD160);
                            }

                            SumView.Invoke((MethodInvoker) delegate
                            {
                                SumView.Nodes.Add(rootNode);
                            });
                        }
                    }

                    SumView.Invoke((MethodInvoker) delegate
                    {
                        SumView.ExpandAll();
                    });

                    lblCalculating.Invoke((MethodInvoker) delegate
                    {
                        lblCalculating.Text       = "Calculating...";
                        lblCalculating.Visible    = false;
                        btnClear.Enabled          = true;
                        btnOptions.Enabled        = true;
                        btnSaveJson.Enabled       = true;
                        btnFindIdenticals.Enabled = true;
                        btnCompare.Enabled        = true;
                        btnBrowse.Enabled         = true;
                        btnCalculate.Enabled      = true;
                        txtPath.Enabled           = true;
                    }
                                          );

                    try
                    {
                        SumView.Nodes[0].EnsureVisible();
                    }
                    catch { }

                    // opening VirusTotal, after enabling SHA256 hash
                    if (_tempIndex > -1)
                    {
                        Utilities.SearchVirusTotal(SumResult.Sums[_tempIndex].SHA256);
                        _tempIndex = -1;
                    }
                }

                // if JSON analyzation is enabled, show results
                if (analyzeJson)
                {
                    if (_analyzedFiles.Distinct().Count() > 0)
                    {
                        AnalyzedForm f = new AnalyzedForm(_analyzedFiles.Distinct());
                        f.ShowDialog();
                    }
                    else
                    {
                        TopMostMessageBox.Show("All files analyzed by JSON are corrupted!", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                }
            }
                          );
        }