Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/package.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ on:
version:
description: Version written into archive names
required: true
default: 0.3.0
default: 0.4.0
type: string

permissions:
Expand Down
20 changes: 20 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,26 @@

All notable project changes are documented here. The project follows semantic versioning after the first generally available release.

## [0.4.0-rc1] - 2026-08-20

### Added

- Resizable and maximizable native GUI with adaptive lists, system-DPI awareness, modern system theming, and a larger title treatment.
- Offline profile fallback enumeration from the physical `Users` directory.
- Offline local-machine public-certificate store scan in addition to user Personal stores.
- MSI packed ProductCode decoding so confirmed Installer UserData can recover products missing from the uninstall list.

### Fixed

- Explicit native registry-view access prevents the x86 utility from losing physical offline registry paths on an x64 rescue host.
- `SOFTWARE`, user `NTUSER.DAT`, and `SYSTEM` hives are loaded sequentially, respecting the Windows 7 one-application-hive-per-process limitation.
- Offline data rescue remains available if `SYSTEM` cannot be read; destructive offline cleanup is disabled in that state.

### Validation

- User-reported full uninstall and residual cleanup succeeded on a live Windows 10 x64 installation.
- The Windows 7 x86 disconnected-drive scenario that returned zero products/certificates in RC2 is pending a repeat test with this fix.

## [0.3.0-rc2] - 2026-08-19

