示例#1
0
        public byte[] ValidateEntryAssembly(byte[] blackboxData)
        {
            //Create permissions
            var permissions = new PermissionSet(PermissionState.None);

            permissions.AddPermission(new FileIOPermission(
                                          FileIOPermissionAccess.Read | FileIOPermissionAccess.PathDiscovery,
                                          Assembly.GetExecutingAssembly().Location));
            permissions.AddPermission(new FileIOPermission(
                                          FileIOPermissionAccess.AllAccess | FileIOPermissionAccess.PathDiscovery,
                                          Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), Log.OutputFile)));

            Log.Write("AssemblyLoader::ValidateEntryAssembly() - data length: " + ((blackboxData != null) ? blackboxData.Length : -1).ToString());

            //Gather machine information
            List <string> macs = null, edids = null, disks = null;

            if (blackboxData != null)
            {
                Fingerprint.GatherAll(out macs, out edids, out disks);
            }

            try
            {
                permissions.PermitOnly();

                Assembly assembly;
                if (blackboxData != null)
                {
                    assembly = Assembly.Load(blackboxData, null);
                    _latest  = assembly;
                }
                else
                {
                    assembly = _latest;
                }

                Log.Write("AssemblyLoader::ValidateEntryAssembly() loaded assembly: " + ((assembly != null) ? assembly.GetType().ToString() : "null"));

                var validatorType   = assembly.GetType("Allegiance.CommunitySecuritySystem.Blackbox.Validator");
                var machineInfoType = assembly.GetType("Allegiance.CommunitySecuritySystem.Blackbox.MachineInformation");
                var deviceInfoType  = assembly.GetType("Allegiance.CommunitySecuritySystem.Blackbox.DeviceInfo");
                var deviceTypeType  = assembly.GetType("Allegiance.CommunitySecuritySystem.Blackbox.DeviceType");
                var machineInfo     = Activator.CreateInstance(machineInfoType);

                Log.Write("AssemblyLoader::ValidateEntryAssembly() machine info created.");

                //Fill MachineInfo
                if (macs != null && edids != null && disks != null)
                {
                    AppendDeviceInfo(macs, machineInfo, "Network", machineInfoType, deviceInfoType, deviceTypeType);
                    AppendDeviceInfo(edids, machineInfo, "EDID", machineInfoType, deviceInfoType, deviceTypeType);
                    AppendDeviceInfo(disks, machineInfo, "HardDisk", machineInfoType, deviceInfoType, deviceTypeType);
                }

                Log.Write("AssemblyLoader::ValidateEntryAssembly() calling checkin.");

                //Perform initial check in
                var method = validatorType.GetMethod("Check", BindingFlags.Static | BindingFlags.Public);
                return(method.Invoke(null, new object[] { machineInfo }) as byte[]);
            }
            finally
            {
                //Revert permission changes
                SecurityPermission.RevertPermitOnly();

                Log.Write("AssemblyLoader::ValidateEntryAssembly() calling checkin.");
            }
        }