
حزمة تطوير برمجيات (SDK) لحماية البرمجيات بلغة C++20 ذات رأس واحد (single-header)، مع افتراضية كود الآلة الافتراضية متعددة الأشكال (polymorphic VM code virtualization)، وتشويش MBA والأسلوب النصي (string obfuscation) في وقت الترجمة (compile-time)، وأكثر من 25 بدائية تشفيرية (crypto primitives)، ومكافحة التنقيح/مكافحة التفريغ (anti-debug/anti-dump)، وترخيص HWID.
aegis_protection.hpp)SDK أحادي الرأس لـ C++20 لتخفي الكود الافتراضي والتعتيم والتشفير ومكافحة العبث
SDK حماية برمجيات أحادي الرأس لـ C++20 خالٍ من الاعتماديات بمستوى صناعي (أكثر من 10,145 سطرًا من الكود في ملف .hpp واحد): آلة افتراضية هجينة لمكدس السجلات مع بايت كود متعدد الأشكال، ومترجم من نص برمجي شبيه بـ C إلى V-ISA، وأكثر من 25 بدائية تشفيرية، وتعتيم وقت الترجمة، ومكافحة التنقيح، ومراقب سلامة الذاكرة أثناء التشغيل، ونظام ملفات افتراضي مشفّر، وترخيص مرتبط بالعتاد.
لا توجد اعتماديات خارجية، ولا نصوص بناء معقدة، ولا فوضى — فقط 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)
ضمّن aegis_protection.hpp مباشرةً في مشروع C++20 الخاص بك:
#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 (nonce بـ 192 بت)، Salsa20، Camellia256 (RFC 3713)، Serpent256 (SPN بـ 32 جولة)، 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 (عتبة $(K, N)$ في $GF(2^8)$)، SelfHealingBuffer (Hamming SEC-DED + استرداد تكافؤ XOR في RAM)، MerkleTree (براهين الإدراج)، WhiteBoxByteNetwork |
| مكافحة التنقيح والدفاع عن الذاكرة | aegis::anti / aegis::veh / aegis::watchdog / aegis::syscall | AntiDebug (PEB، NtGlobalFlag، Dr0–Dr7، RDTSC، ThreadHideFromDebugger، ProcessDebugPort)، AntiVm (بائع الهايبرفايزر عبر CPUID، MAC، السجل)، EmulatorDetector (دقة حِمل NaN في IEEE-754)، AntiDump (erase_pe_headers)، IntegrityScanner، CodePatchGuard، ApiResolver (AEGIS_API بدون IAT)، SyscallResolver (استخراج SSN من ntdll.dll وكاشف الخطافات)، VehGuard (مُنظّف نقاط التوقف العتادية)، IntegrityWatchdog (خيط مراقبة في الخلفية) |
| الترخيص، VFS والعلامات المائية | aegis::license / aegis::archive / aegis::watermark | LicenseManager (مفاتيح AEGIS-XXXX-... مع ربط HWID و ChaCha20-Poly1305)، AegisVfsArchive (نظام ملفات افتراضي مشفّر مع ضغط LZSS)، BytecodeWatermarker (علامات مائية إخفائية للعميل)، HardwareId (TPM 2.0 EKPub + CPUID)، PeImageAnalyzer، UniversalBinaryInspector (PE/ELF64/Mach-O)، SecurePacketChannel، EncryptedRingLogger، JsonParser |
aegis_protection.hpp هو 100% header-only. على 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).#include "aegis_protection.hpp" إلى ملف .cpp الخاص بك.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("...") | ينشئ كائن نص مشفّر بنمط RAII يمسح ذاكرته على المكدس تلقائيًا (secure_zero) عند الخروج من النطاق | auto key = AEGIS_STR_OBJ("Bearer xyz"); |
AEGIS_INT(val) | يخفي ثابتًا صحيحًا عن التحليل الساكن في IDA/Ghidra باستخدام التقسيم متعدد الأشكال وMBA | 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) | يحل دالة مُصدَّرة ديناميكيًا من وحدة PE محمّلة عبر تجزئة FNV-1a دون إدخال في جدول عناوين الاستيراد (IAT) | auto pBeep = AEGIS_API("kernel32.dll", "Beep", BOOL(WINAPI*)(DWORD, DWORD)); |
AEGIS_DESYNC() | يُصدر قفزة شرطية مبهمة مع إزالة تزامن البايتات الميتة لكسر التفكيك الخطي في IDA/Ghidra | AEGIS_DESYNC(); |
"..."_fnv1a | يحسب تجزئة FNV-1a بعرض 64 بت في وقت الترجمة | constexpr auto h = "ntdll.dll"_fnv1a; |