ios - 如何在 Xamarin.iOS 中设置 PT_DENY_ATTACH?

标签 ios xamarin xamarin.ios

我们最近让一位渗透测试人员审核了我们的应用程序,其中一个发现是拥有越狱设备的人可以连接本地调试器。

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

我尝试在 Xcode 中创建一个 objc 框架,将其绑定(bind)并将其拉入。我还尝试创建一个共享的 c++ 库,但这在 VS Mac 中是不可能的。

我知道PT_DENY_ATTACH已被规避,但我仍然想知道如何实现它。

谢谢!

最佳答案

事实证明,我的 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

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

https://docs.microsoft.com/en-us/xamarin/ios/platform/binding-objective-c/walkthrough

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

关于ios - 如何在 Xamarin.iOS 中设置 PT_DENY_ATTACH?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62068728/

相关文章:

c# - iOS 上的 Xamarin Forms,调试元素变为 null

c# - 如何在 Monotouch 中绑定(bind) NSObject<UIGestureRecognizerDelegate>?

ios - 推送到另一个 View Controller 在 iphone 中花费太多时间

objective-c - 如何从当前类中实例化的另一个类调用方法

ios - 如何在 Objective C 中解析 XML 文件

web-services - Xamarin:连接到本地托管的Web服务

xamarin - Realm dotnet 迁移回调未被调用

c# - 应用程序开始崩溃

ios - Xamarin.iOS 应用程序在 iOS 13 上卡住

ios - 我应该如何正确更改 ViewController.m 的文件夹位置