Ein kurzer Überblick über die Verschleierung von Warbird im MSVC -Compiler
Warbird ist ein Framework für Verschleierung, der von Microsoft in ihrer DRM -Technologie verwendet wird. Es unterstützt mehrere Formen der Verschleierung, einschließlich der Verpackung von Code und der Verschleierung virtueller Maschinen. Es wird verwendet, um kritische Komponenten wie PatchGuard- und Lizenzinformationen vor Reverse -Ingenieuren zu schützen.
Die Warbird -Funktionalität wird auch durch den Aufruf NtQuerySystemInformation System entlarvt, wenn er mit der Informationsklasse der SystemControlFlowTransition (185) geliefert wird. Es sendet in WbDispatchOperation , wo es die Funktionalität unterstützt, eine signierte Feistel -Cipher -Nutzlast auf dem Haufen zu entschlüsseln und auszuführen. Weitere Informationen dazu finden Sie in Alex Ionescus Vortrag. Andere Untersuchungen haben Einblicke in die Verwendung von Kundenlizenz- und Code -Integritätsbildern geliefert.
Angesichts seiner vorherrschenden Verwendung durch Microsoft sollte man neugierig genug sein, um zu untersuchen, ob Referenzen im MSVC -Compiler gefunden werden. String -Referenzen können im Backend Compiler ( c2.dll ) und Linker ( link.exe ) -Bilder entdeckt werden.
Bei ProcessLinkerSwitches gibt es mehrere Linker -Flags mit Warbird, die intern verwendet werden:
/wbrdcfg/wbrddll/wbrdlog/wbrdreporterrors/wbrdschema/wbrdsummary/wbrdtestencrypt Wenn während des Bauvorgangs der ausführbaren Datei die Konfigurations- und DLL Warbird -Linker -Flags geliefert werden, wird Warbird::CWarbirdServer::CreateObfuscator2 bezeichnet. Die Routine lädt die vom Flag gelieferte DLL und ruft eine exportierte Funktion namens CreateObfuscator2 mit den Linker -Flag -Argumenten, dem Maschinentyp und der Devuscator -Basis auf.
Andere Warbird -Funktionsnamen zeigen, dass es ähnliche Code -Transformationen wie die zuvor erwähnten gibt.
void __fastcall Enclave::CObfuscationEnclave::Initialize (Enclave::CObfuscationEnclave * this )
{
if ( ( int ) Enclave::CEnclave::AddRuntimeSymbol ((__int64) this , (__int64) " NtQuerySystemInformation " , 0 , 2 ) >= 0
&& ( int ) Enclave::CEnclave::AddRuntimeSymbol ((__int64) this , (__int64) " WarbirdRuntime::EnclaveWrapper " , 1 , 1 ) >= 0 )
{
Enclave::CEnclave::AddRuntimeSymbol ((__int64) this , (__int64) " WarbirdRuntime::g_ulSubSystemCallID " , 2 , 3 );
}
}cl / Zi .examplemain.cpp / link / wbrddll:warbird - obfuscate.dll / wbrdcfg:wbrd.cfgcl.exe: aa9374078fcdce84bca034fd1bb395fdd3825614656e898017435ced17ff1061link.exe: 849e7bd1f234957b5e9be65f94a864e45ea4e05fea598b2164523b398603f61514.28.29336.0