
ポリモーフィックVMコード仮想化、コンパイル時MBAおよび文字列難読化、25以上の暗号プリミティブ、アンチデバッグ/アンチダンプ、HWIDライセンスを備えたシングルヘッダーC++20ソフトウェア保護SDK。
aegis_protection.hpp)シングルヘッダー C++20 コード仮想化、難読化、暗号化 & アンチタンパー SDK
産業グレードのゼロ依存シングルヘッダー C++20 ソフトウェア保護 SDK(単一の .hpp ファイルに10,145 行以上のコード):多態的バイトコードを備えたハイブリッドスタック・レジスタ仮想マシン、C ライクなスクリプトから V-ISA へのコンパイラ、25 以上の暗号プリミティブ、コンパイル時難読化、アンチデバッグ、実行時メモリ整合性ウォッチドッグ、暗号化 VFS、ハードウェアバインドライセンス。
外部依存、複雑なビルドスクリプト、不要なファイルは一切なし — シングルヘッダー SDK とその検証テストスイートのみ:
├── aegis_protection.hpp # Single-header C++20 SDK (10,145 LOC, 67 integrated subsystems)
├── test_all_in_one.cpp # Complete verification suite (20 test suites + 12 crypto KAT checks)
└── README.md # Bilingual documentation & developer manual (EN / RU)
C++20 プロジェクトに aegis_protection.hpp を直接インクルードします:
#include "aegis_protection.hpp"
cl /std:c++20 /EHsc /W4 /O2 test_all_in_one.cpp /Fe:test_all_in_one.exe
.\test_all_in_one.exe
clang++ -std=c++20 -O2 -Wall -Wextra test_all_in_one.cpp -o test_all_in_one
./test_all_in_one
flowchart LR
A["Source Logic / Script"] --> B["AegisScript / BytecodeBuilder"]
B --> C["IR Obfuscation Passes<br/>(Constant Blinding, MBA, Junk)"]
C --> D["Polymorphic Opcode Map<br/>(Compile-Time Shuffle)"]
D --> E["Rolling-Key Cipher<br/>+ BytecodeEnvelope"]
E --> F["Aegis Virtual Machine<br/>(MBA Dispatch + Ephemeral Wipe)"]
G["IntegrityWatchdog + VEH Guard"] --> F
| カテゴリ | 名前空間 | 主要クラスと機能 |
|---|---|---|
| コード仮想化 (VM) | aegis::vm | VirtualMachine、BytecodeBuilder、BytecodeChunk、VMContext、NativeBridge、PolymorphicOpcodeMap (コンパイル時のFisher-Yatesによる256オペコード置換)、拡張V-ISA (OP_BSWAP、OP_POPCNT、OP_VMEMCPY、OP_VMEMSET、OP_REKEY、OP_JUNK) |
| VMコンパイラとツールチェーン | aegis::vm::* | AegisScriptCompiler (CライクなスクリプトをV-ISAバイトコードにコンパイル)、VmTextAssembler (ラベル付きテキストアセンブラ)、BytecodeDisassembler (+ CFGビルダー)、BytecodeDecompiler (バイトコードをC疑似コードにリフト)、BytecodeObfuscationPipeline、SsaLifter (SSA + リニアスキャンアロケータ)、BytecodeAbstractInterpreter、VMProfiler、VMDebugger |
| コンパイル時難読化 | aegis::obf | Mba (Mixed Boolean Arithmetic)、AEGIS_STR / AEGIS_STR_OBJ (自動スタックゼロ化を伴うconstexpr文字列暗号化)、AEGIS_INT / ObfuscatedInt、Opaque述語、FlatteningMachine (制御フロー平坦化)、EncryptedDispatchTable |
| 対称暗号とAEAD | aegis::crypto | Aes256 (ECB/CBC/CTR + PKCS#7)、ChaCha20、ChaCha20Poly1305 (RFC 8439 AEAD)、XChaCha20 (192ビットノンス)、Salsa20、Camellia256 (RFC 3713)、Serpent256 (32ラウンドSPN)、Threefish512 (72ラウンド)、Blowfish、Rc6_256、Speck128、Simon128、Sm4、XTea |
| 暗号学的ハッシュとKDF | aegis::crypto | Sha256 (FIPS 180-4 + HMAC)、Sha512 / Sha384 (+ HMAC)、Keccak1600 (sha3_256、sha3_512、shake256)、Blake2b、Blake2s、Ascon320 (NIST SP 800-232)、Sm3、Poly1305、SipHash24、KdfEngine (pbkdf2_hmac_sha256、hkdf_extract/expand、memory_hard_derive)、ChaCha20Drbg (CSPRNG + UUIDv4) |
| 公開鍵、秘密分散、ECC | aegis::crypto / aegis::math | X25519 (RFC 7748 Curve25519 ECDH)、Uint256 (mod_add、mod_mul、mod_pow)、ShamirSecretSharing ($GF(2^8)$ におけるしきい値 $(K, N)$)、SelfHealingBuffer (RAM内でのハミングSEC-DED + XORパリティ復元)、MerkleTree (包含証明)、WhiteBoxByteNetwork |
| アンチデバッグとメモリ防御 | aegis::anti / aegis::veh / aegis::watchdog / aegis::syscall | AntiDebug (PEB、NtGlobalFlag、Dr0–Dr7、RDTSC、ThreadHideFromDebugger、ProcessDebugPort)、AntiVm (CPUIDハイパーバイザベンダー、MAC、レジストリ)、EmulatorDetector (IEEE-754 NaNペイロードの忠実性)、AntiDump (erase_pe_headers)、IntegrityScanner、CodePatchGuard、ApiResolver (IATフリーのAEGIS_API)、SyscallResolver (ntdll.dllのSSN抽出とフック検出)、VehGuard (ハードウェアブレークポイントスクラバー)、IntegrityWatchdog (バックグラウンド監視スレッド) |
| ライセンス、VFS、ウォーターマーキング | aegis::license / aegis::archive / aegis::watermark | LicenseManager (HWIDバインディングとChaCha20-Poly1305を備えたAEGIS-XXXX-...キー)、AegisVfsArchive (LZSS圧縮を備えた暗号化仮想ファイルシステム)、BytecodeWatermarker (ステガノグラフィによる顧客ウォーターマーク)、HardwareId (TPM 2.0 EKPub + CPUID)、PeImageAnalyzer、UniversalBinaryInspector (PE/ELF64/Mach-O)、SecurePacketChannel、EncryptedRingLogger、JsonParser |
aegis_protection.hpp は100%ヘッダーオンリーです。Windowsでは、必要なシステムライブラリ (ncrypt.lib、crypt32.lib、advapi32.lib、psapi.lib、iphlpapi.lib) が #pragma comment(lib, ...) を介して自動的にリンクされます。
Visual Studio (.vcxproj):
aegis_protection.hpp をプロジェクトディレクトリにコピーします。ISO C++20 Standard (/std:c++20) に設定します。.cpp ファイルに #include "aegis_protection.hpp" を追加します。CMake (CMakeLists.txt):
cmake_minimum_required(VERSION 3.20)
project(ProtectedApp LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
add_executable(ProtectedApp main.cpp aegis_protection.hpp)
| マクロ | 目的 | 例 |
|---|---|---|
AEGIS_STR("...") | コンパイル時に文字列リテラルを暗号化し(constexpr)、必要に応じてローカルスタックバッファに復号する | printf("%s\n", AEGIS_STR("Secret Text")); |
AEGIS_STR_OBJ("...") | スコープを抜けるとスタックメモリを自動的にワイプ(secure_zero)するRAII暗号化文字列オブジェクトを生成する | auto key = AEGIS_STR_OBJ("Bearer xyz"); |
AEGIS_INT(val) | 多態的分割とMBAを用いて、IDA/Ghidraの静的解析から整数定数を隠蔽する | int port = AEGIS_INT(8443); |
AEGIS_INT_VAR(T, name, val) | 型ObfuscatedInt<T>の難読化変数を宣言する | AEGIS_INT_VAR(uint32_t, flags, 0x1337); |
AEGIS_API(mod, func, Type) | Import Address Table(IAT)エントリなしで、FNV-1aハッシュを介してロード済みPEモジュールからエクスポート関数を動的に解決する | auto pBeep = AEGIS_API("kernel32.dll", "Beep", BOOL(WINAPI*)(DWORD, DWORD)); |
AEGIS_DESYNC() | デッドバイトの非同期化を伴う不透明な条件分岐を出力し、IDA/Ghidraでの線形逆アセンブリを妨害する | AEGIS_DESYNC(); |
"..."_fnv1a | コンパイル時に64ビットのFNV-1aハッシュを計算する | constexpr auto h = "ntdll.dll"_fnv1a; |
BytecodeBuilder + ネイティブC++関数の呼び出し(NativeBridge)#include "aegis_protection.hpp"
#include <iostream>
int main() {
using namespace aegis::vm;
VirtualMachine vm;
// Register a native C++ callback in the VM bridge (returns u64, takes VMContext&)
aegis::u64 check_token_id = vm.native_bridge().register_function([](VMContext& ctx) -> aegis::u64 {
aegis::u64 user_id = ctx.get_reg(VReg::R1);
return (user_id == 42) ? 1ULL : 0ULL;
});
// Build polymorphic bytecode with rolling-key encryption
BytecodeBuilder b(/*polymorphic=*/true);
b.emit_junk(2)
.mov(VReg::R1, 42)
.call_native(check_token_id) // Pushes return value (1) onto the VM stack
.pop(VReg::R0) // Pop result into R0 (VM return register)
.rekey(0x55AA55AAULL) // Dynamically mutate rolling cipher key mid-stream
.halt();
BytecodeChunk chunk = b.build(/*initial_key=*/0x123456789ABCDEF0ULL);
std::cout << "Auth result: " << vm.run(chunk) << "\n"; // 1
}
VmTextAssembler)