Beispiel #1
0
        public bool ValidateExecutableSignature(X509Certificate certificate)
        {
            byte[] buffer               = GetExecutableBytes();
            byte[] infoFileBytes        = GetInfoFileBytes();
            byte[] codeResourcesBytes   = GetFileBytes(CodeResourcesFilePath);
            List <MachObjectFile> files = MachObjectHelper.ReadMachObjects(buffer);

            foreach (MachObjectFile file in files)
            {
                if (!CodeSignatureHelper.ValidateExecutableHash(file))
                {
                    return(false);
                }

                if (!CodeSignatureHelper.ValidateSpecialHashes(file, infoFileBytes, codeResourcesBytes))
                {
                    return(false);
                }

                if (!CodeSignatureHelper.ValidateExecutableSignature(file, certificate))
                {
                    return(false);
                }
            }

            return(true);
        }
Beispiel #2
0
        public void ResignIPA(List <X509Certificate> certificateChain, AsymmetricKeyEntry privateKey)
        {
            MobileProvisionFile mobileProvision = GetMobileProvision();

            byte[] buffer           = GetExecutableBytes();
            string bundleIdentifier = GetBundleIdentifier();

            byte[] infoFileBytes        = GetInfoFileBytes();
            byte[] codeResourcesBytes   = GetCodeResourcesBytes();
            List <MachObjectFile> files = MachObjectHelper.ReadMachObjects(buffer);

            foreach (MachObjectFile file in files)
            {
                CodeSignatureHelper.ResignExecutable(file, bundleIdentifier, certificateChain, privateKey, infoFileBytes, codeResourcesBytes, mobileProvision.PList.Entitlements);
            }
            byte[] executableBytes = MachObjectHelper.PackMachObjects(files);

            ReplaceExecutable(executableBytes);
        }