From abb4039ea05bd266b73f42e7b5aec0d0670952e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Benjamin=20H=C3=B6glinger-Stelzer?= Date: Sun, 4 Nov 2018 00:53:47 +0100 Subject: [PATCH] Implemented BcdHelper Updated README --- DerpingDrivers/DerpingDrivers.csproj | 5 ++ ...llowPrereleaseSignaturesFailedException.cs | 24 ++++++++++ DerpingDrivers/MainWindow.xaml.cs | 2 + DerpingDrivers/Util/BcdHelper.cs | 47 +++++++++++++++++++ DerpingDrivers/packages.config | 1 + README.md | 10 ++-- 6 files changed, 86 insertions(+), 3 deletions(-) create mode 100644 DerpingDrivers/Exceptions/BcdAlterAllowPrereleaseSignaturesFailedException.cs create mode 100644 DerpingDrivers/Util/BcdHelper.cs diff --git a/DerpingDrivers/DerpingDrivers.csproj b/DerpingDrivers/DerpingDrivers.csproj index 229f3eb..fd1ad3d 100644 --- a/DerpingDrivers/DerpingDrivers.csproj +++ b/DerpingDrivers/DerpingDrivers.csproj @@ -79,6 +79,9 @@ ..\packages\PInvoke.Windows.Core.0.5.155\lib\net35\PInvoke.Windows.Core.dll + + ..\packages\RunProcessAsTask.1.2.3\lib\net45\RunProcessAsTask.dll + ..\packages\Simple-MAPI.NET.1.1.0\lib\net20\SimpleMapi.dll @@ -111,12 +114,14 @@ MSBuild:Compile Designer + True True Resources.resx + diff --git a/DerpingDrivers/Exceptions/BcdAlterAllowPrereleaseSignaturesFailedException.cs b/DerpingDrivers/Exceptions/BcdAlterAllowPrereleaseSignaturesFailedException.cs new file mode 100644 index 0000000..67eea46 --- /dev/null +++ b/DerpingDrivers/Exceptions/BcdAlterAllowPrereleaseSignaturesFailedException.cs @@ -0,0 +1,24 @@ +using System; +using System.Runtime.Serialization; + +namespace DerpingDrivers.Exceptions +{ + public class BcdAlterAllowPrereleaseSignaturesFailedException : Exception + { + public BcdAlterAllowPrereleaseSignaturesFailedException() + { + } + + public BcdAlterAllowPrereleaseSignaturesFailedException(string message) : base(message) + { + } + + public BcdAlterAllowPrereleaseSignaturesFailedException(string message, Exception innerException) : base(message, innerException) + { + } + + protected BcdAlterAllowPrereleaseSignaturesFailedException(SerializationInfo info, StreamingContext context) : base(info, context) + { + } + } +} \ No newline at end of file diff --git a/DerpingDrivers/MainWindow.xaml.cs b/DerpingDrivers/MainWindow.xaml.cs index 9056855..a7b9d13 100644 --- a/DerpingDrivers/MainWindow.xaml.cs +++ b/DerpingDrivers/MainWindow.xaml.cs @@ -69,6 +69,8 @@ namespace DerpingDrivers { get { + var t = BcdHelper.IsTestSignEnabled; + #region TESTSIGNING mode if (CodeIntegrityHelper.IsTestSignEnabled) diff --git a/DerpingDrivers/Util/BcdHelper.cs b/DerpingDrivers/Util/BcdHelper.cs new file mode 100644 index 0000000..01418e1 --- /dev/null +++ b/DerpingDrivers/Util/BcdHelper.cs @@ -0,0 +1,47 @@ +using DerpingDrivers.Exceptions; +using Microsoft.Win32; +using RunProcessAsTask; + +namespace DerpingDrivers.Util +{ + public static class BcdHelper + { + public static bool IsTestSignEnabled + { + get + { + var bootmgrDefaultGuid = (string) Registry.GetValue( + @"HKEY_LOCAL_MACHINE\BCD00000000\Objects\{9DEA862C-5CDD-4E70-ACC1-F32B344D4795}\Elements\23000003", + "Element", null); + + var allowPrereleaseSignatures = (byte[]) Registry.GetValue( + $@"HKEY_LOCAL_MACHINE\BCD00000000\Objects\{bootmgrDefaultGuid}\Elements\16000049", + "Element", default(byte[])); + + return allowPrereleaseSignatures != null && bool.Parse(allowPrereleaseSignatures[0].ToString()); + } + } + + public static void EnableTestSigning() + { + // NOTE: haven't found an API for this (yet), so system() we go! + var ret = ProcessEx.RunAsync("Bcdedit.exe", "-set TESTSIGNING ON").Result; + + if (ret.ExitCode != 0) + { + throw new BcdAlterAllowPrereleaseSignaturesFailedException("Couldn't enable TESTSIGNING"); + } + } + + public static void DisableTestSigning() + { + // NOTE: haven't found an API for this (yet), so system() we go! + var ret = ProcessEx.RunAsync("Bcdedit.exe", "-set TESTSIGNING OFF").Result; + + if (ret.ExitCode != 0) + { + throw new BcdAlterAllowPrereleaseSignaturesFailedException("Couldn't disable TESTSIGNING"); + } + } + } +} \ No newline at end of file diff --git a/DerpingDrivers/packages.config b/DerpingDrivers/packages.config index 5901955..cb07c84 100644 --- a/DerpingDrivers/packages.config +++ b/DerpingDrivers/packages.config @@ -12,5 +12,6 @@ + \ No newline at end of file diff --git a/README.md b/README.md index 43ac1bc..dbb39fc 100644 --- a/README.md +++ b/README.md @@ -4,9 +4,13 @@ - Icon by [Rebin Infotech](https://www.iconfinder.com/rebininfotech) - [Getting Operating System Version Info - Even for Windows 10!](https://www.codeproject.com/Articles/73000/Getting-Operating-System-Version-Info-Even-for-Win) -- [How do I tell if Windows 10 was a fresh install or upgrade from 7/8?](https://superuser.com/questions/1032064/how-do-i-tell-if-windows-10-was-a-fresh-install-or-upgrade-from-7-8/1184670#1184670) - [NtQuerySystemInformation](https://docs.microsoft.com/de-de/windows/desktop/api/winternl/nf-winternl-ntquerysysteminformation) -- [Can I have any way to detect the Driver Signing Policy status?](https://stackoverflow.com/questions/40084077/can-i-have-any-way-to-detect-the-driver-signing-policy-status/51230137#51230137) - [The TESTSIGNING Boot Configuration Option](https://docs.microsoft.com/en-us/windows-hardware/drivers/install/the-testsigning-boot-configuration-option) - [Windows Version Numbers](http://techthoughts.info/windows-version-numbers/) -- [Is there an easy way to check the .NET Framework version?](https://stackoverflow.com/questions/951856/is-there-an-easy-way-to-check-the-net-framework-version) +- [Super user: How do I tell if Windows 10 was a fresh install or upgrade from 7/8?](https://superuser.com/questions/1032064/how-do-i-tell-if-windows-10-was-a-fresh-install-or-upgrade-from-7-8/1184670#1184670) +- [Stack Overflow: Is there an easy way to check the .NET Framework version?](https://stackoverflow.com/questions/951856/is-there-an-easy-way-to-check-the-net-framework-version) +- [Stack Overflow: Can I have any way to detect the Driver Signing Policy status?](https://stackoverflow.com/questions/40084077/can-i-have-any-way-to-detect-the-driver-signing-policy-status/51230137#51230137) +- [BCDEdit: Mounting the BCD Store as a Registry Hive](http://www.mistyprojects.co.uk/documents/BCDEdit/files/bcd_as_registry_hive.htm) +- [BCDEdit: Objects and Elements](http://www.mistyprojects.co.uk/documents/BCDEdit/files/object_element_codes.htm) +- [Geoff Chappell: BCD Elements](https://www.geoffchappell.com/notes/windows/boot/bcd/elements.htm) +- [Geoff Chappell: Back Doors for Cross-Signed Drivers](https://www.geoffchappell.com/notes/security/whqlsettings/index.htm)