diff --git a/CHANGELOG.txt b/CHANGELOG.txt index 203a4e0..2922408 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -1,4 +1,7 @@ -Version 1.5 - +Version 1.6 - 2026-02-09 + * Add fallback method when NtSetValueKey fails + +Version 1.5 - 2025-04-14 * Add support for .pol files * Extend .reg file format for readability of REG_MULTI_SZ, REG_EXPAND_SZ and REG_QWORD values diff --git a/LICENSE.txt b/LICENSE.txt index ffa6692..f51c1fe 100644 --- a/LICENSE.txt +++ b/LICENSE.txt @@ -1,4 +1,4 @@ - Copyright 2025 Stormshield + Copyright 2026 Stormshield Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/README.txt b/README.txt index 8c3c910..c128634 100644 --- a/README.txt +++ b/README.txt @@ -1,4 +1,4 @@ -(C) 2025 Stormshield +(C) 2026 Stormshield HiveSwarming - Conversions between registry hive and registry export formats without a need for special privileges. @@ -74,3 +74,15 @@ A. This is a consequence of the internals of registry hives. We try to delete Q. Do you accept pull requests? A. They are welcome and will be reviewed. + +GET IT +------ + +Hiveswarming is a standalone executable. You can just download it from the +Github release pages. The executable should be digitally signed. + +As of August 2025, Hiveswarming v1.5 has been made available on WinGet by a +third-party user contribution (@upintheairsheep). +You can install this specific version with: + winget install Hiveswarming --exact --id HiveSwarming --version 1.5.0.0 + diff --git a/src/CommonFunctions.cpp b/src/CommonFunctions.cpp index b214de5..f2805d9 100644 --- a/src/CommonFunctions.cpp +++ b/src/CommonFunctions.cpp @@ -1,4 +1,4 @@ -// (C) Stormshield 2025 +// (C) Stormshield 2026 // Licensed under the Apache license, version 2.0 // See LICENSE.txt for details diff --git a/src/CommonFunctions.h b/src/CommonFunctions.h index 9adc9f1..aec455f 100644 --- a/src/CommonFunctions.h +++ b/src/CommonFunctions.h @@ -1,4 +1,4 @@ -// (C) Stormshield 2025 +// (C) Stormshield 2026 // Licensed under the Apache license, version 2.0 // See LICENSE.txt for details diff --git a/src/Constants.h b/src/Constants.h index ed1b2d0..1273ba2 100644 --- a/src/Constants.h +++ b/src/Constants.h @@ -1,4 +1,4 @@ -// (C) Stormshield 2025 +// (C) Stormshield 2026 // Licensed under the Apache license, version 2.0 // See LICENSE.txt for details diff --git a/src/Conversions.h b/src/Conversions.h index 02a885a..ac491cd 100644 --- a/src/Conversions.h +++ b/src/Conversions.h @@ -1,4 +1,4 @@ -// (C) Stormshield 2025 +// (C) Stormshield 2026 // Licensed under the Apache license, version 2.0 // See LICENSE.txt for details diff --git a/src/HiveSwarming.cpp b/src/HiveSwarming.cpp index 71fe7b3..2f3267d 100644 --- a/src/HiveSwarming.cpp +++ b/src/HiveSwarming.cpp @@ -1,4 +1,4 @@ -// (C) Stormshield 2025 +// (C) Stormshield 2026 // Licensed under the Apache license, version 2.0 // See LICENSE.txt for details diff --git a/src/HiveSwarming.rc b/src/HiveSwarming.rc index 08b28f9..a91dfae 100644 --- a/src/HiveSwarming.rc +++ b/src/HiveSwarming.rc @@ -25,8 +25,8 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US // VS_VERSION_INFO VERSIONINFO - FILEVERSION 1,5,0,0 - PRODUCTVERSION 1,5,0,0 + FILEVERSION 1,6,0,0 + PRODUCTVERSION 1,6,0,0 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -43,12 +43,12 @@ BEGIN BEGIN VALUE "CompanyName", "Stormshield SAS" VALUE "FileDescription", "Conversions between Registry export format and Registry hive" - VALUE "FileVersion", "1.5.0.0" + VALUE "FileVersion", "1.6.0.0" VALUE "InternalName", "HiveSwarming.exe" - VALUE "LegalCopyright", "Copyright (C) 2025 Stormshield SAS" + VALUE "LegalCopyright", "Copyright (C) 2026 Stormshield SAS" VALUE "OriginalFilename", "HiveSwarming.exe" VALUE "ProductName", "HiveSwarming" - VALUE "ProductVersion", "1.5.0.0" + VALUE "ProductVersion", "1.6.0.0" END END BLOCK "VarFileInfo" diff --git a/src/HiveSwarming.vcxproj b/src/HiveSwarming.vcxproj index 441d2e5..122deda 100644 --- a/src/HiveSwarming.vcxproj +++ b/src/HiveSwarming.vcxproj @@ -80,6 +80,7 @@ Console true + /PDBALTPATH:Hiveswarming.pdb %(AdditionalOptions) @@ -87,8 +88,6 @@ _DEBUG;%(PreprocessorDefinitions) MultiThreadedDebug - - diff --git a/src/HiveToInternal.cpp b/src/HiveToInternal.cpp index f92d99b..1e88f92 100644 --- a/src/HiveToInternal.cpp +++ b/src/HiveToInternal.cpp @@ -1,4 +1,4 @@ -// (C) Stormshield 2025 +// (C) Stormshield 2026 // Licensed under the Apache license, version 2.0 // See LICENSE.txt for details diff --git a/src/InternalToHive.cpp b/src/InternalToHive.cpp index a8fcb1e..f8e5ae2 100644 --- a/src/InternalToHive.cpp +++ b/src/InternalToHive.cpp @@ -1,4 +1,4 @@ -// (C) Stormshield 2025 +// (C) Stormshield 2026 // Licensed under the Apache license, version 2.0 // See LICENSE.txt for details @@ -107,8 +107,12 @@ _Must_inspect_result_ static HRESULT InternalToHkey NTSTATUS Status = NtSetValueKey(KeyHandle, &ValueName, 0ul, Value.Type, (PVOID)Value.BinaryValue.data(), static_cast(Value.BinaryValue.size())); if (NT_SUCCESS(Status) == FALSE) { - ReportError(Status, L"Could not set value " + Value.Name + L" of key " + RegKey.Name + L" with NtSetValueKey, trying fallback"); - goto Cleanup; + Result = RegSetKeyValueW(KeyHandle, nullptr, Value.Name.c_str(), Value.Type, (PVOID)Value.BinaryValue.data(), static_cast(Value.BinaryValue.size())); + if (FAILED(Result)) { + ReportError(HRESULT_FROM_NT(Status), L"Could not set value " + Value.Name + L" of key " + RegKey.Name + L" with NtSetValueKey."); + ReportError(Result, L"Could not set value " + Value.Name + L" of key " + RegKey.Name + L" with RegSetKeyValueW as fallback."); + goto Cleanup; + } } } diff --git a/src/InternalToPolfile.cpp b/src/InternalToPolfile.cpp index bad0e5c..8a8c680 100644 --- a/src/InternalToPolfile.cpp +++ b/src/InternalToPolfile.cpp @@ -1,4 +1,4 @@ -// (C) Stormshield 2025 +// (C) Stormshield 2026 // Licensed under the Apache license, version 2.0 // See LICENSE.txt for details diff --git a/src/InternalToRegfile.cpp b/src/InternalToRegfile.cpp index 3beb052..d505c20 100644 --- a/src/InternalToRegfile.cpp +++ b/src/InternalToRegfile.cpp @@ -1,4 +1,4 @@ -// (C) Stormshield 2025 +// (C) Stormshield 2026 // Licensed under the Apache license, version 2.0 // See LICENSE.txt for details diff --git a/src/PolfileToInternal.cpp b/src/PolfileToInternal.cpp index 8af46cc..96d2bed 100644 --- a/src/PolfileToInternal.cpp +++ b/src/PolfileToInternal.cpp @@ -1,4 +1,4 @@ -// (C) Stormshield 2025 +// (C) Stormshield 2026 // Licensed under the Apache license, version 2.0 // See LICENSE.txt for details diff --git a/src/RegfileToInternal.cpp b/src/RegfileToInternal.cpp index fa495fb..a50e38a 100644 --- a/src/RegfileToInternal.cpp +++ b/src/RegfileToInternal.cpp @@ -1,4 +1,4 @@ -// (C) Stormshield 2025 +// (C) Stormshield 2026 // Licensed under the Apache license, version 2.0 // See LICENSE.txt for details