MiComputeBadImageHeaderType

INT64 __fastcall MiComputeBadImageHeaderType(IMAGE_OS2_HEADER *Os2Header, INT64 a2, UINT64 a3){
  int ne_exetyp; 
  BYTE v8; 
  int v9; 
  unsigned __int64 v10; 
  __int64 v11; 
  __int16 v12; 
  unsigned int ne_nrestab; 
  unsigned int v14; 
  unsigned __int64 v15; 
  if( Os2Header->ne_magic != 17742 )
  {
    if( Os2Header->ne_magic == 17740 )
      dword_140C4C958 = 68;
    else
      dword_140C4C958 = 69;
    return 3221225776i64;
  }
  if( !(unsigned int)MiCheckDosCalls(Os2Header, a3) )
  {
    ne_exetyp = Os2Header->ne_exetyp;
    if( (_BYTE)ne_exetyp == 2 || !(_BYTE)ne_exetyp && (((Os2Header->ne_expver & 0xFF00) - 512) & 0xFEFF) == 0 )
    {
      dword_140C4C958 = 60;
      return 3221225777i64;
    }
  }
  v8 = Os2Header->ne_exetyp;
  if( v8 == 5 || Os2Header->ne_enttab == Os2Header->ne_imptab )
  {
    dword_140C4C958 = 61;
    return 3221225776i64;
  }
  if( v8 != 1 )
    goto LABEL_14;
  v9 = *(_DWORD *)(a2 + 512) - 1414739505;
  if( *(_DWORD *)(a2 + 512) == 1414739505 )
    v9 = *(unsigned __int16 *)(a2 + 516) - 16981;
  if( v9 )
  {
LABEL_14:
    v10 = 16i64 * *(unsigned __int16 *)(a2 + 8);
    if( v10 > 0xFC6 )
      goto LABEL_42;
    v11 = *(_QWORD *)(v10 + a2 + 24) - 0x70614C2072616850i64;
    if( *(_QWORD *)(v10 + a2 + 24) == 0x70614C2072616850i64 )
    {
      v11 = *(_QWORD *)(v10 + a2 + 32) - 0x72617774666F5320i64;
      if( *(_QWORD *)(v10 + a2 + 32) == 0x72617774666F5320i64 )
        v11 = *(_QWORD *)(v10 + a2 + 40) - 0x2E636E49202C65i64;
    }
    if( !v11 && ((v12 = *(_WORD *)(v10 + a2 + 56), v12 == 19280) || v12 == 20304 || v12 == 22096) )
    {
      dword_140C4C958 = 63;
    }
    else
    {
LABEL_42:
      if( v10 + 50 > 0x1000
        || v10 + *(unsigned __int16 *)(v10 + a2 + 48) > 0xFDC
        || memcmp(
             (PVOID)(*(unsigned __int16 *)(v10 + a2 + 48) + v10 + a2),
             "Copyright(C) Rational Systems, Inc.",
             0x24ui64) )
      {
        ne_nrestab = Os2Header->ne_nrestab;
        v14 = *(_DWORD *)(a2 + 60);
        if( ne_nrestab > v14 )
        {
          v15 = (int)(ne_nrestab - v14);
          if( v15 + 16 > v15
            && v15 + 16 < a3
            && !memcmp((char *)&Os2Header->ne_magic + v15 + 1, "1-2-3 Preloader", 0xFui64) )
          {
            dword_140C4C958 = 66;
            return 3221225776i64;
          }
          dword_140C4C958 = 67;
        }
        else
        {
          dword_140C4C958 = 65;
        }
        return 3221225755i64;
      }
      dword_140C4C958 = 64;
    }
  }
  else
  {
    dword_140C4C958 = 62;
  }
  return 3221225776i64;
}

Referenced by:

MiVerifyImageHeader