Uma breve visão geral da ofuscação de Warbird no compilador MSVC
O Warbird é uma estrutura de ofuscação usada pela Microsoft em sua tecnologia DRM. Ele suporta várias formas de ofuscação, incluindo embalagem de código e ofuscação de máquina virtual. É usado para proteger componentes críticos, como patchguard e informações de licenciamento de engenheiros reversos.
A funcionalidade Warbird também é exposta através da chamada do sistema NtQuerySystemInformation quando fornecida com a classe de informação SystemControlFlowTransition (185). Ele despacha para WbDispatchOperation , onde suporta a funcionalidade para descriptografar e executar uma carga útil de cifra Feistel assinada na pilha. Mais informações sobre ele podem ser encontradas na palestra de Alex Ionescu. Outras pesquisas forneceram informações sobre seu uso para proteger o licenciamento de clientes e as imagens de integridade do código.
Dado seu uso predominante pela Microsoft, deve -se curioso o suficiente para investigar se alguma referência é encontrada no compilador MSVC. As referências de string podem ser descobertas no compilador de back -end ( c2.dll ) e no linker ( link.exe ).
Em ProcessLinkerSwitches , existem vários sinalizadores de ligação relacionados ao Warbird que são usados internamente:
/wbrdcfg/wbrddll/wbrdlog/wbrdreporterrors/wbrdschema/wbrdsummary/wbrdtestencrypt Se a configuração e os sinalizadores do Linker DLL Warbird forem fornecidos durante o processo de construção do executável, ele chamará Warbird::CWarbirdServer::CreateObfuscator2 . A rotina carregará a DLL fornecida pelo sinalizador e chamará uma função exportada chamada CreateObfuscator2 com os argumentos do sinalizador do vinculador, o tipo de máquina e a base do ofuscador.
Outros nomes de funções Warbird revela que existem transformações de código semelhantes às mencionadas anteriormente.
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