Краткий обзор запутывания Warbird в компиляторе MSVC
Warbird - это структура запутывания, используемая Microsoft в их технологии DRM. Он поддерживает множество форм запутывания, включая упаковку кода и запутывание виртуальной машины. Он используется для защиты критических компонентов, таких как плачевая информация и лицензионная информация от реверсийных инженеров.
Функциональность Warbird также выявляется с помощью системы NtQuerySystemInformation System, когда он поставляется с информационным классом SystemControlFlowTransition (185). Он отправляет в WbDispatchOperation , где поддерживает функциональность, чтобы расшифровать и выполнять подписанную полезную нагрузку Feistel Cipher на куче. Более подробную информацию о нем можно найти в разговоре Алекса Ионеску. Другое исследование дало представление в своем использовании для защиты клиентских лицензионных изображений и целостности кода.
Учитывая его распространенное использование Microsoft, нужно быть достаточно любопытным, чтобы выяснить, находятся ли какие -либо ссылки в компиляторе MSVC. Ссылки на строки могут быть обнаружены на изображениях Backend Compiler ( c2.dll ) и Linker ( link.exe ).
В ProcessLinkerSwitches есть несколько линкеров -флагов, связанных с Warbird, которые используются внутри:
/wbrdcfg/wbrddll/wbrdlog/wbrdreporterrors/wbrdschema/wbrdsummary/wbrdtestencrypt Если флаги конфигурации и линкеров Warbird Warbird поставляются во время процесса строительства исполняемого файла, то это будет называть Warbird::CWarbirdServer::CreateObfuscator2 . Подпрограмма будет загружать DLL, поставляемый флагом, и вызовет экспортируемую функцию с именем CreateObfuscator2 с аргументами флага линкера, типом машины и базой обфускатора.
Другие имена функций Warbird показывают, что существуют преобразования кода, аналогичные тем, которые упоминались ранее.
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