From f42dd4f3ea610ab89c64e7a2d6e69a36706789b8 Mon Sep 17 00:00:00 2001 From: Violet Hansen Date: Sun, 26 Jan 2025 15:01:24 +0200 Subject: [PATCH] =?UTF-8?q?New=20visuals=20and=20fluent=20design=20?= =?UTF-8?q?=E2=9C=A8=20The=20Harden=20Windows=20Security=20module/app=20sw?= =?UTF-8?q?itches=20to=20.NET=209=20(#570)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The Harden Windows Security now uses .NET 9 (PowerShell 7.5), that means: New appearance that is modern, based on Windows 11 fluent design Mica backdrop Better and more modern code Removal of all custom UI elements that belonged to the old WPF designs Faster startup time Support for light/dark theme in the OS Support for accent colors in the OS More accessible user experience Plus so much more benefits Removed features: Custom background image. The ability to set custom background image. Since Mica design is used for the background, there is no longer the need to set a custom color or custom background image. PowerShell 7.5 was released 3 days ago, but since the module will require it, I'm waiting for PowerShell 7.5's MSIX package to be made available as well, and a day after that, will be releasing the new Harden Windows Security module version 0.7.4. This gives users enough time to install the new PowerShell version and also allows the bootstrapper script to automatically install the PowerShell 7.5 using MSIX package for users who don't have it. This process ensures no downtime is experienced by users, especially those who use the Harden Windows Security module in automated workflows. --- Harden-Windows-Security Module/.editorconfig | 6 + .../Harden Windows Security.csproj | 2 +- .../Main files/.NETAssembliesToLoad.txt | 11 - .../C#/Confirm Methods/InvokeConfirmation.cs | 2 +- .../Main files/C#/GUI/ASRRules/Variables.cs | 10 - .../Main files/C#/GUI/ASRRules/View.cs | 35 +- .../C#/GUI/AppControlManager/Variables.cs | 6 +- .../C#/GUI/AppControlManager/View.cs | 23 +- .../Main files/C#/GUI/BitLocker/Variables.cs | 2 +- .../Main files/C#/GUI/BitLocker/View.cs | 75 +- .../Main files/C#/GUI/Confirm/SecOp.cs | 64 +- .../Main files/C#/GUI/Confirm/Variables.cs | 10 - .../Main files/C#/GUI/Confirm/View.cs | 328 ++-- .../Main files/C#/GUI/Exclusions/Variables.cs | 2 +- .../Main files/C#/GUI/Exclusions/View.cs | 43 +- .../C#/GUI/FileReputation/Variables.cs | 2 +- .../Main files/C#/GUI/FileReputation/View.cs | 18 +- .../Main files/C#/GUI/Log/View.cs | 43 +- .../Main files/C#/GUI/Main/GUI.cs | 256 +--- .../Main files/C#/GUI/Main/Variables.cs | 14 +- .../C#/GUI/OptionalFeatures/Variables.cs | 8 +- .../C#/GUI/OptionalFeatures/View.cs | 21 +- .../C#/GUI/Protection/EventHandlers.cs | 753 ---------- .../GUI/Protection/Miscellaneous methods.cs | 31 +- .../Main files/C#/GUI/Protection/Variables.cs | 13 +- .../Main files/C#/GUI/Protection/View.cs | 827 ++++++++-- .../Main files/C#/GUI/Unprotect/Variables.cs | 2 +- .../Main files/C#/GUI/Unprotect/View.cs | 28 +- .../Main files/C#/Others/ActivityTracker.cs | 3 +- .../Main files/C#/Others/CSVImporter.cs | 2 +- .../Main files/C#/Others/Categoriex.cs | 13 +- .../C#/Others/CategoryProcessing.cs | 4 +- .../C#/Others/CertificateGenerator.cs | 9 +- .../Others/ConfirmSystemComplianceMethods.cs | 6 +- .../Others/ControlledFolderAccessHandler.cs | 4 +- .../Main files/C#/Others/DialogMsgHelper.cs | 20 +- .../Main files/C#/Others/Initializer.cs | 4 +- .../Main files/C#/Others/Miscellaneous.cs | 2 +- .../Main files/C#/Others/SSHConfigurations.cs | 3 +- .../C#/Others/SecuriryPolicyProcessor.cs | 2 +- .../Main files/C#/Others/SneakAndPeek.cs | 3 +- .../Main files/C#/Others/UserPrivCheck.cs | 14 - .../Core/Confirm-SystemCompliance.psm1 | 47 +- .../Core/Protect-WindowsSecurity.psm1 | 42 +- .../Core/Unprotect-WindowsSecurity.psm1 | 20 +- .../Harden-Windows-Security-Module.psd1 | 4 +- .../Harden-Windows-Security-Module.psm1 | 23 +- .../Resources/Media/ASRRulesMenuButton.png | Bin 8646 -> 0 bytes .../Media/AppControlManagerMenuButtonIcon.png | Bin 3375 -> 0 bytes .../Resources/Media/BitLockerMenuButton.png | Bin 1681 -> 0 bytes .../Resources/Media/BrowseButtonIconBlack.png | Bin 1890 -> 0 bytes .../Resources/Media/BrowseButtonIconWhite.png | Bin 1943 -> 0 bytes .../Resources/Media/ClearLogsIcon.png | Bin 1508 -> 0 bytes .../Resources/Media/ConfirmMenuButton.png | Bin 2026 -> 0 bytes .../Resources/Media/ConfirmationFalse.png | Bin 3759 -> 0 bytes .../Resources/Media/ConfirmationTrue.png | Bin 3197 -> 0 bytes .../Resources/Media/ExclusionMenuButton.png | Bin 1889 -> 0 bytes .../Resources/Media/ExecuteButtonBig.png | Bin 1136 -> 0 bytes .../Resources/Media/ExportIconBlack.png | Bin 2216 -> 0 bytes .../Resources/Media/ExportIconWhite.png | Bin 2303 -> 0 bytes .../Media/FileReputationMenuButton.png | Bin 3754 -> 0 bytes .../Main files/Resources/Media/Log.png | Bin 1186 -> 0 bytes .../Resources/Media/LogsMenuButton.png | Bin 1103 -> 0 bytes .../Media/OptionalFeaturesMenuButtonIcon.png | Bin 1752 -> 0 bytes .../Main files/Resources/Media/Path.png | Bin 821 -> 0 bytes .../Resources/Media/ProtectMenuButton.png | Bin 2847 -> 0 bytes .../Resources/Media/RefreshButtonIcon.png | Bin 7396 -> 0 bytes .../Resources/Media/UnprotectButton.png | Bin 11584 -> 0 bytes .../Main files/Resources/Media/background.jpg | Bin 899332 -> 0 bytes .../Main files/Resources/Media/start.png | Bin 1133 -> 0 bytes .../Main files/Resources/XAML/ASRRules.xaml | 136 +- .../Resources/XAML/AppControlManager.xaml | 15 +- .../Main files/Resources/XAML/BitLocker.xaml | 227 +-- .../Main files/Resources/XAML/Confirm.xaml | 102 +- .../Main files/Resources/XAML/Exclusions.xaml | 82 +- .../Resources/XAML/FileReputation.xaml | 221 +-- .../Main files/Resources/XAML/Logs.xaml | 30 +- .../Main files/Resources/XAML/Main.xaml | 217 ++- .../Resources/XAML/OptionalFeatures.xaml | 108 +- .../Main files/Resources/XAML/Protect.xaml | 1326 +++++++---------- .../ComboBoxDropDownStyles.xaml | 238 --- .../ConfirmationPageToggleButtonStyles.xaml | 51 - .../ResourceDictionaries/CustomButton2.xaml | 102 -- .../CustomCheckBoxTemplate.xaml | 57 - .../CutePastelTooltips.xaml | 116 -- .../ResourceDictionaries/DataGridStyles.xaml | 254 ---- .../XAML/ResourceDictionaries/Gradients.xaml | 15 - .../XAML/ResourceDictionaries/Image.xaml | 19 - .../XAML/ResourceDictionaries/Label.xaml | 126 -- .../XAML/ResourceDictionaries/MoreStyles.xaml | 21 - .../XAML/ResourceDictionaries/Page.xaml | 37 - .../ResourceDictionaries/PasswordBox.xaml | 32 - .../XAML/ResourceDictionaries/Scrollbars.xaml | 77 - .../SidebarMenuRadioButton.xaml | 133 +- .../XAML/ResourceDictionaries/Slider.xaml | 119 -- .../XAML/ResourceDictionaries/Text.xaml | 25 +- .../ResourceDictionaries/TextBoxStyle05.xaml | 22 - .../Main files/Resources/XAML/Unprotect.xaml | 39 +- .../Main files/Shared/HardeningFunctions.ps1 | 96 +- Harden-Windows-Security Module/Program.cs | 2 +- 100 files changed, 1957 insertions(+), 4948 deletions(-) delete mode 100644 Harden-Windows-Security Module/Main files/C#/GUI/ASRRules/Variables.cs delete mode 100644 Harden-Windows-Security Module/Main files/C#/GUI/Confirm/Variables.cs delete mode 100644 Harden-Windows-Security Module/Main files/C#/GUI/Protection/EventHandlers.cs delete mode 100644 Harden-Windows-Security Module/Main files/C#/Others/UserPrivCheck.cs delete mode 100644 Harden-Windows-Security Module/Main files/Resources/Media/ASRRulesMenuButton.png delete mode 100644 Harden-Windows-Security Module/Main files/Resources/Media/AppControlManagerMenuButtonIcon.png delete mode 100644 Harden-Windows-Security Module/Main files/Resources/Media/BitLockerMenuButton.png delete mode 100644 Harden-Windows-Security Module/Main files/Resources/Media/BrowseButtonIconBlack.png delete mode 100644 Harden-Windows-Security Module/Main files/Resources/Media/BrowseButtonIconWhite.png delete mode 100644 Harden-Windows-Security Module/Main files/Resources/Media/ClearLogsIcon.png delete mode 100644 Harden-Windows-Security Module/Main files/Resources/Media/ConfirmMenuButton.png delete mode 100644 Harden-Windows-Security Module/Main files/Resources/Media/ConfirmationFalse.png delete mode 100644 Harden-Windows-Security Module/Main files/Resources/Media/ConfirmationTrue.png delete mode 100644 Harden-Windows-Security Module/Main files/Resources/Media/ExclusionMenuButton.png delete mode 100644 Harden-Windows-Security Module/Main files/Resources/Media/ExecuteButtonBig.png delete mode 100644 Harden-Windows-Security Module/Main files/Resources/Media/ExportIconBlack.png delete mode 100644 Harden-Windows-Security Module/Main files/Resources/Media/ExportIconWhite.png delete mode 100644 Harden-Windows-Security Module/Main files/Resources/Media/FileReputationMenuButton.png delete mode 100644 Harden-Windows-Security Module/Main files/Resources/Media/Log.png delete mode 100644 Harden-Windows-Security Module/Main files/Resources/Media/LogsMenuButton.png delete mode 100644 Harden-Windows-Security Module/Main files/Resources/Media/OptionalFeaturesMenuButtonIcon.png delete mode 100644 Harden-Windows-Security Module/Main files/Resources/Media/Path.png delete mode 100644 Harden-Windows-Security Module/Main files/Resources/Media/ProtectMenuButton.png delete mode 100644 Harden-Windows-Security Module/Main files/Resources/Media/RefreshButtonIcon.png delete mode 100644 Harden-Windows-Security Module/Main files/Resources/Media/UnprotectButton.png delete mode 100644 Harden-Windows-Security Module/Main files/Resources/Media/background.jpg delete mode 100644 Harden-Windows-Security Module/Main files/Resources/Media/start.png delete mode 100644 Harden-Windows-Security Module/Main files/Resources/XAML/ResourceDictionaries/ComboBoxDropDownStyles.xaml delete mode 100644 Harden-Windows-Security Module/Main files/Resources/XAML/ResourceDictionaries/ConfirmationPageToggleButtonStyles.xaml delete mode 100644 Harden-Windows-Security Module/Main files/Resources/XAML/ResourceDictionaries/CustomButton2.xaml delete mode 100644 Harden-Windows-Security Module/Main files/Resources/XAML/ResourceDictionaries/CustomCheckBoxTemplate.xaml delete mode 100644 Harden-Windows-Security Module/Main files/Resources/XAML/ResourceDictionaries/CutePastelTooltips.xaml delete mode 100644 Harden-Windows-Security Module/Main files/Resources/XAML/ResourceDictionaries/DataGridStyles.xaml delete mode 100644 Harden-Windows-Security Module/Main files/Resources/XAML/ResourceDictionaries/Gradients.xaml delete mode 100644 Harden-Windows-Security Module/Main files/Resources/XAML/ResourceDictionaries/Image.xaml delete mode 100644 Harden-Windows-Security Module/Main files/Resources/XAML/ResourceDictionaries/Label.xaml delete mode 100644 Harden-Windows-Security Module/Main files/Resources/XAML/ResourceDictionaries/MoreStyles.xaml delete mode 100644 Harden-Windows-Security Module/Main files/Resources/XAML/ResourceDictionaries/Page.xaml delete mode 100644 Harden-Windows-Security Module/Main files/Resources/XAML/ResourceDictionaries/PasswordBox.xaml delete mode 100644 Harden-Windows-Security Module/Main files/Resources/XAML/ResourceDictionaries/Scrollbars.xaml delete mode 100644 Harden-Windows-Security Module/Main files/Resources/XAML/ResourceDictionaries/Slider.xaml delete mode 100644 Harden-Windows-Security Module/Main files/Resources/XAML/ResourceDictionaries/TextBoxStyle05.xaml diff --git a/Harden-Windows-Security Module/.editorconfig b/Harden-Windows-Security Module/.editorconfig index 5e4366fba..30de27727 100644 --- a/Harden-Windows-Security Module/.editorconfig +++ b/Harden-Windows-Security Module/.editorconfig @@ -1042,3 +1042,9 @@ dotnet_diagnostic.SYSLIB1054.severity = silent # CA1060: Move P/Invokes to NativeMethods class dotnet_diagnostic.CA1060.severity = error + +# WPF0001: Type is for evaluation purposes only and is subject to change or removal in future updates. Suppress this diagnostic to proceed. +dotnet_diagnostic.WPF0001.severity = silent + +# IDE0330: Prefer 'System.Threading.Lock' +dotnet_diagnostic.IDE0330.severity = error diff --git a/Harden-Windows-Security Module/Harden Windows Security.csproj b/Harden-Windows-Security Module/Harden Windows Security.csproj index d079c5e6a..a7802adc5 100644 --- a/Harden-Windows-Security Module/Harden Windows Security.csproj +++ b/Harden-Windows-Security Module/Harden Windows Security.csproj @@ -77,7 +77,7 @@ - + diff --git a/Harden-Windows-Security Module/Main files/.NETAssembliesToLoad.txt b/Harden-Windows-Security Module/Main files/.NETAssembliesToLoad.txt index 3692d71f4..ab737cad1 100644 --- a/Harden-Windows-Security Module/Main files/.NETAssembliesToLoad.txt +++ b/Harden-Windows-Security Module/Main files/.NETAssembliesToLoad.txt @@ -1,16 +1,11 @@ System System.IO System.Xml -System.Data -WindowsBase System.Xaml System.Linq System.Memory System.Console -System.Windows -System.Runtime System.Net.Http -System.Xml.Linq System.Security PresentationCore System.Text.Json @@ -19,8 +14,6 @@ System.Threading System.Management System.ObjectModel System.Collections -System.Net.Primitives -System.ComponentModel PresentationFramework System.IO.Compression System.Security.Claims @@ -30,7 +23,6 @@ System.Threading.Thread System.Xml.ReaderWriter System.DirectoryServices Microsoft.Win32.Registry -System.Security.Principal System.Diagnostics.Process Microsoft.Win32.Primitives System.Diagnostics.EventLog @@ -40,13 +32,10 @@ System.IO.Compression.zipfile System.Security.AccessControl System.Collections.NonGeneric System.Collections.Concurrent -System.Runtime.InteropServices -System.Windows.Controls.Ribbon System.Text.RegularExpressions System.Text.Encoding.Extensions System.ComponentModel.Primitives System.Security.Principal.Windows System.Diagnostics.FileVersionInfo -System.ComponentModel.TypeConverter Microsoft.Management.Infrastructure System.DirectoryServices.AccountManagement \ No newline at end of file diff --git a/Harden-Windows-Security Module/Main files/C#/Confirm Methods/InvokeConfirmation.cs b/Harden-Windows-Security Module/Main files/C#/Confirm Methods/InvokeConfirmation.cs index a0c2cf78f..44e6536fa 100644 --- a/Harden-Windows-Security Module/Main files/C#/Confirm Methods/InvokeConfirmation.cs +++ b/Harden-Windows-Security Module/Main files/C#/Confirm Methods/InvokeConfirmation.cs @@ -11,7 +11,7 @@ public static class InvokeConfirmation /// This method will perform the system compliance checking and verification /// /// - public static void Invoke(string[] Categories) + public static void Invoke(string[]? Categories) { ControlledFolderAccessHandler.Start(true, false); diff --git a/Harden-Windows-Security Module/Main files/C#/GUI/ASRRules/Variables.cs b/Harden-Windows-Security Module/Main files/C#/GUI/ASRRules/Variables.cs deleted file mode 100644 index 264cc6bab..000000000 --- a/Harden-Windows-Security Module/Main files/C#/GUI/ASRRules/Variables.cs +++ /dev/null @@ -1,10 +0,0 @@ -using System.Windows.Controls; - -namespace HardenWindowsSecurity; - -internal static class GUIASRRules -{ - internal static UserControl? View; - - internal static Grid? ParentGrid; -} diff --git a/Harden-Windows-Security Module/Main files/C#/GUI/ASRRules/View.cs b/Harden-Windows-Security Module/Main files/C#/GUI/ASRRules/View.cs index 44544027f..2786ef3f6 100644 --- a/Harden-Windows-Security Module/Main files/C#/GUI/ASRRules/View.cs +++ b/Harden-Windows-Security Module/Main files/C#/GUI/ASRRules/View.cs @@ -3,6 +3,7 @@ using System.Globalization; using System.IO; using System.Linq; +using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Markup; @@ -28,28 +29,25 @@ private void ASRRulesView(object obj) // if Admin privileges are not available, return and do not proceed any further // Will prevent the page from being loaded since the CurrentView won't be set/changed - if (!UserPrivCheck.IsAdmin()) + if (!Environment.IsPrivilegedProcess) { Logger.LogMessage("ASR Rules page can only be used when running the Harden Windows Security Application with Administrator privileges", LogTypeIntel.ErrorInteractionRequired); return; } - // Construct the file path for the ASRRules view XAML - string xamlPath = Path.Combine(GlobalVars.path, "Resources", "XAML", "ASRRules.xaml"); - // Read the XAML content from the file - string xamlContent = File.ReadAllText(xamlPath); + string xamlContent = File.ReadAllText(Path.Combine(GlobalVars.path, "Resources", "XAML", "ASRRules.xaml")); // Parse the XAML content to create a UserControl - GUIASRRules.View = (UserControl)XamlReader.Parse(xamlContent); + UserControl View = (UserControl)XamlReader.Parse(xamlContent); // Find the Parent Grid - GUIASRRules.ParentGrid = (Grid)GUIASRRules.View.FindName("ParentGrid"); + Grid? ParentGrid = (Grid)View.FindName("ParentGrid"); #region finding elements - Button RetrieveASRStatusButton = GUIASRRules.ParentGrid.FindName("RetrieveASRStatus") as Button ?? throw new InvalidOperationException("RetrieveASRStatus could not be found in the ASRRules view"); - Button ApplyASRRulesButton = GUIASRRules.ParentGrid.FindName("ApplyASRRulesButton") as Button ?? throw new InvalidOperationException("ApplyASRRulesButton could not be found in the ASRRules view"); + Button RetrieveASRStatusButton = (Button)ParentGrid.FindName("RetrieveASRStatus"); + Button ApplyASRRulesButton = (Button)ParentGrid.FindName("ApplyASRRulesButton"); #endregion @@ -68,9 +66,6 @@ void ProcessListViewItems(ListView listView) // Find the StackPanel inside the ListViewItem if (item.Content is StackPanel stackPanel) { - // Find the Label inside the StackPanel - // Label label = stackPanel.Children.OfType