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