c_cpp 如何使用Apple的代码签名服务获取当前二进制文件路径的示例

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp 如何使用Apple的代码签名服务获取当前二进制文件路径的示例相关的知识,希望对你有一定的参考价值。

#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <unistd.h>

#include <Security/Security.h>


// Compile with:
//   gcc -o ourpath -framework CoreFoundation -framework Security main.c


char* getPathForPid(pid_t pid) {
    CFNumberRef value = NULL;
    CFDictionaryRef attributes = NULL;
    SecCodeRef code = NULL;
    CFURLRef path = NULL;
    CFStringRef posixPath = NULL;
    OSStatus status;
    char* ret = NULL;

    value = CFNumberCreate(kCFAllocatorDefault, kCFNumberSInt32Type, &pid);
    if (value == NULL)
        goto done;

    attributes = CFDictionaryCreate(kCFAllocatorDefault, (const void **)&kSecGuestAttributePid, (const void **)&value, 1, NULL, NULL);
    if (attributes == NULL)
        goto done;

    status = SecCodeCopyGuestWithAttributes(NULL, attributes, kSecCSDefaultFlags, &code);
    if (status)
        goto done;

    status = SecCodeCopyPath(code, kSecCSDefaultFlags, &path);
    if (status)
        goto done;

    posixPath = CFURLCopyFileSystemPath(path, kCFURLPOSIXPathStyle);
    if (path == NULL)
        goto done;

    ret = strdup(CFStringGetCStringPtr(posixPath, kCFStringEncodingUTF8));

done:
    if (posixPath)  CFRelease(posixPath);
    if (path)       CFRelease(path);
    if (code)       CFRelease(code);
    if (attributes) CFRelease(attributes);
    if (value)      CFRelease(value);

    return ret;
}


int main(int argc, char* argv[]) {
    pid_t pid = getpid();

    printf("[-] started, our pid = %d\n", pid);
    printf("[*] our argv[0] = %s\n", argv[0]);

    char* ourPath = getPathForPid(pid);
    if (ourPath) {
        printf("[*] our path = %s\n", ourPath);
        free(ourPath);
    } else {
        printf("[!] could not get our path\n");
    }

    printf("[-] done\n");
    return 0;
}

以上是关于c_cpp 如何使用Apple的代码签名服务获取当前二进制文件路径的示例的主要内容,如果未能解决你的问题,请参考以下文章

签名验证失败 - Apple 使用 Firebase JWT 登录

您的应用似乎包含用于注册 Apple 推送通知服务的 API,但应用签名的权利不包括

签署 Apple MDM 配置文件

如何从 Apple 服务器获取应用内购买列表

Apple 会在代码签名身份选择上拒绝我的应用程序吗?

如何使用 xcode 12.4 创建未签名的 ipa 文件?无法安装“亚军”?代码:代码:-402620388