MSVCコンパイラのWarbird難読化の簡単な概要
Warbirdは、MicrosoftがDRMテクノロジーで使用する難読化フレームワークです。コードパッキングや仮想マシン難読化など、複数の形式の難読化をサポートします。これは、パッチガードやライセンス情報などの重要なコンポーネントをリバースエンジニアからのライセンス情報などの保護に使用します。
Warbirdの機能は、 SystemControlFlowTransition (185)情報クラスを提供すると、 NtQuerySystemInformation System Callを介して公開されます。 WbDispatchOperationに発送し、ヒープで署名されたFeistel暗号ペイロードを復号化および実行する機能をサポートします。それに関する詳細情報は、Alex Ionescuの講演に記載されています。他の研究では、クライアントのライセンスとコード整合性画像を保護するための使用に関する洞察が提供されています。
Microsoftによる一般的な使用法を考えると、MSVCコンパイラに参照が見つかるかどうかを調査するのに十分なほど興味があるはずです。文字列参照は、バックエンドコンパイラ( c2.dll )およびリンカー( link.exe )画像で発見できます。
ProcessLinkerSwitchesには、内部で使用されるWarbirdに関連するいくつかのリンカーフラグがあります。
/wbrdcfg/wbrddll/wbrdlog/wbrdreporterrors/wbrdschema/wbrdsummary/wbrdtestencrypt実行可能ファイルの建築プロセス中に構成とDLLのWarbirdリンカーフラグが提供される場合、 Warbird::CWarbirdServer::CreateObfuscator2を呼び出します。ルーチンは、フラグから提供されたDLLをロードし、リンカーフラグの引数、マシンタイプ、およびObfuscatorベースを使用して、 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