我们最近让一位渗透测试人员审核了我们的应用程序,其中一个发现是拥有越狱设备的人可以连接本地调试器。
他们建议的解决方案是启用 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/