MSVC 컴파일러에서 Warbird 난독 화에 대한 간단한 개요
Warbird는 DRM 기술에서 Microsoft가 사용하는 난독 화 프레임 워크입니다. 코드 포장 및 가상 대기업 난독 화를 포함한 여러 형태의 난독 화를 지원합니다. PatchGuard 및 라이센스 정보와 같은 중요한 구성 요소를 리버스 엔지니어로부터 보호하는 데 사용됩니다.
Warbird 기능은 SystemControlFlowTransition (185) 정보 클래스와 함께 제공 될 때 NtQuerySystemInformation 시스템 호출을 통해 노출됩니다. WbDispatchOperation 으로 파견하여 힙에 서명 된 FEISTEL CIPHER 페이로드를 해독하고 실행하는 기능을 지원합니다. 그것에 대한 자세한 내용은 Alex Ionescu의 대화에서 찾을 수 있습니다. 다른 연구는 고객 라이센스 및 코드 무결성 이미지를 보호하기 위해 사용에 대한 통찰력을 제공했습니다.
Microsoft의 널리 사용되는 사용을 감안할 때 MSVC 컴파일러에서 참조가 발견되는지 여부를 조사하기에 충분히 궁금해야합니다. 문자열 참조는 백엔드 컴파일러 ( c2.dll ) 및 Linker ( link.exe ) 이미지에서 발견 할 수 있습니다.
ProcessLinkerSwitches 에는 Warbird와 관련된 몇 가지 링커 플래그가 있습니다.
/wbrdcfg/wbrddll/wbrdlog/wbrdreporterrors/wbrdschema/wbrdsummary/wbrdtestencrypt 실행 파일의 건축 과정에서 구성 및 DLL Warbird 링커 플래그가 제공되는 경우 Warbird::CWarbirdServer::CreateObfuscator2 호출합니다. 루틴은 플래그에 의해 제공되는 DLL을로드하고 링커 플래그 인수, 기계 유형 및 Oppuscator베이스와 함께 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