public FormHistory(VirusScanner scanner) { InitializeComponent(); _scanner = scanner; _scanner.VirusFound += VirusScanner_VirusFound; FillListViewWithFoundViruses(); }
public FormMain() { InitializeComponent(); var drives = DriveInfo.GetDrives(); _scanner = new VirusScanner(); var fixedDrives = drives.Where(d => d.DriveType == DriveType.Fixed); var fileSystemMonitoringUnits = fixedDrives.Select(drive => new FileSystemMonitoringUnit(drive.RootDirectory.FullName)); _monitoringUnitController = new MonitoringUnitController( fileSystemMonitoringUnits, new IAlertBehavior[] { new FileAlertBehavior(_scanner) }, new NoMatchingBehaviorBehavior()); _scanner.VirusFound += Scanner_VirusFound; _scanner.NewFileScan += VirusScanner_NewScanFile; foreach (var unit in _monitoringUnitController.Units) { unit.NewAlert += Unit_NewAlert; } var key = VirusScannerSettings.GetApiKeyFromFile(); if (key != null) { _scanner.Start(key); _scanner.VirusTotalQueue.StateChanged += VirusTotalQueue_StateChanged; _monitoringUnitController.Start(); } else { MessageBox.Show(Resources.FormMain_FormMain_Virus_Total_API_Key_Not_found, Resources.FormMain_FormMain_Virus_Total_API_Key_missing); } }
public async Task <IActionResult> CheckFile() { var result = await VirusScanner.ScanStream(Request.Body); await _sql.AddVirusResult(result.Item1, result.Item2); return(Ok(result.Item2.ToString())); }
public async Task CheckVirus() { var tmpFile = new TempFile(); var meta = Game.SkyrimSpecialEdition.MetaData(); var srcFile = meta.GameLocation().Combine(meta.MainExecutable !); await srcFile.CopyToAsync(tmpFile.Path); using (var s = await tmpFile.Path.OpenWrite()) { s.Position = 1000; s.WriteByte(42); } Assert.True(await VirusScanner.ShouldScan(tmpFile.Path)); Assert.Equal(VirusScanner.Result.NotMalware, await ClientAPI.GetVirusScanResult(tmpFile.Path)); }
public FileAlertBehavior(VirusScanner scanner) { _scanner = scanner; }
public override async ValueTask <Directive?> Run(RawSourceFile source) { if (_isGenericGame) { if (source.Path.StartsWith(Consts.GameFolderFilesDir)) { return(null); } } var name = source.File.Name.FileName; RelativePath nameWithoutExt = name; if (name.Extension == Consts.MOHIDDEN) { nameWithoutExt = name.FileNameWithoutExtension; } if (!_indexed.TryGetValue(name, out var choices)) { _indexed.TryGetValue(nameWithoutExt, out choices); } dynamic?modIni = null; if (_compiler is MO2Compiler) { if (_bsa == null && source.File.IsNative && source.AbsolutePath.InFolder(((MO2Compiler)_compiler).MO2ModsFolder)) { ((MO2Compiler)_compiler).ModInis.TryGetValue(ModForFile(source.AbsolutePath), out modIni); } else if (_bsa != null) { var bsaPath = _bsa.FullPath.Base; ((MO2Compiler)_compiler).ModInis.TryGetValue(ModForFile(bsaPath), out modIni); } } var installationFile = (string?)modIni?.General?.installationFile; VirtualFile[] found = {}; // Find based on exact file name + ext if (choices != null && installationFile != null) { var relName = (RelativePath)Path.GetFileName(installationFile); found = choices.Where(f => f.FilesInFullPath.First().Name.FileName == relName).ToArray(); } // Find based on file name only (not ext) if (found.Length == 0 && choices != null) { found = choices.ToArray(); } // Find based on matchAll=<archivename> in [General] in meta.ini var matchAllName = (string?)modIni?.General?.matchAll; if (matchAllName != null && found.Length == 0) { var relName = (RelativePath)Path.GetFileName(matchAllName); if (_indexedByName.TryGetValue(relName, out var arch)) { var dist = new Levenshtein(); found = arch.SelectMany(a => a.ThisAndAllChildren) .OrderBy(a => dist.Distance(a.Name.FileName.ToString(), source.File.Name.FileName.ToString())) .Take(3) .ToArray(); } } if (found.Length == 0) { return(null); } var e = source.EvolveTo <PatchedFromArchive>(); var patches = found.Select(c => (Utils.TryGetPatch(c.Hash, source.File.Hash, out var data), data, c)) .ToArray(); if (patches.All(p => p.Item1)) { var(_, bytes, file) = PickPatch(_compiler, patches); e.FromHash = file.Hash; e.ArchiveHashPath = file.MakeRelativePaths(); e.PatchID = await _compiler.IncludeFile(await bytes !.GetData()); } else { e.Choices = found; } if (source.File.IsNative && await VirusScanner.ShouldScan(source.File.AbsoluteName)) { if (await ClientAPI.GetVirusScanResult(source.File.AbsoluteName) == VirusScanner.Result.Malware) { Utils.ErrorThrow(new Exception($"Executable file {source.File.AbsoluteName} ({source.File}) has been marked as malware.")); } } return(e); }