warbird obfuscator
1.0.0
MSVC編譯器中的Warbird Obfuscation的簡要概述
Warbird是微軟在其DRM技術中使用的混淆框架。它支持多種形式的混淆,包括代碼包裝和虛擬機器混淆。它用於保護關鍵組件,例如PatchGuard和varressers的許可信息。
當使用SystemControlFlowTransition (185)信息類提供時,Warbird功能還通過NtQuerySystemInformation System Call暴露。它派遣到WbDispatchOperation ,在該功能上支持並在堆上執行簽名的Feistel Cipher有效載荷。有關它的更多信息,請參見Alex Ionescu的演講。其他研究為保護客戶許可和代碼完整性圖像提供了洞察力。
鑑於微軟的普遍用法,應該很好奇,以調查是否在MSVC編譯器中發現任何參考。字符串引用可以在後端編譯器( c2.dll )和Linker( link.exe )圖像中發現。
在ProcessLinkerSwitches中,內部使用了幾個與Warbird相關的鏈接標誌:
/wbrdcfg/wbrddll/wbrdlog/wbrdreporterrors/wbrdschema/wbrdsummary/wbrdtestencrypt如果在可執行文件的構建過程中提供了配置和DLL WARBIRD鏈接器標誌,則將稱為Warbird::CWarbirdServer::CreateObfuscator2 。該例程將加載標誌提供的DLL,並調用帶有鏈接標誌參數,計算機類型和obfuscator base的名為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