我正在开发一个解决方案,我需要能够检查文件是否属于我无法信任该文件的扩展名的特定类型。
我已经能够识别 EXE 和 DLL 文件,只需要识别最后一个。
目前我不知道如何识别 MSI MSI 与 EXE 和 DLL 有什么不同?我应该在哪里看?
例如,为了找到一个 DLL,我正在执行以下操作:
if ((ntHeader.FileHeader.Characteristics & IMAGE_FILE_DLL) != 0)
{
//If DLL then this returns True Else Return False
return (ntHeader.FileHeader.Characteristics & IMAGE_FILE_DLL) == 8192;
}
是否有类似的解决方案来确定文件是否为 MSI 类型?
编辑 1 这就是我现在根据 dlatikay 的想法所做的
private static ulong FIRST_8_BYTES_OF_MSI_FILE =0xD0CF11E0A1B11AE1;
private bool MSICheck(FileStream fileData)
{
byte[] first8bytes = new byte[8];
using (BinaryReader reader = new BinaryReader(fileData))
{
reader.BaseStream.Seek(0, SeekOrigin.Begin);
reader.Read(first8bytes, 0, 7);
}
ulong sum = BitConverter.ToUInt64(first8bytes, 0);
//string hexString = BitConverter.ToString(first8bytes);
bool returnval = sum == FIRST_8_BYTES_OF_MSI_FILE;
return returnval;
//D0 CF 11 E0 A1 B1 1A E1 First 8 hexadecimal of a MSI package
//return false;
}
但是这种方法无法将我的测试 msi 文件作为 msi 文件调用,所以我猜我做错了什么?
我的解决方案:
在dlatikay的指导下
private static string FIRST_8_BYTES_OF_MSI_FILE = "D0CF11E0A1B11AE1";
private bool MSICheck(FileStream fileData)
{
byte[] first8bytes = new byte[8];
using (BinaryReader reader = new BinaryReader(fileData))
{
reader.BaseStream.Seek(0, SeekOrigin.Begin);
reader.Read(first8bytes, 0, first8bytes.Length);
}
string sum = BitConverter.ToString(first8bytes).Replace("-",""); ;
bool returnval = sum.Equals(FIRST_8_BYTES_OF_MSI_FILE);
return returnval;
//D0 CF 11 E0 A1 B1 1A E1 First 8 hexadecimal of a MSI package
//return false;
}
HUWWW
相关分类