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