WbDecryptWarbirdEncryptionSegmentBlockV0
INT64 __fastcall WbDecryptWarbirdEncryptionSegmentBlockV0(INT64 *a1, INT64 a2, _DWORD *a3){
int v4;
void *v6;
int v7;
UINT8 *v8;
UINT64 a6;
INT64 a7;
INT64 a7a;
INT64 v13;
PMDL Mdl;
INT64 a9;
UINT64 a5;
a5 = 0i64;
Mdl = 0i64;
v4 = a2;
LOBYTE(a9) = 0;
if( (_DWORD)a2 && (*a3 & 1) != 0 )
{
v7 = 0;
}
else
{
v6 = (void *)(a1[4] + (a3[1] & 0xFFFFFFF));
v7 = sub_14065E218(v6, a3[2] & 0xFFFFFFF, (*a3 & 2) == 0);
if( v7 >= 0 )
{
v7 = sub_1405D28BC(v6, a3[2] & 0xFFFFFFF, (*a3 & 2) == 0, &Mdl, &a5);
if( v7 >= 0 )
{
v8 = (UINT8 *)a5;
if( !v4
|| (LODWORD(a7) = a3[2] & 0xFFFFFFF,
v7 = ApplyRelocations(
a1[5],
*(unsigned int *)(a1[7] + 48),
a1[4],
*(_QWORD *)(a1[7] + 56) - a1[4],
(INT64)v6,
a5,
a7),
v7 >= 0) )
{
LODWORD(a6) = a3[1] & 0xFFFFFFF;
v7 = sub_14065F78C(0i64, (UINT8 *)v6, v8, a3[2] & 0xFFFFFFF, a1[7] + 72, a6, a1[7] + 80, v13, (INT64)&a9);
if( v7 >= 0 )
{
if( !v4
|| (LODWORD(a7a) = a3[2] & 0xFFFFFFF,
v7 = ApplyRelocations(
a1[5],
*(unsigned int *)(a1[7] + 48),
a1[4],
a1[4] - *(_QWORD *)(a1[7] + 56),
(INT64)v6,
(INT64)v8,
a7a),
v7 >= 0) )
{
v7 = ZwFlushInstructionCache((HANDLE)0xFFFFFFFFFFFFFFFFi64, v6, a3[2] & 0xFFFFFFF);
}
}
}
}
}
}
sub_14064F46C(Mdl);
return(unsigned int)v7;
}Referenced by:
WbDecryptWarbirdEncryptionSegment