X-Git-Url: https://git.saurik.com/apple/security.git/blobdiff_plain/8e292c995b66f335f19def2bcdd227168935ede0..313fa17b58b78d3c26fb986be9e8fce975cec88c:/libsecurity_codesigning/gke/gkunpack.cpp?ds=inline diff --git a/libsecurity_codesigning/gke/gkunpack.cpp b/libsecurity_codesigning/gke/gkunpack.cpp new file mode 100644 index 00000000..11e16cad --- /dev/null +++ b/libsecurity_codesigning/gke/gkunpack.cpp @@ -0,0 +1,31 @@ +// +// gkunpack - an ad-hoc tool for unpacking certain binary data from a detached code signature +// +// gkunpack prescreen_filter_data +// +#include +#include +#include + +using namespace CodeSigning; + + +int main(int argc, const char * argv[]) +{ + if (const EmbeddedSignatureBlob *top = (const EmbeddedSignatureBlob *)BlobCore::readBlob(stdin)) { + if (top->magic() == DetachedSignatureBlob::typeMagic) { // multiple architectures - pick the native one + Architecture local = Architecture::local(); + const EmbeddedSignatureBlob *sig = EmbeddedSignatureBlob::specific(top->find(local.cpuType())); + if (!sig) + sig = EmbeddedSignatureBlob::specific(top->find(local.cpuType() & ~CPU_ARCH_MASK)); + top = sig; + } + if (top) + if (const CodeDirectory *cd = top->find(cdCodeDirectorySlot)) { + printf("%s\n", cd->screeningCode().c_str()); + exit(0); + } + } + fprintf(stderr, "Invalid signature structure\n"); + exit(1); +}