我正在我的 cocoa mac 应用程序上做实验,发现我可以使用 Github 上的另一个类转储可执行文件来转储我的应用程序可执行文件的所有头文件(.h 文件) 。
我想知道如何防止我的应用程序使用任何 3rd 方可执行文件(如 class-dump)转储头文件。
倾倒指令:
./class-dump -H /Users/abc/Documents/app -o ./Headerfiles
有什么建议么
提前致谢
我正在我的 cocoa mac 应用程序上做实验,发现我可以使用 Github 上的另一个类转储可执行文件来转储我的应用程序可执行文件的所有头文件(.h 文件) 。
我想知道如何防止我的应用程序使用任何 3rd 方可执行文件(如 class-dump)转储头文件。
倾倒指令:
./class-dump -H /Users/abc/Documents/app -o ./Headerfiles
有什么建议么
提前致谢
我怀疑有什么办法可以防止这种情况发生。
Objective-C 的类、方法、属性、协议和类别信息都是在运行时动态注册的。因此,可执行文件的__DATA
部分必须包含所有这些信息。诸如class-dump
简单地对这些表进行逆向工程以创建等效接口 ( .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;