如何在Xamarin.iOS中设置PT_DENY_ATTACH?

如何在Xamarin.iOS中设置PT_DENY_ATTACH?,ios,xamarin,xamarin.ios,Ios,Xamarin,Xamarin.ios,我们最近让一位笔试人员对我们的应用程序进行了审核,结果之一是,拥有越狱设备的人可以连接本地调试器 他们建议的解决方案是在启动应用程序时启用PT\u DENY\u ATTACH。这在本地应用程序中很容易做到,但我还没能用我们的Xamarin应用程序(不是表单)解决这个问题 我试着在Xcode中创建一个objc框架,绑定它并将其拉入。我也尝试创建一个共享的C++库,但是在VS MAC中不可能。 我知道已经绕过了PT\u DENY\u ATTACH,但我仍然想知道如何实现它 谢谢 事实证明,我的obj

我们最近让一位笔试人员对我们的应用程序进行了审核,结果之一是,拥有越狱设备的人可以连接本地调试器

他们建议的解决方案是在启动应用程序时启用
PT\u DENY\u ATTACH
。这在本地应用程序中很容易做到,但我还没能用我们的Xamarin应用程序(不是表单)解决这个问题

我试着在Xcode中创建一个objc框架,绑定它并将其拉入。我也尝试创建一个共享的C++库,但是在VS MAC中不可能。 我知道已经绕过了
PT\u DENY\u ATTACH
,但我仍然想知道如何实现它


谢谢

事实证明,我的objc框架运行正常,只是没有按照我预期的方式运行。出于某种原因,我仍然能够附加VisualStudio调试器,但当我移动到Xcode并尝试附加其调试器时,调用框架时失败

回答我的问题:

在Xcode中,我用一个类创建了一个新的静态库:

GDBManager.h

#import <Foundation/Foundation.h>

@interface GDBManager : NSObject
+(void)DisableGDB;
@end
我按照这些说明为我的库创建了一个fat文件,并将其用于绑定项目

然后,我将生成的dll添加到我的Xamarin.iOS项目中,并在上面调用它
UIApplication.Main(args,null,“AppDelegate”)
in
Main.cs

#import "GDBManager.h"
#import <dlfcn.h>
#import <sys/types.h>

@implementation GDBManager
typedef int (*ptrace_ptr_t)(int _request, pid_t _pid, caddr_t _addr, int _data);
#define PT_DENY_ATTACH 31

+(void)DisableGDB {
    void* handle = dlopen(0, RTLD_GLOBAL | RTLD_NOW);
    ptrace_ptr_t ptrace_ptr = dlsym(handle, "ptrace");
    ptrace_ptr(PT_DENY_ATTACH, 0, 0, 0);
    dlclose(handle);
}
@end