Esempio n. 1
0
        protected virtual byte[] CreateCodeResourcesDirectory(string CFBundleExecutable)
        {
            // Create a rules dict that includes (by wildcard) everything but Info.plist and the rules file
            Dictionary <string, object> Rules = new Dictionary <string, object>();

            Rules.Add(".*", true);
            Rules.Add("^Info.plist", CreateOmittedResource(10));

            // Create the full list of files to exclude (some files get excluded by 'magic' even though they aren't listed as special by rules)
            Dictionary <string, object> TrueExclusionList = new Dictionary <string, object>();

            TrueExclusionList.Add("Info.plist", null);
            TrueExclusionList.Add(CFBundleExecutable, null);
            TrueExclusionList.Add("CodeResources", null);
            TrueExclusionList.Add("_CodeSignature/CodeResources", null);

            // Hash each file
            IEnumerable <string>      FileList     = FileSystem.GetAllPayloadFiles();
            SHA1CryptoServiceProvider HashProvider = new SHA1CryptoServiceProvider();

            Utilities.PListHelper HashedFileEntries = new Utilities.PListHelper();
            foreach (string Filename in FileList)
            {
                if (!TrueExclusionList.ContainsKey(Filename))
                {
                    byte[] FileData = FileSystem.ReadAllBytes(Filename);
                    byte[] HashData = HashProvider.ComputeHash(FileData);

                    HashedFileEntries.AddKeyValuePair(Filename, HashData);
                }
            }

            // Create the CodeResources file that will contain the hashes
            Utilities.PListHelper CodeResources = new Utilities.PListHelper();
            CodeResources.AddKeyValuePair("files", HashedFileEntries);
            CodeResources.AddKeyValuePair("rules", Rules);

            // Write the CodeResources file out
            string CodeResourcesAsString = CodeResources.SaveToString();

            byte[] CodeResourcesAsBytes = Encoding.UTF8.GetBytes(CodeResourcesAsString);
            FileSystem.WriteAllBytes("_CodeSignature/CodeResources", CodeResourcesAsBytes);

            return(CodeResourcesAsBytes);
        }
Esempio n. 2
0
        protected virtual byte[] CreateCodeResourcesDirectory(string CFBundleExecutable)
        {
            // Create a rules dict that includes (by wildcard) everything but Info.plist and the rules file
            Dictionary <string, object> Rules1 = new Dictionary <string, object>();

            Rules1.Add("^", true);
            Rules1.Add("^.*\\.lproj/", CreateOptionalResource(1000));
            Rules1.Add("^.*\\.lproj/locversion.plist$", CreateOmittedResource(1100));
            Rules1.Add("^version.plist$", true);

            Dictionary <string, object> Rules2 = new Dictionary <string, object>();

            Rules2.Add(".*\\.dSYM($|/)", CreateResource(11));
            Rules2.Add("^", CreateResource(20));
            Rules2.Add("^(.*/)?\\.DS_Store$", CreateOmittedResource(2000));
            Rules2.Add("^(Frameworks|SharedFrameworks|PlugIns|Plug-ins|XPCServices|Helpers|MacOS|Library/(Automator|Spotlight|LoginItems))/", CreateNestedResource(10));
            Rules2.Add("^.*", true);
            Rules2.Add("^.*\\.lproj/", CreateOptionalResource(1000));
            Rules2.Add("^.*\\.lproj/locversion.plist$", CreateOmittedResource(1100));
            Rules2.Add("^Info\\.plist$", CreateOmittedResource(20));
            Rules2.Add("^PkgInfo$", CreateOmittedResource(20));
            Rules2.Add("^[^/]+$", CreateNestedResource(10));
            Rules2.Add("^embedded\\.provisionprofile$", CreateResource(20));
            Rules2.Add("^version\\.plist$", CreateResource(20));

            // Create the full list of files to exclude (some files get excluded by 'magic' even though they aren't listed as special by rules)
            Dictionary <string, object> TrueExclusionList1 = new Dictionary <string, object>();

            TrueExclusionList1.Add(CFBundleExecutable, null);
            TrueExclusionList1.Add("CodeResources", null);
            TrueExclusionList1.Add("_CodeSignature/CodeResources", null);

            Dictionary <string, object> TrueExclusionList2 = new Dictionary <string, object>();

            TrueExclusionList2.Add("Info.plist", null);
            TrueExclusionList2.Add("PkgInfo", null);
            TrueExclusionList2.Add(CFBundleExecutable, null);
            TrueExclusionList2.Add("CodeResources", null);
            TrueExclusionList2.Add("_CodeSignature/CodeResources", null);

            // Hash each file
            IEnumerable <string>      FileList     = FileSystem.GetAllPayloadFiles();
            SHA1CryptoServiceProvider HashProvider = new SHA1CryptoServiceProvider();

            Utilities.PListHelper HashedFileEntries1 = new Utilities.PListHelper();
            Utilities.PListHelper HashedFileEntries2 = new Utilities.PListHelper();
            foreach (string Filename in FileList)
            {
                if (!TrueExclusionList1.ContainsKey(Filename))
                {
                    byte[] FileData = FileSystem.ReadAllBytes(Filename);
                    byte[] HashData = HashProvider.ComputeHash(FileData);

                    HashedFileEntries1.AddKeyValuePair(Filename, HashData);
                }
                if (!TrueExclusionList2.ContainsKey(Filename))
                {
                    byte[] FileData = FileSystem.ReadAllBytes(Filename);
                    byte[] HashData = HashProvider.ComputeHash(FileData);

                    HashedFileEntries2.AddKeyValuePair(Filename, HashData);
                }
            }

            // Create the CodeResources file that will contain the hashes
            Utilities.PListHelper CodeResources = new Utilities.PListHelper();
            CodeResources.AddKeyValuePair("files", HashedFileEntries1);
            CodeResources.AddKeyValuePair("files2", HashedFileEntries2);
            CodeResources.AddKeyValuePair("rules", Rules1);
            CodeResources.AddKeyValuePair("rules2", Rules2);

            // Write the CodeResources file out
            string CodeResourcesAsString = CodeResources.SaveToString();

            byte[] CodeResourcesAsBytes = Encoding.UTF8.GetBytes(CodeResourcesAsString);
            FileSystem.WriteAllBytes("_CodeSignature/CodeResources", CodeResourcesAsBytes);

            return(CodeResourcesAsBytes);
        }