### Changed
Expand Down
4 changes: 2 additions & 2 deletions CryptoProCleanup.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,12 @@
<PropertyGroup><OutDir>$(MSBuildThisFileDirectory)build\$(Configuration)\</OutDir><IntDir>$(MSBuildThisFileDirectory)build\obj\$(ProjectName)\$(Configuration)\</IntDir><TargetName>CryptoProCleanup</TargetName></PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile><WarningLevel>Level4</WarningLevel><SDLCheck>true</SDLCheck><PreprocessorDefinitions>WIN32;_WINDOWS;UNICODE;_UNICODE;WINVER=0x0601;_WIN32_WINNT=0x0601;NOMINMAX;%(PreprocessorDefinitions)</PreprocessorDefinitions><ConformanceMode>true</ConformanceMode><LanguageStandard>stdcpp17</LanguageStandard><RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary><AdditionalOptions>/utf-8 %(AdditionalOptions)</AdditionalOptions></ClCompile>
<Link><SubSystem>Windows</SubSystem><GenerateDebugInformation>true</GenerateDebugInformation><UACExecutionLevel>RequireAdministrator</UACExecutionLevel><AdditionalDependencies>advapi32.lib;comctl32.lib;crypt32.lib;msi.lib;ole32.lib;oleaut32.lib;setupapi.lib;shell32.lib;shlwapi.lib;taskschd.lib;user32.lib;version.lib;wintrust.lib;%(AdditionalDependencies)</AdditionalDependencies><AdditionalOptions>/SUBSYSTEM:WINDOWS,6.01 %(AdditionalOptions)</AdditionalOptions></Link>
<Link><SubSystem>Windows</SubSystem><GenerateDebugInformation>true</GenerateDebugInformation><UACExecutionLevel>RequireAdministrator</UACExecutionLevel><AdditionalDependencies>advapi32.lib;comctl32.lib;crypt32.lib;msi.lib;ole32.lib;oleaut32.lib;setupapi.lib;shell32.lib;shlwapi.lib;taskschd.lib;user32.lib;uxtheme.lib;version.lib;wintrust.lib;%(AdditionalDependencies)</AdditionalDependencies><AdditionalOptions>/SUBSYSTEM:WINDOWS,6.01 %(AdditionalOptions)</AdditionalOptions></Link>
<Manifest><AdditionalManifestFiles>src\app.manifest</AdditionalManifestFiles></Manifest>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile><WarningLevel>Level4</WarningLevel><FunctionLevelLinking>true</FunctionLevelLinking><IntrinsicFunctions>true</IntrinsicFunctions><SDLCheck>true</SDLCheck><PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;UNICODE;_UNICODE;WINVER=0x0601;_WIN32_WINNT=0x0601;NOMINMAX;%(PreprocessorDefinitions)</PreprocessorDefinitions><ConformanceMode>true</ConformanceMode><LanguageStandard>stdcpp17</LanguageStandard><RuntimeLibrary>MultiThreaded</RuntimeLibrary><AdditionalOptions>/utf-8 %(AdditionalOptions)</AdditionalOptions></ClCompile>
<Link><SubSystem>Windows</SubSystem><EnableCOMDATFolding>true</EnableCOMDATFolding><OptimizeReferences>true</OptimizeReferences><GenerateDebugInformation>true</GenerateDebugInformation><UACExecutionLevel>RequireAdministrator</UACExecutionLevel><AdditionalDependencies>advapi32.lib;comctl32.lib;crypt32.lib;msi.lib;ole32.lib;oleaut32.lib;setupapi.lib;shell32.lib;shlwapi.lib;taskschd.lib;user32.lib;version.lib;wintrust.lib;%(AdditionalDependencies)</AdditionalDependencies><AdditionalOptions>/SUBSYSTEM:WINDOWS,6.01 %(AdditionalOptions)</AdditionalOptions></Link>
<Link><SubSystem>Windows</SubSystem><EnableCOMDATFolding>true</EnableCOMDATFolding><OptimizeReferences>true</OptimizeReferences><GenerateDebugInformation>true</GenerateDebugInformation><UACExecutionLevel>RequireAdministrator</UACExecutionLevel><AdditionalDependencies>advapi32.lib;comctl32.lib;crypt32.lib;msi.lib;ole32.lib;oleaut32.lib;setupapi.lib;shell32.lib;shlwapi.lib;taskschd.lib;user32.lib;uxtheme.lib;version.lib;wintrust.lib;%(AdditionalDependencies)</AdditionalDependencies><AdditionalOptions>/SUBSYSTEM:WINDOWS,6.01 %(AdditionalOptions)</AdditionalOptions></Link>
<Manifest><AdditionalManifestFiles>src\app.manifest</AdditionalManifestFiles></Manifest>
</ItemDefinitionGroup>
<ItemGroup>
Expand Down
8 changes: 6 additions & 2 deletions README.en.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
[![MIT License](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE)
[![Windows 7–11](https://img.shields.io/badge/Windows-7%20SP1%E2%80%9311-0078D6.svg)](#system-requirements)

> **Status: 0.3.0 release candidate.** Safe scanning and backup have been validated on Windows 11 with CryptoPro CSP 5.0. The complete VM matrix, especially Windows 7, CSP 4.x, and destructive disconnected-Windows testing, remains mandatory before general availability.
> **Status: 0.4.0 release candidate.** Safe scanning was validated on Windows 11 with CryptoPro CSP 5.0, and a user successfully completed full removal and residual cleanup on a live Windows 10 x64 system. The disconnected Windows 7 x86 fix still requires a repeat field test before general availability.

An unofficial portable utility for backing up license identifiers and public certificates, controlled removal of installed CryptoPro products, and rescue from a disconnected Windows 7 SP1 through Windows 11 installation.

Expand All @@ -22,6 +22,7 @@ The utility deliberately preserves Windows certificate stores, hardware tokens,
## Features

- native portable Unicode Win32 GUI with RU/EN languages and no .NET dependency;
- resizable/maximizable native window with adaptive tables, system-DPI scaling, and Windows visual styles;
- verified 32/64-bit product discovery by publisher and MSI/EXE metadata;
- complete license display, clipboard copy, and confidential backup;
- selectable public-certificate inventory and CER/P7B export;
Expand All @@ -30,6 +31,9 @@ The utility deliberately preserves Windows certificate stores, hardware tokens,
- restart-safe continuation, masked JSON reporting, and a privacy-safe operation log;
- disconnected-Windows rescue for licenses and public certificates;
- separately confirmed, recovery-backed conservative offline cleanup.
- explicit native-view access for cross-bitness scanning of disconnected x86/x64 Windows hives;
- sequential `SOFTWARE`, user `NTUSER.DAT`, and `SYSTEM` loading compatible with the Windows 7 application-hive limit;
- fallback profile discovery from `Users`, plus public certificates from user and local-machine stores.

## System requirements

Expand Down Expand Up @@ -58,7 +62,7 @@ Safe scan-only CLI:
CryptoProCleanup.exe --scan --report C:\Temp\cryptopro-report.json --lang en
```

Version 0.3.0 has no unattended destructive mode.
Version 0.4.0 has no unattended destructive mode.

## Build and package

Expand Down
8 changes: 6 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
[![MIT License](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE)
[![Windows 7–11](https://img.shields.io/badge/Windows-7%20SP1%E2%80%9311-0078D6.svg)](#системные-требования)

> **Статус: релиз-кандидат 0.3.0.** Безопасное сканирование и резервное копирование проверены на Windows 11 с CryptoPro CSP 5.0. Перед рекомендацией для массового применения ещё требуется полная VM-матрица, особенно Windows 7, CSP 4.x и разрушительная проверка офлайн-очистки.
> **Статус: релиз-кандидат 0.4.0.** Безопасное сканирование проверено на Windows 11 с CryptoPro CSP 5.0; полное удаление и очистка успешно выполнены пользователем на живой Windows 10 x64. Исправление чтения подключённой Windows 7 x86 требует повторной полевой проверки перед стабильным выпуском.

Неофициальная portable-утилита для резервного копирования лицензий и открытых сертификатов, контролируемого удаления установленных продуктов CryptoPro и спасения данных из отключённой Windows 7 SP1–Windows 11.

Expand All @@ -27,6 +27,7 @@
## Возможности

- один нативный x86 EXE без .NET/PowerShell и внешнего runtime;
- изменяемое и максимизируемое окно с адаптивными таблицами, системным DPI-масштабированием и нативным современным оформлением;
- поиск продуктов по подтверждённому издателю в 32- и 64-битных ветках реестра;
- RU/EN интерфейс, выбор продуктов и локальных профилей;
- резервная копия лицензий, JSON-отчёт и обезличенный журнал до удаления;
Expand All @@ -40,6 +41,9 @@
- управляемая перезагрузка и продолжение через защищённый RunOnce-сеанс;
- безопасный CLI-режим сканирования без удаления.
- отдельная вкладка «Неисправный диск» для чтения отключённой Windows, извлечения лицензий и открытых сертификатов и консервативной расширенной очистки.
- явное native/WOW64-чтение офлайн-реестра: x86-утилита корректно обращается к физическим веткам подключённой Windows x86/x64;
- последовательная загрузка `SOFTWARE`, пользовательских `NTUSER.DAT` и `SYSTEM`, совместимая с ограничением Windows 7;
- резервный поиск профилей в `Users` и чтение как пользовательского, так и машинного хранилища открытых сертификатов.

## Системные требования

Expand Down Expand Up @@ -77,7 +81,7 @@ CLI только для безопасного сканирования:
CryptoProCleanup.exe --scan --report C:\Temp\cryptopro-report.json --lang ru
```

Тихого автоматического удаления в версии 0.3.0 нет.
Тихого автоматического удаления в версии 0.4.0 нет.

## Сборка

Expand Down
21 changes: 21 additions & 0 deletions docs/RELEASE_NOTES_0.4.0-rc1.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# КриптоПро Очистка 0.4.0 RC1

Релиз-кандидат с исправлением офлайн-сканирования Windows другой разрядности и обновлённым нативным интерфейсом.

## Главное

- главное окно можно растягивать и максимизировать;
- таблицы и элементы управления адаптируются к ширине и высоте окна;
- добавлены системное DPI-масштабирование, светлое оформление, увеличенный заголовок и Explorer-стиль списков;
- офлайн-реестр всегда читается через явное native view, поэтому x86-утилита на Windows x64 не должна терять физические ветки Windows 7 x86;
- `SOFTWARE`, пользовательские `NTUSER.DAT` и `SYSTEM` загружаются последовательно для совместимости с Windows 7;
- подтверждённые MSI-продукты восстанавливаются также из Installer UserData;
- профили дополнительно ищутся непосредственно в папке `Users`;
- открытые сертификаты читаются из пользовательских и машинного хранилищ;
- если `SYSTEM` недоступен, лицензии и сертификаты всё ещё можно спасти, но очистка блокируется.

## Проверка

Модульные тесты, безопасный интеграционный тест и статический анализ MSVC пройдены. Готовый EXE повторно проверен как нативное x86-приложение с Windows 7 subsystem/API target, UAC-манифестом и статическим C/C++ runtime. Исправление требует повторного теста на подключённом загрузочном диске Windows 7 x86, где RC2 показывал нулевой результат.

EXE не подписан цифровой подписью; предупреждение SmartScreen ожидаемо. Проект не связан с ООО «КРИПТО-ПРО».
3 changes: 3 additions & 0 deletions docs/TEST_MATRIX.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,9 @@ For each VM retain the initial JSON report, final JSON report, cleanup log, prod
## Recorded validation

- 2026-08-19: Windows 11 x64 build 26100, CryptoPro CSP 5.0.13000 plus CryptoPro EDS Browser plug-in 2.0.15400 — unit tests and non-destructive integration scan passed. The scan found the complete MSI `InstallProperties\ProductID` through the packed ProductCode-derived path and enumerated seven public certificates from the current user's logical Personal store without exposing values or names in test output. Temporary CER/P7B export was reopened through CryptoAPI and removed. No removal was performed.
- 2026-08-20: user field report — full installed-product removal and residual cleanup completed successfully on a live Windows 10 x64 system.
- 2026-08-20: RC2 running on Windows 10 x64 returned zero products and certificates for a connected, bootable Windows 7 x86 disk. Version 0.4.0 now uses explicit native registry views, sequential application-hive loading, MSI Installer UserData product recovery, filesystem profile fallback, and user/machine certificate stores. A repeat test on that disk is mandatory before this scenario can pass.
- 2026-08-20: version 0.4.0 unit tests, non-destructive integration scan, and MSVC C++ static analysis passed. The release executable was verified as x86 with OS/subsystem version 6.01, `requireAdministrator`, system-DPI awareness, Common Controls v6, and no dynamic Visual C++ runtime dependency.
- The running Windows directory is rejected as an offline target. A destructive disconnected-Windows VM test is still pending.
- 2026-08-19: MSVC C++ static analysis passed with no warnings. Offline scanning also compares the actual `SOFTWARE` and `SYSTEM` hive file identities so a filesystem alias to the running Windows installation is rejected.
- Destructive scenarios and the remaining OS/CSP matrix, including CSP 4.x, are still mandatory before marking a build generally available.
2 changes: 1 addition & 1 deletion scripts/package.ps1
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
param([string]$Version = '0.3.0')
param([string]$Version = '0.4.0')

$ErrorActionPreference = 'Stop'
$projectRoot = Split-Path -Parent $PSScriptRoot
Expand Down
6 changes: 6 additions & 0 deletions src/app.manifest
Original file line number Diff line number Diff line change
Expand Up @@ -11,5 +11,11 @@
<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}" />
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />
</application></compatibility>
<application xmlns="urn:schemas-microsoft-com:asm.v3">
<windowsSettings>
<dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
<dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">System</dpiAwareness>
</windowsSettings>
</application>
<dependency><dependentAssembly><assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*" /></dependentAssembly></dependency>
</assembly>
Loading
Loading