Macos 防止通过cocoa osx应用程序中的可执行文件转储头文件

Macos 防止通过cocoa osx应用程序中的可执行文件转储头文件,macos,security,cocoa,executable,code-security,Macos,Security,Cocoa,Executable,Code Security,我在cocoa mac应用程序上做实验,发现我可以使用Github上提供的另一个类转储可执行文件转储应用程序可执行文件的所有头文件(.h文件) 我想知道如何防止我的应用程序使用任何第三方可执行文件(如类转储)转储头文件 倾倒命令: ./class-dump -H /Users/abc/Documents/app -o ./Headerfiles 有什么建议吗 提前谢谢我怀疑有什么办法可以防止这种情况发生 Objective-C类、方法、属性、协议和类别信息都是在运行时动态注册的。因此,可执行文

我在cocoa mac应用程序上做实验,发现我可以使用Github上提供的另一个类转储可执行文件转储应用程序可执行文件的所有头文件(.h文件)

我想知道如何防止我的应用程序使用任何第三方可执行文件(如类转储)转储头文件

倾倒命令:

./class-dump -H /Users/abc/Documents/app -o ./Headerfiles
有什么建议吗


提前谢谢

我怀疑有什么办法可以防止这种情况发生

Objective-C类、方法、属性、协议和类别信息都是在运行时动态注册的。因此,可执行文件的
\u DATA
部分必须包含所有这些信息。像
类转储
这样的工具只是对这些表进行反向工程,以创建一个等效的接口(
.h
)文件

解决这个问题的唯一方法是在运行时以编程方式创建类,在我看来这简直是疯了

一个丑陋的、充满潜在问题的半解决方案是尝试某种形式的代码混淆:

#define MyClass m0
#define doSomething m1
#define userClickedButton m2
#define hitCount m3

@interface MyClass
- (void)doSomething;
- (IBAction)userClickedButton:(id)sender;
@property NSUInteger hitCount;
将在编译的应用程序中显示为

@interface m0
- (void)m1;
- (void)m2:(id)o;
- (unsigned long)m3;
- (void)setM3:(unsigned long)n;

可能重复感谢您的回复。现在我担心我的方法实现也可能是反向工程,比如“类转储”可执行文件也可以获得我的代码?也可能吗?@我还检查了NordVPN可执行文件,但它阻止我使用相同的可执行文件(类转储)转储头。Nord如何阻止我转储头。事实:所有代码都可以反向工程。使您的程序运行的指令必须是CPU可读的,如果它们是CPU可读的,则有人可以使用CPU对它们进行解码并找出它们的作用。这一直是正确的,并且在我们的有生之年可能会继续是正确的(量子计算机依靠不改变量子态就无法观察量子态可能是一个解决方案,但这是一条出路)。我不知道NordVPN是如何做到的,但我怀疑NordVPN不是一个Objective-C程序;大多数跨平台解决方案并非如此。