如何在Xamarin.iOS中设置PT_DENY_ATTACH?

问题描述 投票:1回答:1

最近有一个笔试人员对我们的应用进行了审核,其中一个发现是越狱设备的人可以附加本地调试器。

他们建议的解决方案是启用 PT_DENY_ATTACH 当启动应用程序时。这在原生应用程序中是相当容易做到的,但我一直无法用我们的Xamarin应用程序(不是表单)来解决这个问题。

我试过在Xcode中创建一个objc框架,绑定它并将其拉进来。我也试过创建一个共享的c++库,但在VS Mac中是不可能的。

我知道 PT_DENY_ATTACH 已经被规避了,但我还是想知道如何实现。

谢谢!

ios xamarin xamarin.ios
1个回答
1
投票

事实证明,我的objc框架表现得很正常,只是没有按照我预期的方式。出于某种原因,我仍然能够附加Visual Studio调试器,但当我转移到Xcode并尝试附加它的调试器时,当框架被调用时,它失败了。

为了回答我的问题。

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

GDBManager.h

#import <Foundation/Foundation.h>

@interface GDBManager : NSObject
+(void)DisableGDB;
@end

GDBManager.m

#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

我按照这些说明为我的库创建了一个胖文件,并在一个绑定项目中使用它。

https:/docs.microsoft.comen-usxamariniosplatformbinding-objective-cwalkthrough。

然后我将生成的dll添加到我的Xamarin.iOS项目中,并调用上面的内容 UIApplication.Main(args, null, "AppDelegate");Main.cs

© www.soinside.com 2019 - 2024. All rights reserved.