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