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); }
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); }