
다형성 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 + Linear Scan 할당기), BytecodeAbstractInterpreter, VMProfiler, VMDebugger |
| 컴파일 타임 난독화 | aegis::obf | Mba (혼합 불리언 연산), 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 내 Hamming 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) | IAT(Import Address Table) 항목 없이 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();