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; }
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); }
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); } } } ); }