WbDecryptWarbirdEncryptionSegmentBlockV0
__int64 __fastcall WbDecryptWarbirdEncryptionSegmentBlockV0(INT64 *a1, INT64 a2, _DWORD *a3){
int v4;
_BYTE *v6;
int v7;
char *v8;
int v9;
INT64 v11;
INT64 v12;
int v13;
PMDL Mdl;
char v15;
INT64 v16;
v16 = 0i64;
Mdl = 0i64;
v4 = a2;
v15 = 0;
if( (_DWORD)a2 && (*a3 & 1) != 0 )
{
v7 = 0;
}
else
{
v6 = (_BYTE *)(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, (UINT64 *)&v16);
if( v7 >= 0 )
{
v8 = (char *)v16;
if( !v4
|| (LODWORD(v11) = a3[2] & 0xFFFFFFF,
v7 = ApplyRelocations(
a1[5],
*(unsigned int *)(a1[7] + 48),
a1[4],
*(_QWORD *)(a1[7] + 56) - a1[4],
(INT64)v6,
v16,
v11),
v7 >= 0) )
{
v7 = sub_14065F78C(
0,
v6,
v8,
a3[2] & 0xFFFFFFF,
(__int64 *)(a1[7] + 72),
a3[1] & 0xFFFFFFF,
(__int128 *)(a1[7] + 80),
v13,
&v15);
if( v7 >= 0 )
{
if( !v4
|| (LODWORD(v12) = a3[2] & 0xFFFFFFF,
v7 = ApplyRelocations(
a1[5],
*(unsigned int *)(a1[7] + 48),
a1[4],
a1[4] - *(_QWORD *)(a1[7] + 56),
(INT64)v6,
(INT64)v8,
v12),
v7 >= 0) )
{
ZwFlushInstructionCache();
v7 = v9;
}
}
}
}
}
}
sub_14064F46C(Mdl, a2, (INT64)a3);
return(unsigned int)v7;
}Referenced by:
WbDecryptWarbirdEncryptionSegment