X-Git-Url: https://git.saurik.com/apple/security.git/blobdiff_plain/80e2389990082500d76eb566d4946be3e786c3ef..d8f41ccd20de16f8ebe2ccc84d47bf1cb2b26bbb:/Security/libsecurity_codesigning/gke/gkunpack.cpp diff --git a/Security/libsecurity_codesigning/gke/gkunpack.cpp b/Security/libsecurity_codesigning/gke/gkunpack.cpp new file mode 100644 index 00000000..11e16cad --- /dev/null +++ b/Security/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); +}