/// <summary> /// Starts the pointer address rebase. /// </summary> private void StartPointerRebase() { TrackableTask <PointerBag> pointerRebaseTask = PointerRebase.Scan(PointerScanResultsViewModel.GetInstance().DiscoveredPointers, readMemory: true, performUnchangedScan: true); TaskTrackerViewModel.GetInstance().TrackTask(pointerRebaseTask); PointerScanResultsViewModel.GetInstance().DiscoveredPointers = pointerRebaseTask.Result; }
/// <summary> /// Starts the pointer value rescan. /// </summary> private void StartPointerRetargetScan() { TrackableTask <PointerBag> pointerRetargetScanTask = PointerRetargetScan.Scan(this.RetargetAddress, 4, PointerScanResultsViewModel.GetInstance().DiscoveredPointers); TaskTrackerViewModel.GetInstance().TrackTask(pointerRetargetScanTask); PointerScanResultsViewModel.GetInstance().DiscoveredPointers = pointerRetargetScanTask.Result; }
/// <summary> /// Starts the scan using the current constraints. /// </summary> private void StartScan() { // Create a constraint manager that includes the current active constraint ConstraintNode scanConstraints = this.ActiveConstraint.Clone(); if (!scanConstraints.IsValid()) { Logger.Log(LogLevel.Warn, "Unable to start scan with given constraints"); return; } DataType dataType = ScanResultsViewModel.GetInstance().ActiveType; // Collect values TrackableTask <Snapshot> valueCollectorTask = ValueCollector.CollectValues( SnapshotManager.GetSnapshot(Snapshot.SnapshotRetrievalMode.FromActiveSnapshotOrPrefilter, dataType)); TaskTrackerViewModel.GetInstance().TrackTask(valueCollectorTask); // Perform manual scan on value collection complete valueCollectorTask.OnCompletedEvent += ((completedValueCollection) => { Snapshot snapshot = valueCollectorTask.Result; TrackableTask <Snapshot> scanTask = ManualScanner.Scan( snapshot, scanConstraints); TaskTrackerViewModel.GetInstance().TrackTask(scanTask); SnapshotManager.SaveSnapshot(scanTask.Result); }); }
/// <summary> /// Starts the pointer scan. /// </summary> private void StartScan() { TrackableTask <PointerBag> pointerScanTask = PointerScan.Scan(this.TargetAddress, (UInt32)this.PointerRadius, this.PointerDepth, 4); TaskTrackerViewModel.GetInstance().TrackTask(pointerScanTask); PointerScanResultsViewModel.GetInstance().DiscoveredPointers = pointerScanTask.Result; }
/// <summary> /// Begins the value collection. /// </summary> private void CollectValues() { DataType dataType = ScanResultsViewModel.GetInstance().ActiveType; TrackableTask <Snapshot> valueCollectTask = ValueCollector.CollectValues( SnapshotManager.GetSnapshot(Snapshot.SnapshotRetrievalMode.FromActiveSnapshotOrPrefilter, dataType)); TaskTrackerViewModel.GetInstance().TrackTask(valueCollectTask); SnapshotManager.SaveSnapshot(valueCollectTask.Result); }
/// <summary> /// Starts the pointer value rescan. /// </summary> private void StartPointerRetargetScan() { try { TrackableTask <PointerBag> pointerRetargetScanTask = PointerRetargetScan.Scan(this.RetargetAddress, 4, PointerScanResultsViewModel.GetInstance().DiscoveredPointers, PointerScannerViewModel.PointerScanTaskIdentifier); TaskTrackerViewModel.GetInstance().TrackTask(pointerRetargetScanTask); PointerScanResultsViewModel.GetInstance().DiscoveredPointers = pointerRetargetScanTask.Result; } catch (TaskConflictException) { } }
/// <summary> /// Starts the pointer address rebase. /// </summary> private void StartPointerRebase() { try { TrackableTask <PointerBag> pointerRebaseTask = PointerRebase.Scan(PointerScanResultsViewModel.GetInstance().DiscoveredPointers, readMemory: true, performUnchangedScan: true, taskIdentifier: PointerScannerViewModel.PointerScanTaskIdentifier); TaskTrackerViewModel.GetInstance().TrackTask(pointerRebaseTask); PointerScanResultsViewModel.GetInstance().DiscoveredPointers = pointerRebaseTask.Result; } catch (TaskConflictException) { } }
/// <summary> /// Begins the value collection. /// </summary> private void CollectValues() { DataTypeBase dataType = ScanResultsViewModel.GetInstance().ActiveType; TrackableTask <Snapshot> valueCollectTask = ValueCollector.CollectValues( SessionManager.Session?.OpenedProcess, SessionManager.Session.SnapshotManager.GetActiveSnapshotCreateIfNone(SessionManager.Session.OpenedProcess), TrackableTask.UniversalIdentifier ); TaskTrackerViewModel.GetInstance().TrackTask(valueCollectTask); SessionManager.Session.SnapshotManager.SaveSnapshot(valueCollectTask.Result); }
/// <summary> /// Starts the pointer value rescan. /// </summary> private void StartPointerRetargetScan() { try { PointerSize pointerSize = SessionManager.Session.OpenedProcess.Is32Bit() ? PointerSize.Byte4 : PointerSize.Byte8; TrackableTask <PointerBag> pointerRetargetScanTask = PointerRetargetScan.Scan( SessionManager.Session.OpenedProcess, this.RetargetAddress, pointerSize.ToSize(), PointerScanResultsViewModel.GetInstance().DiscoveredPointers, PointerScannerViewModel.PointerScanTaskIdentifier ); TaskTrackerViewModel.GetInstance().TrackTask(pointerRetargetScanTask); PointerScanResultsViewModel.GetInstance().DiscoveredPointers = pointerRetargetScanTask.Result; } catch (TaskConflictException) { } }
/// <summary> /// Starts the scan using the current constraints. /// </summary> private void StartScan() { // Create a constraint manager that includes the current active constraint DataTypeBase dataType = ScanResultsViewModel.GetInstance().ActiveType; ScanConstraints scanConstraints = new ScanConstraints(dataType, this.ActiveConstraint?.Clone()); if (!scanConstraints.IsValid()) { Logger.Log(LogLevel.Warn, "Unable to start scan with given constraints"); return; } try { // Collect values TrackableTask <Snapshot> valueCollectorTask = ValueCollector.CollectValues( SessionManager.Session.OpenedProcess, SessionManager.Session.SnapshotManager.GetActiveSnapshotCreateIfNone(SessionManager.Session.OpenedProcess), TrackableTask.UniversalIdentifier ); TaskTrackerViewModel.GetInstance().TrackTask(valueCollectorTask); // Perform manual scan on value collection complete valueCollectorTask.OnCompletedEvent += ((completedValueCollectionTask) => { Snapshot snapshot = valueCollectorTask.Result; TrackableTask <Snapshot> scanTask = ManualScanner.Scan( snapshot, scanConstraints, TrackableTask.UniversalIdentifier); TaskTrackerViewModel.GetInstance().TrackTask(scanTask); SessionManager.Session.SnapshotManager.SaveSnapshot(scanTask.Result); }); } catch (TaskConflictException) { } }
/// <summary> /// Fetches and applies updates from the Github repository. The application is not restarted. /// </summary> public static void UpdateApp() { if (!ApplicationUpdater.IsSquirrelInstalled()) { Logger.Log(LogLevel.Warn, "Updater not found, Squalr will not check for automatic updates."); return; } Task.Run(async() => { try { using (UpdateManager manager = await UpdateManager.GitHubUpdateManager(ApplicationUpdater.GithubRepositoryUrl)) { UpdateInfo updates = await manager.CheckForUpdate(); ReleaseEntry lastVersion = updates?.ReleasesToApply?.OrderBy(x => x.Version).LastOrDefault(); if (lastVersion == null) { Logger.Log(LogLevel.Info, "Squalr is up to date."); return; } Logger.Log(LogLevel.Info, "New version of Squalr found. Downloading files in background..."); TrackableTask <Boolean> downloadTask = TrackableTask <Boolean> .Create("Downloading Updates", out UpdateProgress updateProgress, out CancellationToken cancellationToken) .With(Task <Boolean> .Run(() => { try { manager.DownloadReleases(new[] { lastVersion }, (progress) => updateProgress(progress)).Wait(); } catch (Exception ex) { Logger.Log(LogLevel.Error, "Error downloading updates.", ex); return(false); } return(true); }, cancellationToken)); TaskTrackerViewModel.GetInstance().TrackTask(downloadTask); if (!downloadTask.Result) { return; } TrackableTask <Boolean> applyReleasesTask = TrackableTask <Boolean> .Create("Applying Releases", out updateProgress, out cancellationToken) .With(Task <Boolean> .Run(() => { try { manager.ApplyReleases(updates, (progress) => updateProgress(progress)).Wait(); } catch (Exception ex) { Logger.Log(LogLevel.Error, "Error applying releases.", ex); return(false); } return(true); }, cancellationToken)); TaskTrackerViewModel.GetInstance().TrackTask(applyReleasesTask); if (!applyReleasesTask.Result) { return; } TrackableTask <Boolean> updateTask = TrackableTask <Boolean> .Create("Updating", out updateProgress, out cancellationToken) .With(Task <Boolean> .Run(() => { try { manager.UpdateApp((progress) => updateProgress(progress)).Wait(); } catch (Exception ex) { Logger.Log(LogLevel.Error, "Error applying updates.", ex); return(false); } return(true); }, cancellationToken)); TaskTrackerViewModel.GetInstance().TrackTask(updateTask); if (!updateTask.Result) { return; } Logger.Log(LogLevel.Info, "New Squalr version downloaded. Restart the application to apply updates."); } } catch (Exception ex) { Logger.Log(LogLevel.Error, "Error updating Squalr.", ex); } }); }