我已经对SO以及整个Google进行了相当多的研究,但是对于用Objective-C编写的iPhone / iPad应用的代码混淆,我似乎找不到直接的答案。
我的问题是:
- 有办法吗?如果是这样,怎么办?
- 这值得么?
- 将应用程序提交给他们时,Apple是否允许或存在问题?
我已经对SO以及整个Google进行了相当多的研究,但是对于用Objective-C编写的iPhone / iPad应用的代码混淆,我似乎找不到直接的答案。
我的问题是:
Answers:
似乎没有用于Objective-C的代码混淆器。但是让我们暂时假设确实存在。
只要不崩溃,苹果可能就不会拒绝混淆的应用程序。主要问题是:混淆的目的是什么?通常,您希望对代码进行混淆处理,以保护您的知识,例如,如果您的程序使用了复制保护,那么您可能会更难发现潜在的破解者;或者,如果您使用的是某些高级算法,则您不希望业务竞争对手能够反编译它。
复制保护已在iOS上得到解决。尽管可以通过越狱来复制和运行普通应用程序,但我要说的是,执行此操作的实际用户数量非常少(至少比“常规”计算机(例如PC和Mac)要低得多)。您是否期望盗版这样一个大问题需要掩饰?
如果您确实具有重要的保护知识,那么进行混淆可能是值得的。混淆有其缺点:您无法再调试已混淆的应用程序。崩溃报告将毫无用处。
您可能还想阅读文章“混淆可可”。
回到事实似乎没有混淆器:您可以做的是这个技巧:说您有一个像这样的标题:
@interface MyClass : NSObject {
}
- (void)myMethod;
您可以像这样进行廉价的混淆:
#ifndef DEBUG
#define MyClass aqwe
#define myMethod oikl
#endif
@interface MyClass : NSObject {
}
- (void)myMethod;
这样,您仍然可以在源代码中使用有意义的符号,但是在不进行调试编译时,编译器会将其转变为“垃圾”。
myMethod
存在于多个类中,则可能会产生一些真正有趣的编译错误。这是一个聪明的主意,我喜欢简单性,但是我无法想象它在任何实际系统中都值得花费。
除了先前的答案,现在还有一些第三方工具可提供一定程度的混淆和完整性保护,其中包括:
它们的功能各不相同,包括:-
所有这些工具都很昂贵,而且并非没有问题,因此您确实需要一个需要高度完整性的应用程序才能考虑它们,例如银行业务或DRM非常重要的地方。
对于这些类型的应用程序,您还需要熟练的渗透测试人员来确保您的应用程序不会以其他方式公开,因为这些工具通常仅与使用它们的人一样好,并且还有其他操作系统漏洞需要缓解这些工具不解决。
Apple已对应用程序的可执行文件进行了加密,并且应用程序沙箱的可执行代码段不可写,因此您无法进行需要修改运行时分支代码的其他加密。而且,Objective C / C编译器的优化器过程已经创建了与原始源代码非常不同的东西。使用更多的C而更少的目标C将显示较少的函数名,因为方法名嵌入在可见的纯文本中,而C函数名则不是。因此,任何商业机密类型代码都可能应使用纯C编码,并在优化器完全打开的情况下进行编译。您可以混淆应用程序捆绑包中嵌入的任何webKit Javascript或任何其他嵌入式VM代码(只要不下载解释代码)。
可能不是因为Objective-C可以编译为处理器指令,而不是被解释或编译为字节码,所以对代码进行反编译已经产生了相当模糊的结果。混淆是通常仅在必须分发代码源时才需要的东西,例如在JavaScript之类的解释性语言中,以使其运行,即使您希望代码保持秘密。