Esempio n. 3
0
        protected virtual byte[] CreateCodeResourcesDirectory(string CFBundleExecutable)
        {
            // Verify that there is a rules plist
            string CFBundleResourceSpecification;
            if (!Info.GetString("CFBundleResourceSpecification", out CFBundleResourceSpecification))
            {
                throw new InvalidDataException("Info.plist must contain the key CFBundleResourceSpecification");
            }

            // Create a rules dict that includes (by wildcard) everything but Info.plist and the rules file
            Dictionary<string, object> Rules = new Dictionary<string, object>();
            Rules.Add(".*", true);
            Rules.Add("^Info.plist", CreateOmittedResource(10));
            Rules.Add(CFBundleResourceSpecification, CreateOmittedResource(100));

            // Write the rules file out
            {
                Utilities.PListHelper RulesPList = new Utilities.PListHelper();
                RulesPList.AddKeyValuePair("rules", Rules);
                string PListString = RulesPList.SaveToString();
                FileSystem.WriteAllBytes(CFBundleResourceSpecification, Encoding.UTF8.GetBytes(PListString));
            }

            // Create the full list of files to exclude (some files get excluded by 'magic' even though they aren't listed as special by rules)
            Dictionary<string, object> TrueExclusionList = new Dictionary<string, object>();
            TrueExclusionList.Add("Info.plist", null);
            TrueExclusionList.Add(CFBundleResourceSpecification, null);
            TrueExclusionList.Add(CFBundleExecutable, null);
            TrueExclusionList.Add("CodeResources", null);
            TrueExclusionList.Add("_CodeSignature/CodeResources", null);

            // Hash each file
            IEnumerable<string> FileList = FileSystem.GetAllPayloadFiles();
            SHA1CryptoServiceProvider HashProvider = new SHA1CryptoServiceProvider();

            Utilities.PListHelper HashedFileEntries = new Utilities.PListHelper();
            foreach (string Filename in FileList)
            {
                if (!TrueExclusionList.ContainsKey(Filename))
                {
                    byte[] FileData = FileSystem.ReadAllBytes(Filename);
                    byte[] HashData = HashProvider.ComputeHash(FileData);

                    HashedFileEntries.AddKeyValuePair(Filename, HashData);
                }
            }

            // Create the CodeResources file that will contain the hashes
            Utilities.PListHelper CodeResources = new Utilities.PListHelper();
            CodeResources.AddKeyValuePair("files", HashedFileEntries);
            CodeResources.AddKeyValuePair("rules", Rules);

            // Write the CodeResources file out
            string CodeResourcesAsString = CodeResources.SaveToString();
            byte[] CodeResourcesAsBytes = Encoding.UTF8.GetBytes(CodeResourcesAsString);
            FileSystem.WriteAllBytes("_CodeSignature/CodeResources", CodeResourcesAsBytes);

            return CodeResourcesAsBytes;
        }
		protected virtual byte[] CreateCodeResourcesDirectory(string CFBundleExecutable)
		{
			// Create a rules dict that includes (by wildcard) everything but Info.plist and the rules file
			Dictionary<string, object> Rules1 = new Dictionary<string, object>();
			Rules1.Add("^", true);
			Rules1.Add("^.*\\.lproj/", CreateOptionalResource(1000));
			Rules1.Add("^.*\\.lproj/locversion.plist$", CreateOmittedResource(1100));
			Rules1.Add("^version.plist$", true);

			Dictionary<string, object> Rules2 = new Dictionary<string, object>();
			Rules2.Add(".*\\.dSYM($|/)", CreateResource(11));
			Rules2.Add("^", CreateResource(20));
			Rules2.Add("^(.*/)?\\.DS_Store$", CreateOmittedResource(2000));
			Rules2.Add("^(Frameworks|SharedFrameworks|PlugIns|Plug-ins|XPCServices|Helpers|MacOS|Library/(Automator|Spotlight|LoginItems))/", CreateNestedResource(10));
			Rules2.Add("^.*", true);
			Rules2.Add("^.*\\.lproj/", CreateOptionalResource(1000));
			Rules2.Add("^.*\\.lproj/locversion.plist$", CreateOmittedResource(1100));
			Rules2.Add("^Info\\.plist$", CreateOmittedResource(20));
			Rules2.Add("^PkgInfo$", CreateOmittedResource(20));
			Rules2.Add("^[^/]+$", CreateNestedResource(10));
			Rules2.Add("^embedded\\.provisionprofile$", CreateResource(20));
			Rules2.Add("^version\\.plist$", CreateResource(20));

			// Create the full list of files to exclude (some files get excluded by 'magic' even though they aren't listed as special by rules)
			Dictionary<string, object> TrueExclusionList1 = new Dictionary<string, object>();
			TrueExclusionList1.Add(CFBundleExecutable, null);
			TrueExclusionList1.Add("CodeResources", null);
			TrueExclusionList1.Add("_CodeSignature/CodeResources", null);

			Dictionary<string, object> TrueExclusionList2 = new Dictionary<string, object>();
			TrueExclusionList2.Add("Info.plist", null);
			TrueExclusionList2.Add("PkgInfo", null);
			TrueExclusionList2.Add(CFBundleExecutable, null);
			TrueExclusionList2.Add("CodeResources", null);
			TrueExclusionList2.Add("_CodeSignature/CodeResources", null);

			// Hash each file
			IEnumerable<string> FileList = FileSystem.GetAllPayloadFiles();
			SHA1CryptoServiceProvider HashProvider = new SHA1CryptoServiceProvider();

			Utilities.PListHelper HashedFileEntries1 = new Utilities.PListHelper();
			Utilities.PListHelper HashedFileEntries2 = new Utilities.PListHelper();
			foreach (string Filename in FileList)
			{
				if (!TrueExclusionList1.ContainsKey(Filename))
				{
					byte[] FileData = FileSystem.ReadAllBytes(Filename);
					byte[] HashData = HashProvider.ComputeHash(FileData);

					HashedFileEntries1.AddKeyValuePair(Filename, HashData);
				}
				if (!TrueExclusionList2.ContainsKey(Filename))
				{
					byte[] FileData = FileSystem.ReadAllBytes(Filename);
					byte[] HashData = HashProvider.ComputeHash(FileData);

					HashedFileEntries2.AddKeyValuePair(Filename, HashData);
				}
			}

			// Create the CodeResources file that will contain the hashes
			Utilities.PListHelper CodeResources = new Utilities.PListHelper();
			CodeResources.AddKeyValuePair("files", HashedFileEntries1);
			CodeResources.AddKeyValuePair("files2", HashedFileEntries2);
			CodeResources.AddKeyValuePair("rules", Rules1);
			CodeResources.AddKeyValuePair("rules2", Rules2);

			// Write the CodeResources file out
			string CodeResourcesAsString = CodeResources.SaveToString();
			byte[] CodeResourcesAsBytes = Encoding.UTF8.GetBytes(CodeResourcesAsString);
			FileSystem.WriteAllBytes("_CodeSignature/CodeResources", CodeResourcesAsBytes);

			return CodeResourcesAsBytes;
		}